در تحلیل داده های سازمانی، حفظ امنیت اطلاعات به اندازه ی دقت گزارش ها اهمیت دارد. زمانی که از Power BI برای ساخت داشبورد و گزارش استفاده می کنیم، ضروری است هر کاربر فقط به داده های مرتبط با نقش خود دسترسی داشته باشد. در همین نقطه، قابلیتی به نام Row Level Security یا به اختصار RLS نقش حیاتی خود را نشان می دهد.
Row Level Security روشی است برای کنترل دسترسی کاربران به داده ها در سطح سطر. به کمک آن، می توان تعیین کرد که هر کاربر، تنها داده های مربوط به خود را ببیند. این قابلیت در محیط های سازمانی، جایی که مدیران و کارمندان در سطوح مختلف با داده ها کار می کنند، اهمیت زیادی دارد.
در این مقاله به صورت گام به گام با مفهوم Row Level Security پیاده سازی در Power BI آشنا می شویم، نحوه ی عملکرد آن را بررسی می کنیم و روش اجرای ایستا و پویا را در محیط Desktop و Service آموزش خواهیم داد.
مفهوم Row Level Security
در دنیای تحلیل داده و گزارش سازی، امنیت اطلاعات به اندازه ی صحت داده ها اهمیت دارد. تصور کنید در یک سازمان بزرگ، مدیر فروش کل کشور، مدیران استانی و کارشناسان فروش در سطوح مختلف به یک داشبورد Power BI دسترسی دارند. طبیعتاً هرکدام باید فقط به داده های مربوط به خود دسترسی داشته باشند. به عنوان مثال، مدیر فروش تهران نباید آمار فروش اصفهان را ببیند و بالعکس. اینجا دقیقاً جایی است که Row Level Security یا به اختصار RLS وارد عمل می شود.
Row Level Security به معنای «امنیت در سطح سطر» است. در واقع، این ویژگی در Power BI به شما اجازه می دهد تا تعیین کنید کدام کاربر، چه سطرهایی از داده را مشاهده کند. برخلاف فیلترهای معمولی که کاربر می تواند آن ها را تغییر دهد، فیلترهای RLS توسط سازنده مدل اعمال می شوند و کاربر نهایی نمی تواند آن ها را حذف یا ویرایش کند.
به زبان ساده، RLS ابزاری است برای کنترل دسترسی دقیق کاربران به داده ها بر اساس نقش یا شناسه آن ها. مثلاً وقتی یک کاربر خاص وارد داشبورد می شود، تنها داده های مرتبط با خودش را مشاهده می کند، بدون اینکه نیاز به ساخت چندین گزارش مجزا برای هر فرد باشد.
اهمیت پیاده سازی Row Level Security در Power BI از دو جنبه قابل بررسی است. اول، امنیت اطلاعات که از نشت داده های حساس جلوگیری می کند. دوم، مدیریت ساده تر، زیرا به جای ساخت چند گزارش جداگانه برای کاربران مختلف، تنها یک مدل داده ای طراحی می شود که رفتار آن بر اساس نقش کاربر تغییر می کند.
به همین دلیل، پیاده سازی صحیح Row Level Security در Power BI یکی از مهم ترین مهارت هایی است که هر متخصص داده باید به آن تسلط داشته باشد.
نحوه عملکرد Row Level Security

برای درک عمیق تر Row Level Security پیاده سازی، باید ابتدا منطق عملکرد آن در پشت صحنه را بشناسیم. در Power BI، RLS با استفاده از فیلترهای منطقی (Boolean Filters) بر روی جداول مدل داده کار می کند. این فیلترها مشخص می کنند که چه سطرهایی برای چه کاربری نمایش داده شود. به صورت کلی، RLS را می توان به دو دسته تقسیم کرد:
Row Level Security ایستا (Static RLS)
در این مدل، فیلترها به صورت مستقیم و ثابت در تعریف نقش (Role) نوشته می شوند. برای مثال، اگر بخواهیم کاربران خاصی فقط داده های مربوط به شهر «تهران» را ببینند، کافی است در بخش Roles بنویسیم:
[City] = “Tehran”.
در این حالت، هر کاربری که به این Role اختصاص داده شود، فقط داده های مربوط به تهران را مشاهده خواهد کرد.
Static RLS برای سازمان های کوچک یا مدل هایی با تعداد کاربران محدود مناسب است، زیرا نیاز به نگهداری پویا ندارد.
Row Level Security پویا (Dynamic RLS)
اما در مدل های بزرگ تر و حرفه ای تر، استفاده از Dynamic RLS ضروری است. در این روش، به جای تعریف فیلترهای ثابت، یک جدول حاوی اطلاعات کاربران (User Mapping Table) ایجاد می شود که در آن نام کاربر، ایمیل یا نقش او با محدوده داده مرتبط است.
سپس از تابع قدرتمند USERPRINCIPALNAME() در DAX استفاده می شود تا سیستم بداند کاربر فعلی کیست و بر اساس آن فیلترهای لازم را اعمال کند.
به عنوان مثال:
[SalesRegion] = LOOKUPVALUE(UserTable[Region], UserTable[Email], USERPRINCIPALNAME())
در این حالت، هر کاربر به صورت خودکار فقط داده های مربوط به منطقه ی خودش را خواهد دید.
تفاوت اصلی بین Static و Dynamic RLS در انعطاف پذیری و مقیاس پذیری است. در پروژه های سازمانی، Dynamic RLS نه تنها زمان نگهداری را کاهش می دهد بلکه مدیریت دسترسی ها را نیز به شدت ساده تر می کند.
مراحل پیاده سازی Row Level Security در Power BI Desktop

