خانه / آموزش Power BI / آموزش پیشرفته / پیاده سازی Row-level Security در PBI Report Server

پیاده سازی Row-level Security در PBI Report Server

سلام دوستان . با یک مقاله ترجمه شده دیگر در مورد پیاده سازی Row-level Security در Power BI Report Server در خدمت شما هستیم.

این مقاله تا حد ممکن ساده و خلاصه سازی شده است و  برای دسترسی به محتوای اصلی میتوانید به لینک زیر مراجعه کنید
https://docs.microsoft.com/en-us/power-bi/report-server/row-level-security-report-server



Row-level Security می تواند به همراه Power BI برای محدود کردن دسترسی به داده‌ها برای برخی از کاربران مشخص، مورد استفاده قرار گیرد.
فیلترها سبب می‌شوند تا دسترسی به داده‌ها در سطح رکورد (row level) محدود شود و می‌توانید با توجه به نقش های کاربری, فیلترهایی را تعریف کنید. توجه کنید که در Power BI Report Server فقط کاربرانی که دارای دسترسی Publisher  یا Content Manager  میتوانند کاربران را به نقش های تعریف شده در گزارش اختصاص دهند. 
RLS فقط در گزارشهایی که داده های آن بصورت Import و یا DirectQuery خوانده میشوند , پیاده سازی خواهد شد. نه Live Connection

نکته : 
RLS برای کاربرانی که  بصورت DirectQuery  و با اعتبارسنجی مدل integrated authentication به گزارشات متصل میشوند , کاربردی ندارد

  اگر منبع اطلاعاتی شما در SSAS (tabular – multidimensional) قرار دارد و  بصورت live connections متصل میشوید باید در همان SSAS و در قسمت role نقشها و کاربران هر نقش را تعریف و تعیین کنید .

قبل از ادامه مبحث توجه کنید که در Power BI Desktop فقط می توانید Role یا همان نقش ها و نحوه فیلتر آنها بر روی اطلاعات را تعریف کنید و اختصاص کاربر به نقش Role  مدنظر را باید در Power BI Report Server تعیین کنیم

تعریف نقش‌ها و قوانین در Power BI Desktop

شما می‌توانید در Power BI Desktop نقش‌ها و قوانین (roles and rules) را تعریف کنید. زمانی که گزارش طراحی شده را منتشر میکنید ، آن نقش های تعریف شده نیز همراه گزارش منتشر میشوند.

برای تعریف نقش‌های امنیتی این گام‌ها را دنبال کنید.

  1. داده‌ها را وارد گزارش Power BI Desktop خود کنید (import) یا  بصورت   DirectQuery به منبع اطلاعاتی متصل شوید.
  2. از تب modeling قسمت Manage roles را انتخاب کنید.

Select Manage Roles

  1. Create را انتخاب کنید.
    Select Create

  2. برای نقش role مورد نظر یک نام انتخاب کنید.
  3. جدولی که می‌خواهید قانون DAX بر آن اعمال شود را انتخاب کنید.
  4. عبارات DAX را وارد کنید. این عبارت باید در آخر صحیح یا غلط باشد. برای مثال: [ENTITY ID] = “VALUE”

    Manage roles window

نکته

می‌توانید در این عبارت از تابع  username() استفاده کنید. مراقب باشید که username() درPower BI Desktop دارای فرمت Domain\username است. در Service Power BI و Power BI Report Server دارای فرمت User Principal Name (UPN) است. همچنین می‌توانید از userprincipalname() که همیشه کاربر را به فرمت نام کاربری اصلی usernme@contoso.com بازمی‌گرداند استفاده کنید

 

  1. پس از اینکه عبارت DAX را ساختید می‌توانید برای تایید عبارت تیک موجود در بالای کادر عبارت را بزنید.
    Validate DAX expression

نکته: در این کادر میتونید از کاما برای جداکردن فیلرهای مختلف استفاده کنید

   ۸٫ Save را انتخاب کنید.

شما نمی‌توانید با استفاده از Power BI Desktop برای کاربران نقش برگزینید.
 باید ارتباط بین نقش و کاربران را در Power BI Service یا Power BI Report Server انجام دهید.
می‌توانید با DAX و استفاده ازusername()  یا userprincipalname() امنیت پویا (Dynamic Security) را در Power BI Desktop ایجاد و روابط مناسب را تنظیم کنید.

Bidirectional cross-filtering

