عیبیابی امنیت ردیف و ستون
امنیت ردیف و ستون به برخی افراد دسترسی به فقط یک زیرمجموعه از داده میدهد. برای پیادهسازی امنیت ردیف و ستون، متابیس یک کوئری اجرا میکند که ردیفها را فیلتر میکند و/یا یک زیرمجموعه از ستونها را از یک جدول بر اساس مجوزهای شخص انتخاب میکند؛ کوئری شخص سپس روی نتیجه کوئری اولیه اجرا میشود (یعنی، روی داده امنشده اجرا میشود).
این مقالهها به شما کمک میکند درک کنید امنیت ردیف و ستون چگونه کار میکند:
اگر مشکل دسترسی داده متفاوتی دارید، به مشکلات مرتبط مراجعه کنید.
افراد نمیتوانند ردیفها را در جدولی که باید بتوانند ببینند ببینند
آیا متابیس ردیفها را بر اساس یک ویژگی کاربر فیلتر میکند؟
علت اصلی: امنیت ردیف از یک ویژگی کاربر برای فیلتر کردن ردیفها استفاده میکند.
مراحل انجام:
این رفتار مورد انتظار است: استفاده از یک ویژگی کاربر برای فیلتر کردن ردیفها نحوهٔ کار امنیت ردیف است. اما اگر نمیخواهید متابیس آن ردیفها را فیلتر کند، باید یکی از این کارها را انجام دهید:
- امنیت ردیف را حذف کنید (که دسترسی کامل به همه ردیفها را به همه با دسترسی به آن جدول اعطا میکند). به Admin > Permissions بروید، و سطح دسترسی را برای جدول تغییر دهید.
- شخص را به یک گروه (یا ایجاد یک گروه) با مجوزهای متفاوت به جدول اضافه کنید. راهنمای مجوزهای داده را بررسی کنید.
افراد میتوانند ردیفها را که نباید ببینند ببینند
چندین دلیل وجود دارد که افراد میتوانند ردیفهایی را که نباید ببینند ببینند.
آیا آن افراد همچنین در گروههایی با مجوز برای مشاهده کل جدول هستند؟
علت اصلی: افراد در گروههایی با مجوز برای مشاهده جدول هستند، و بنابراین میتوانند همه ردیفها را ببینند، نه فقط ردیفهای امنشده.
مراحل انجام:
برای شخص مورد نظر، بررسی کنید که به کدام گروهها تعلق دارند. آیا هر یک از گروهها به جدولی که سعی میکنید امن کنید دسترسی دارند؟ اگر بله، آنها را از آن گروه حذف کنید. به خاطر داشته باشید که همه عضو گروه "All users" هستند؛ به همین دلیل توصیه میکنیم مجوزها را از گروه all users لغو کنید، و گروههای جدید ایجاد کنید تا مجوزها را بهصورت انتخابی به منابع داده خود اعمال کنید.
آیا سؤال از طریق Static embedding یا Public Sharing در دسترس است؟
علت اصلی: سؤال عمومی است. سؤالهای عمومی، حتی آنهایی که از Static embedding استفاده میکنند، نمیتوانند امن شوند. اگر کسی سؤال را بدون ورود به متابیس مشاهده کند، متابیس فاقد ویژگیهای کاربر یا اطلاعات گروه برای فیلتر کردن داده است، بنابراین همه نتایج را نشان میدهد.
مراحل انجام:
باید از public sharing اجتناب کنید وقتی داده را امن میکنید. به public sharing مراجعه کنید.
آیا سؤال در SQL نوشته شده است؟
علت اصلی. نمیتوانید امنیت ردیف و ستون را به افراد با دسترسی SQL اعمال کنید. آنها به همان اندازه دسترسی به پایگاه داده دارند که حساب کاربری استفادهشده برای اتصال متابیس به پایگاه داده دارد. حتی اگر جداول را در متابیس مخفی کنید، کسی با دسترسی SQL به یک پایگاه داده همچنان قادر خواهد بود آن جداول را کوئری کند. که همچنین به این معنی است که نمیتوانید امنیت ردیف و ستون را به سؤالهای SQL اعمال کنید. امنیت ردیف و ستون بهطور انحصاری برای سؤالهای composed شده در query builder اعمال میشود.
مراحل انجام
سعی نکنید امنیت ردیف و ستون را به یک سؤال نوشته شده در SQL اعمال کنید، چون نمیتوانید.
اگر میخواهید ردیفها یا ستونها را امن کنید، از اضافه کردن شخص به یک گروه با دسترسی SQL به آن جدول (یا هر دسترسی مجازتر دیگری به آن جدول، برای این موضوع) اجتناب کنید.
اگر میخواهید به آنها دسترسی SQL بدهید، اما همچنان آنچه شخص میتواند ببیند را محدود کنید، باید مجوزها را در پایگاه داده خود تنظیم کنید، و آن پایگاه داده را از طریق حساب کاربری با آن دسترسی محدود متصل کنید. میتوانید همان پایگاه داده را چندین بار به متابیس متصل کنید، هر کدام با سطوح متفاوت دسترسی، و اتصالات متفاوت را به گروههای متفاوت expose کنید.
آیا سؤال داده را از یک منبع داده non-SQL بازیابی میکند؟
علت اصلی: امنیت ردیف و ستون از پایگاهدادههای non-SQL پشتیبانی نمیکند.
مراحل انجام:
کار زیادی نمیتوانید اینجا انجام دهید: اگر نیاز به اعمال امنیت ردیف و ستون دارید، نمیتوانید از این پایگاهدادهها استفاده کنید.
اگر از Single Sign-on (SSO) استفاده میکنید، آیا ویژگیهای کاربر صحیح هستند؟
علت اصلی: اگر افراد با SSO وارد میشوند، اما ویژگیهای مورد انتظار ذخیره و در دسترس نمیشوند، policyهای امنیت ردیف و ستون دسترسی را رد میکنند.
مراحل انجام:
مستندات ما دربارهٔ احراز هویت با SAML و احراز هویت با JWT توضیح میدهند چگونه از ارائهدهنده هویت خود برای ارسال ویژگیهای کاربر به متابیس استفاده کنید، که (ویژگیهای کاربر) میتوانند برای اعمال امنیت ردیف و ستون استفاده شوند.
افراد میتوانند ستونها را که نباید ببینند ببینند
آیا ادمین فراموش کرده است امنیت ردیف و ستون را تنظیم کند؟
علت اصلی: ادمین هنگام تنظیم امنیت ردیف و ستون دسترسی به جدول زیربنایی را محدود نکرده است.
مراحل انجام:
- به پنل Admin > Permissions برای جدول مورد نظر بروید.
- بررسی کنید که امنیت ردیف و ستون تنظیم شده است، و سؤالی که برای ایجاد یک view سفارشی از جدول استفاده میشود ستونهایی که نمیخواهید افراد ببینند را مستثنی میکند.
آیا سؤال استفادهشده برای تنظیم امنیت ردیف و ستون شامل ستونها است؟
علت اصلی: سؤال استفادهشده برای اعمال امنیت ردیف و ستون شامل ستونهایی است که نباید ببینند.
مراحل انجام:
مطمئن شوید که از یک سؤال SQL برای اعمال امنیت ردیف و ستون استفاده میکنید، و ستونهایی که باید مستثنی کنید را شامل نمیکنید.
اگر یک سؤال با استفاده از query builder میسازید (یعنی، از یک سؤال ساده یا سفارشی استفاده میکنید)، ممکن است بهطور ناخواسته ستونهای اضافی را pull کنید. میتوانید دقیقاً کدام ستونها شامل میشوند را با مشاهده سؤال در Notebook Editor و کلیک روی دکمه View the SQL بررسی کنید. اما دوباره: اگر از سؤالهای SQL برای اعمال امنیت ردیف و ستون استفاده میکنید، این مشکل از بین میرود.
آیا شخص در گروه دیگری با سطح مجوز متفاوت برای جدول است؟
علت اصلی: امنیت ردیف و ستون را به جدول با سؤال اعمال کردهاید، اما شخص همچنین در یک گروه با سطح دسترسی بالاتر به جدول است. اگر یک شخص در چندین گروه است، مجازترین دسترسی به یک منبع داده را در همه گروههای خود دریافت میکند.
مراحل انجام:
شخص را از همه گروههایی با سطح دسترسی بالاتر به جدول امنشده حذف کنید. اگر به برخی مجوزها از آن گروههای دیگر نیاز دارند، باید یک گروه جدید با مجموعه جدیدی از مجوزها که فقط امنیت ردیف و ستون را به جدول اعمال میکند ایجاد کنید.
افراد نمیتوانند ستونها را که باید بتوانند ببینند ببینند
آیا گروه آنها امنیت ردیف و ستون اعمال شده به جدول دارد؟
علت اصلی: آنها فقط دسترسی به جدولی با امنیت ردیف و ستون اعمال شده دارند، جایی که فقط برخی ستونها نشان داده میشوند.
مراحل انجام:
این افراد را به یک گروه (یا ایجاد یک گروه جدید) که مجوز برای مشاهده جدول دارد اضافه کنید.
آیا یک ادمین فیلدها را در جدول مخفی کرده است؟
علت اصلی:: یک ادمین فیلدها را در جدول مخفی کرده است.
مراحل انجام:
به Admin > Table Metadata بروید و جدول را پیدا کنید. بررسی کنید که فیلدهایی که میخواهید قابل مشاهده باشند مخفی نیستند.
آیا یک فیلد remap شده است تا اطلاعات از یک جدول محدود شده نمایش دهد؟
علت اصلی: اگر جدولی که شخص دارد امنیت ردیف و ستون دارد فیلدی دارد که از remapping برای نمایش اطلاعات از جدول دیگری که شخص به آن دسترسی ندارد استفاده میکند، نمیتوانند جدول را ببینند. بهعنوان مثال، اگر یک فیلد ID را remap کردهاید تا نام یک محصول را به جای آن نمایش دهد، اما شخص به جدول محصول دسترسی ندارد، نمیتوانند ستون را ببینند.
مراحل انجام:
- به پنل Admin > Table Metadata برای فیلدهای مورد نظر بروید.
- اگر مقدار از یک جدول محدود شده remap شده است، آن را تغییر دهید تا متابیس از مقدار اصلی از جدول استفاده کند. برای اطلاعات بیشتر به ویرایش Metadata مراجعه کنید.
آیا سؤال از طریق static embedding در دسترس است؟
علت اصلی: Static embedding بهطور پیشفرض همه نتایج را نشان میدهد. در حالی که ممکن است فیلتر کردن با پارامترهای قفل شده کنترل شود، static embedding فقط به token تولید شده توسط صفحه شامل کننده بستگی دارد، نه اینکه آیا کسی به متابیس وارد شده است.
مراحل انجام:
از آنجایی که کسی باید وارد شود تا متابیس بتواند امنیت ردیف را برای آن شخص اعمال کند، از استفاده از static embedding وقتی میخواهید دسترسی ردیف یا ستون به یک جدول را محدود کنید اجتناب کنید.
افراد نمیتوانند دادهای که باید بتوانند ببینند را ببینند
کسی باید بتواند برخی از مقادیر در یک جدول را در کوئریهای خود مشاهده کند، اما دسترسی رد میشود یا یک مجموعه خالی از نتایج دریافت میکند جایی که باید داده باشد.
علت اصلی: ادمین دسترسی به جدول را محدود کرده است. اگر محدودیتها بهاشتباه خیلی سخت هستند (مثلاً، "no access")، پس افراد ممکن است اصلاً نتوانند هیچ دادهای را ببینند.
مراحل انجام:
- سطح دسترسی را برای گروهها با رفتن به پنل Admin و مشاهده Permissions برای جدول مورد نظر بررسی کنید.
- اگر شخص در یک گروه با دسترسی به آن جدول نیست، آنها را به یک گروه که دارد اضافه کنید، یا یک گروه جدید با دسترسی به آن جدول ایجاد کنید و آنها را به آن گروه جدید اضافه کنید.
آیا شخصی که نمیتواند داده امنشده را ببیند در چندین گروه است؟
علت اصلی: ما فقط یک اعمال امنیت ردیف و ستون برای هر جدول اجازه میدهیم: اگر کسی عضو دو یا چند گروه با مجوزهای متفاوت است، هر قانون برای فهمیدن اینکه آیا دسترسی باید مجاز باشد یا نه گیجکننده است. بنابراین ما فقط یک قانون اجازه میدهیم.
مراحل انجام:
ادمین میتواند یک گروه جدید ایجاد کند تا دقیقاً مشخص کند چه کسی مجاز به دسترسی به چه چیزی است.