برای درک کامل فرآیند Row Level Security پیاده سازی در Power BI، ابتدا باید مراحل را در محیط Power BI Desktop انجام دهید و سپس مدل را در Power BI Service منتشر کنید.
در Power BI Desktop، پیاده سازی RLS شامل سه مرحله ی اصلی است: تعریف نقش ها، تنظیم فیلترها، و تست عملکرد. هر یک از این مراحل باید با دقت انجام شود تا از بروز خطا در سطوح دسترسی جلوگیری گردد.
در مرحله ی نخست، باید جدول داده ای را شناسایی کنید که می خواهید دسترسی آن محدود شود. این جدول معمولاً شامل فیلدی است که بتوان با آن داده ها را فیلتر کرد؛ مانند «شهر»، «استان»، «منطقه فروش»، یا «کد کارمند».
در مرحله ی بعد، از منوی Modeling در Power BI Desktop، گزینه ی Manage Roles را انتخاب کنید. در پنجره بازشده، نقش جدیدی تعریف کرده و شرط موردنظر را با استفاده از DAX بنویسید. به عنوان مثال اگر بخواهید کاربران استان تهران فقط داده های مربوط به تهران را ببینند، می توانید در بخش فیلتر بنویسید:
[Province] = “Tehran”
اگر بخواهید چند نقش مختلف داشته باشید (برای مثال مدیران مناطق مختلف کشور)، می توانید چندین Role با شرایط متفاوت تعریف کنید.
پس از تعریف Roleها، نوبت به تست می رسد. با استفاده از گزینه ی View as Roles می توانید بررسی کنید که هر کاربر با نقش خاص چه داده هایی می بیند. این مرحله اهمیت زیادی دارد زیرا اطمینان حاصل می کند فیلترها به درستی کار می کنند و کاربری به داده ای خارج از محدوده ی مجاز خود دسترسی ندارد.
در پروژه های بزرگ، معمولاً از ترکیب Dynamic RLS و Static RLS استفاده می شود تا بتوان کنترل دقیق تری بر داده ها داشت. برای مثال، مدیر ارشد می تواند همه ی داده ها را ببیند (ALL Regions)، در حالی که کارشناسان فروش فقط داده های محدوده ی خودشان را مشاهده می کنند.
پیاده سازی Row Level Security در Power BI Service