RLS به صورت پیش‌فرض فارغ از اینکه روابط (Relationships) یک‌جهتی یا دو‌جهتی هستند، برای فیلتر کردن از فیلترهای تک‌جهتی استفاده می‌کند. با انتخاب رابطه‌ی مورد نظر و علامت زدن تیک گزینه‌ی “اعمال فیلتر امنیتی در هر دو جهت” در کادر انتخابی، می‌توانید از طریق RLS به صورت دستی Apply security filter in both directions  را فعال کنید.
Apply security filter

همچنین در زمانی که در سطح سرور RLS پویا یا همان dynamic row-level security  را اجرا می‌کنید باید به بررسی این کادر بپردازید و ببینید که RLS بر اساس نام کاربری تنظیم شده است یا ID ورودی.
برای اطلاعات بیشتر لینکهای زیر را مطالعه کنید

 Bidirectional cross-filtering using DirectQuery in Power BI Desktop 
Securing the Tabular BI Semantic Model 


تست نقش‌ها در Power BI Desktop

پس از اینکه نقش‌های خود را ایجاد کردید، نتایج را در Power BI Desktop تست کنید.

  1. گزینه‌ی view as roles را انتخاب کنید.
    Select View as Roles

در بخش view as roles، نقش‌هایی که ایجاد کرده‌اید را مشاهده می‌کنید.
View as roles window

  1. نقشی که ایجاد کرده‌اید را انتخاب کنید و سپس ok را بزنید تا نقش مورد نظر اعمال شود. گزارش‌ سبب می شود تا داده های مربوط به آن نقش ارائه شود.

  2. همچنین می توانید other user را انتخاب کنید و یک کاربر مشخص را برگزینید. بهترین راه این است که نام اصلی کاربری (UPN) را ارائه دهید چراکه Service Power BI و Power BI Report Server از این نام کاربری استفاده می‌کنند.
    Select Other user

  3. Ok را انتخاب کنید تا گزارش بر اساس آنچه کاربر قادر به مشاهده‌ی آن است تطبیق پیدا کند.

بخش other user در Power BI Desktop، تنها در صورتی که بر اساس عبارات DAX خود از dynamic security  استفاده کنید نتایج متفاوتی را نمایش می‌دهد.

اختصاص کاربر به نقش 

بعد از اینکه گزارش طراحی شده را در Power BI Rerpot Server قرار دادید میتوانید مدیریت کاربران و نقش ها را انجام دهید
فقط کاربری که دارای دسترسی از نوع Publisher یا Content Manager میتواند نقش ها و کاربران را مدیریت کنید.
اگر داخل PowerBI Desktop برای گزارش نقشی تعریف نکرده باشید, در Report Server نمیتوانید Role تعریف کنید یا کاربرانی به نقش ها اختصاص دهید

برای مدیریت امنیت در مدل داده‌ی خود باید یه صورت زیر عمل کنید.

  1. بر روی گزارش , گوشه سمت راست بالا , منوی سه نقطه (…) را انتخاب کنید.
  2. گزینه‌ی Manage > Row-level security را انتخاب کنید.
    Manage row-level security

این کار باعث می‌شود تا به صفحه‌ی RLS وارد شوید و بتوانید اعضا را به نقش‌هایی که در Power BI Desktop ایجاد کرده‌اید , اضافه کنید.

شما تنها در Power BI Desktop می‌توانید نقش‌ها را ایجاد و سازماندهی کنید و اختصاص کاربر به نقش ها در Rerpot Server انجام میشود.

۳٫ بر روی اضافه کردن کاربر به نقش بر روی دکمه Add Member کلیک کنید

۴٫نام کاربر یا گروه کاربری را با فرمت DOMAIN\user بنویسید و بعد تعیین کنید که این کاربر یا گروه کاربری چه نقش هایی میتواند داشته باشد.
دقت کنید که کاربر یا گروه کاربری باید در ویندوز سرور و یا دامینی که سرور در آن قرار دارد از قبل تعریف شده باشند

Add member to role

۶٫ بر روی دکمه OK کلیک کنید تا تغییرات ذخیره شوند

شما همچنین می‌توانید بر حسب عددی که در کنار نوع نقش در کنار Members قرار دارد، ببینید که چند نفر در نقشی که ایجاد کرده‌اید موجود اند.

۷٫ برای حذف اعضا میتوانید آن را انتخاب کنید و دکمه Delete را کلیک کنید
Delete members

 

 

