پیاده سازی Static and Dynamic Row Level Security (RLS) in Power BI (امنیت سطح ردیف به صورت ثابت و متحرک)
Row Level Security (RLS) ، به عبارت ساده ، روشی است که ما داده های ارائه شده در گزارش را بر اساس ورود کاربران محدود می کنیم.
پیچیدگی تنظیم RLS بسته به تعداد دایمنشن و اعضای دایمنشن که نیاز به امنیت دارند متفاوت است.
این رویکرد شامل ایجاد نقش برای انواع مختلف کاربر و سپس اعمال فیلترها در جداول دایمنشن مورد نظر است.
با این حال ، اگر لیست کاربران شما طولانی تر باشد و دایمنشن شما در معرض تغییر باشد ، به روش پویا نیاز خواهید داشت.
راه اندازی RLS استاتیک در Power BI :
بیایید با یک مثال ثابت شروع کنیم. سناریویی را در نظر بگیرید که می خواهید جدول کشور را برای یک کاربر به ازای هر کاربر امنیت سازی کنید. مراحل زیر را طی خواهید کرد:
در تب "Modeling" در نوار ابزار Power BI روی "Manage roles" کلیک کنید.
یک نقش جدید ایجاد کنید ، جدولی را که می خواهید بر اساس نقش فیلتر شود انتخاب کنید و سپس یک عبارت True / False ایجاد کنید تا این جدول با آن فیلتر شود.
اکنون که نقش ایجاد شده است ، عملکرد را با استفاده از دکمه "View as" آزمایش کنید.
کادر کنار نقشی را که می خواهید آزمایش کنید علامت بزنید
راه اندازی RLS داینامیک در Power BI :
به جای اختصاص دادن نقش به کاربران در پورتال BI ، ما می توانیم لیستی از کاربران را در خارج (در پایگاه داده یا به سادگی در اکسل) ذخیره کنیم و از توابع USERNAME () یا USERPRINCIPALNAME () برای فیلتر کردن جداول داده ایمن استفاده کنیم.
حالا مراحل را ببینیم!
تعیین نقش های مختلف کاربر :
به عنوان مثال ، برای کاربران عمومی ، ما می خواهیم نقشی در امنیت داده ها برای کشورهای قاره ای داشته باشیم. بنابراین ، در مورد داده های نمونه ما ، باید نقشه ای از کاربران به آمریکای شمالی و اروپا وجود داشته باشد.
اگر کاربر "VP" باشد ، به او دسترسی کامل می دهیم.
جداول "Users" و "Roles" چیزی شبیه به این خواهند داشت:
تنظیم روابط جدول
جداول را با هم و سپس به جدول فکت مطابق تصویر پیوند دهید:
Users[Role] 🡪 Roles[Role]
Roles[Country] 🡪 financials[Country]
نقش ها را مدیریت کنید
نقش جدیدی ایجاد کنید. جدول "کاربران" را انتخاب کرده و یک عبارت true / false ایجاد کنید تا این جدول با آن فیلتر شود. در این مثال ، ما از تابع USERPRINCIPALNAME () استفاده خواهیم کرد.
نقش ها را آزمایش کنید
اکنون که نقش ایجاد شده است ، عملکرد را با استفاده از دکمه "View as" آزمایش کنید.
از آنجا که User2 برای مشاهده کشورهای اروپایی تنظیم شده است ، ما بلافاصله می بینیم که داده ها فقط به فرانسه و آلمان فیلتر می شوند.
از این پس هر زمان که تغییراتی در جدول کاربر و یا جدول نقش هایی که به این گزارش متصل است اعمال می کنید ، به طور خودکار جریان می یابد. نیازی نیست که وارد شوید و هر کاربر را به صورت جداگانه انتخاب کنید تا به هر نقش اختصاص یابد.
سناریوی پیچیده تر :
اکنون ، برای پیچیدگی بیشتر ، بیایید با استفاده از DAX پیشرفته ، امنیت بیش از یک دایمنشن را به صورت داینامیک بررسی کنیم.
فرض کنید می خواهیم نقش های خود را به عنوان بخش های مختلف تجاری تعریف کنیم.
ما می توانیم لیستی از بخش ها را به کاربران اختصاص دهیم و مقادیر بخش را با استفاده از عملکرد CONTAINSSTRING () فیلتر کنیم.
ما یک ستون ، ستون RoleSegment را به جدول کاربران خود اضافه می کنیم. این را می توان با استفاده از یک تابع () LOOKUP () در Role Country در یک جدول جداگانه ، یا به صورت دستی برای هر کاربر سفارشی کرد. بهترین روش استفاده از روش جستجوی جدول است.
در این مورد ، ما یک جدول بخش جداگانه داریم که به جدول فکت اصلی ما متصل است. نیازی به ایجاد ارتباط مستقیم با این جدول نیست زیرا ما نقش های امنیتی را با استفاده از DAX فیلتر می کنیم. شکل چیزی شبیه به این خواهد بود:
در ویزارد"Manage roles" (که قبلاً استفاده شد) DAX زیر را در جدول بخش در نقش امنیت پیاده سازی کنید.
این DAX جدول بخش را به هر عضوی که در لیست جدا شده با کاما در قسمت RoleSegment در بالا وجود دارد فیلتر می کند. در حال حاضر وقتی از User3 فیلتر میگیریم، نه تنها کشورهایی را که تنها به آمریکای شمالی فیلتر شده اند ، بلکه بخشهایی را که در لیست "GeneralNA" محدود شده است ، مشاهده می کنیم.
با استفاده از این دو روش به عنوان راهنما ، می توانید امنیت را برای هر ابعادی که مناسب می دانید در یک مدل داده واحد تنظیم کنید.