پس از آنکه مدل داده را در Power BI Desktop پیکربندی کردید، نوبت به انتشار و مدیریت نقش ها در Power BI Service می رسد. این مرحله همان جایی است که کنترل واقعی کاربران انجام می شود.
در Power BI Service، ابتدا فایل را منتشر کنید. سپس به Dataset مربوطه بروید و از بخش Security، Roleهایی را که در Power BI Desktop تعریف کرده اید مشاهده خواهید کرد. در اینجا می توانید کاربران واقعی (یا گروه های کاربری در Microsoft 365) را به هر Role تخصیص دهید.
برای مثال، ممکن است یک Role با نام “Sales_Tehran” داشته باشید که فقط داده های استان تهران را نمایش می دهد. کافی است ایمیل کاربران مربوط به تهران را در آن Role اضافه کنید. از این پس، هر زمان آن کاربر وارد داشبورد شود، فقط اطلاعات مربوط به تهران برایش نمایش داده می شود.
در صورتی که از Dynamic RLS استفاده می کنید، نیازی نیست برای هر کاربر نقش جدا بسازید. سیستم به صورت خودکار با توجه به آدرس ایمیل کاربر، داده های مرتبط را فیلتر می کند. تنها کافی است از توابع DAX مانند USERPRINCIPALNAME() یا USERNAME() در تعریف فیلترها استفاده کنید تا Power BI بتواند کاربران را شناسایی کند.
یکی از نکات مهم در این مرحله، تست دسترسی ها پس از انتشار است. برای اطمینان از صحت عملکرد RLS در Power BI Service، می توانید از قابلیت Test as Role استفاده کنید. این قابلیت به شما اجازه می دهد تا وضعیت داشبورد را از دید کاربران مختلف شبیه سازی کنید و مطمئن شوید اطلاعات نادرستی نمایش داده نمی شود.
مدیریت صحیح نقش ها در Power BI Service نه تنها امنیت داده ها را تضمین می کند بلکه اعتماد مدیران و کاربران سازمان به سیستم گزارش گیری را افزایش می دهد.
هرچند Row Level Security پیاده سازی در ظاهر ساده به نظر می رسد، اما در عمل نکات فنی بسیاری دارد که رعایت آن ها باعث بهبود عملکرد و امنیت مدل داده می شود.
یکی از رایج ترین خطاها در پروژه های Power BI، اشتباه در طراحی روابط بین جداول است. RLS تنها زمانی به درستی کار می کند که مدل داده شما دارای روابط صحیح بین جداول باشد. اگر بین جدول کاربران و جدول اصلی داده ارتباط وجود نداشته باشد، فیلترهای امنیتی اعمال نخواهند شد.
نکته مهم دیگر، استفاده از Dynamic RLS در سازمان های بزرگ است. به جای تعریف ده ها Role برای هر شهر یا واحد سازمانی، کافی است یک جدول User Mapping داشته باشید و با استفاده از USERPRINCIPALNAME() داده ها را به صورت پویا فیلتر کنید. این روش مقیاس پذیری را افزایش داده و نگهداری مدل را بسیار ساده تر می کند.
در طراحی RLS همچنین باید به عملکرد توجه داشت. فیلترهای پیچیده و چندلایه ممکن است سرعت پردازش را کاهش دهند. بنابراین، همیشه سعی کنید منطق فیلترها را ساده و بهینه نگه دارید.
از نظر تجربه کاربری نیز بهتر است همیشه با مدیران سازمان هماهنگ شوید تا محدوده ی دسترسی کاربران به درستی تعیین گردد. گاهی اوقات اشتباه در تعریف Roleها باعث می شود کاربران کمتر از سطح مجاز داده ببینند، که در تحلیل های مدیریتی مشکلاتی ایجاد می کند.
در نهایت، قبل از انتشار نهایی مدل در سازمان، چندین بار تست امنیتی انجام دهید. Power BI این امکان را فراهم کرده است تا با شبیه سازی نقش ها، بتوانید بررسی کنید که هر کاربر دقیقاً چه اطلاعاتی مشاهده می کند.
سخن پایانی
در دنیای امروزی که تصمیم گیری های سازمانی بر پایه داده انجام می شود، حفظ امنیت اطلاعات به همان اندازه تحلیل داده اهمیت دارد. قابلیت Row Level Security پیاده سازی در Power BI یکی از قدرتمندترین ابزارهایی است که به شما اجازه می دهد کنترل دقیقی بر روی سطح دسترسی کاربران داشته باشید.
با استفاده از RLS، می توان یک مدل داده واحد ساخت که رفتار آن برای هر کاربر بر اساس نقش و هویتش متفاوت باشد. این ویژگی نه تنها امنیت داده ها را تضمین می کند بلکه مدیریت سیستم های گزارش گیری را نیز بهینه تر می سازد.
اگر تازه وارد دنیای Power BI شده اید، پیشنهاد می شود از مدل های ساده شروع کرده و به تدریج به سمت پیاده سازی Dynamic RLS حرکت کنید. تسلط بر این مفهوم، یکی از مهارت های کلیدی برای تبدیل شدن به یک متخصص حرفه ای Power BI است.
سوالات متداول در مورد Row level security پیاده سازی
۱. آیا Row Level Security فقط در Power BI Service فعال است؟
خیر، شما می توانید RLS را در Power BI Desktop تعریف و تست کنید، اما کنترل کاربران و نقش ها پس از انتشار در Power BI Service انجام می شود.
۲. تفاوت بین Static RLS و Dynamic RLS چیست؟
در Static RLS فیلترها به صورت ثابت تعریف می شوند، اما در Dynamic RLS فیلترها به صورت پویا بر اساس نام یا ایمیل کاربر اعمال می گردند.
۳. آیا RLS باعث کاهش سرعت گزارش ها می شود؟
در مدل های بزرگ و فیلترهای پیچیده ممکن است کمی تأثیرگذار باشد، اما با طراحی بهینه و فیلترهای ساده، می توان عملکرد را حفظ کرد.