استفاده از تابع زبان DAX بنام  username یا userprincipalname

 شما می‌توانید از این توابع در تعریف عبارات فیلتر هنگام تعریف نقش role در  Power BI Desktop استفاده کنید. زمانی که گزارش خود را بر روی Power BI Rerpot Server منتشر میکنید , از این توابع برای شناسایی کاربری که در حال مشاهده گزارش هست استفاده میشود تا در صورت نیاز طبق نقشهایی که برای آن کاربر تعیین شده است , اطلاعات را ببیند.
مثلا اگر کاربر شعبه شیراز در حال مشاهده گزارش بود, فقط اطلاعات فروش شعبه شیراز را ببیند و نه شعبات دیگر را

در  Power BI Desktop تابع ()  username , نام کاربر را با فرمت DOMAIN\user و تابع userprincipalname  نام کاربر را با فرمت ایمیلی مثلا user@cntoso.com برمیگرداند.

در Power BI Rerpot Server  هر دو تابع  نام کاربری را بصورت (UPN) که شبیه به آدرس ایمیل به نظر می‌رسد.برمیگرداند. البته حتما این مورد را در عمل چک کنید چون ممکن است مشابه Power BI Desktop  هر تابع, نام کاربری را در قالب متفاوتی برگرداند.

محدودیت‌ها

در قسمت زیر محدودیت‌های فعلی RLS در مدل ابری آمده است.

  • اگر اخیرا در سرویس Power BI نقش‌ها و قوانینی را تعریف کرده‌اید باید بار دیگر در Power BI Desktop آن‌ها را تعریف کنید.
  • شما تنها می‌توانید RLS را مجموعه داده‌هایی که در Power BI Dektop ساخته شده‌اند تعریف کنید. اگر می‌خواهید RLS را برای مجوعه داده‌هایی که در Excel ساخته شده‌اند فعال کنید، باید ابتدا فایل‌های خود را به فایل‌های Power BI Desktop(PBIX) تبدیل کنید.
  • تنها ارتباطات Import و DirectQuery پشتیبانی می‌شوند. ارتباطات زنده Live Connection برایanalysis services با مدل on-premeises مدیریت می‌شود.

پرسش‌های متدوال (FAQ)

پرسش: آیا می‌توانم این نقش‌ها را برای منبع داده‌ی Analysis Service ایجاد کنم؟

پاسخ: اگر داده‌ها را به Power BI Desktop بصورت import وارد کنید، می توانید. اگر از  Live Connection استفاده می‌کنید، قادر به ایجاد RLS در Power BI نیستید.
اگر منبع اطلاعاتی شما در SSAS (tabular – multidimensional) قرار دارد و  بصورت live connections متصل میشوید باید در همان SSAS و در قسمت role نقشها و کاربران هر نقش را تعریف و تعیین کنید .

پرسش: آیا می‌توانم برای محدود کردن ستون‌ها یا بررسی دسترسی کاربران از RLS استفاده کنم؟

پاسخ: خیر، اگر یک کاربر به یک ردیف از داده دسترسی داشته باشد، می‌تواند تمام ستون‌ها و داده‌های آن ردیف را مشاهده کند.

پرسش: آیا RLS به من امکان پنهان کردن داده‌ها را می‌دهد و از طرفی دسترسی به خلاصه‌ی نمایشی داده‌ها را مقدور می‌کند؟

پاسخ: خیر، وقتی کاربر به اطلاعات رکوردهایی دسترسی داشته باشه هم میتواند جزئیات را ببیند و هم نتایج خلاصه شده آن اطلاعات را .

 
پرسش : آیا میتوانم نقش جدید در Power BI Desktop به گزارش اضافه کنم در حالی که این گزارش قبلا منتشر شده است و دارای نقش و کاربران اختصاص داده شده باشد؟

پاسخ : بله میتوانید

 

درباره‌ی حمیدرضا بابازاده

کارشناس ارشد هوش تجاری در اتریش با بیش از ده سال سابقه فعالیت در زمینه تحلیل دیتا و تدریس SQL SERVER و Power BI

همچنین ببینید

DirectQuery ، Live Connection یا Import Data ؟ تصمیم سخت !

DirectQuery ، اتصال زنده (Live Connection) یا وارد کردن داده ها (Import Data) ؟ تصمیم سخت !

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

معادله امنیتی (فقط عدد بنویسید) *