Blog JSystems - uwalniamy wiedzę!

Szukaj

Power BI - Bezpieczeństwo: RLS, OLS i etykiety poufności

Użytkownik w dwóch rolach RLS widzi dane obu ról naraz

W skrócie

  • Gdy w Power BI jedna osoba ma dwie role RLS, widzi dane obu ról naraz. W Nordvelli Region Południe daje 83 460 430 zł, Sklep Warszawa 222 818 295 zł, a obie role razem 306 278 725 zł z siedmiu sklepów, a nie część wspólną.
  • Według dokumentacji Microsoft role RLS się sumują, a ich filtry łączą się operatorem lub, więc wygrywa szerszy dostęp. Zasada, że raz odebrany dostęp zostaje odebrany, tu nie obowiązuje. Do drugiej roli można też trafić przez grupę zabezpieczeń.
  • Każdej osobie dajesz jedną rolę, która opisuje cały jej zakres, warunki łączysz w jednej regule, a przypisania sprawdzasz poleceniem Testuj jako rola dla konkretnej osoby. RLS i OLS dla jednej osoby muszą być w tej samej roli.

Dwie role RLS dla jednej osoby to częsty pomysł, gdy ktoś ma widzieć region i dodatkowo jeden sklep albo region bez marży. W Power BI efekt bywa zaskakujący: zamiast części wspólnej użytkownik widzi wszystko, co dają obie role razem, a w niektórych układach dostaje błąd. Pokazujemy na modelu Nordvelli, jak role się łączą, i jak zaprojektować je tak, żeby się nie nakładały.

Jak to wygląda w praktyce

W lekcji 21 zaznaczyliśmy w oknie Wyświetl jako role dwie role naraz: Region Południe i Sklep Warszawa. Pasek pokazał obie role, a raport 306 mln zł, 71 tys. transakcji i siedem sklepów. Tak samo działa przypisanie jednej osoby do dwóch ról w usłudze Power BI. Zapytanie z warunkami obu ról połączonymi operatorem lub dało na modelu 306 278 725,18 zł, 7 sklepów i 71 315 transakcji: trzy sklepy Regionu Południe, trzy salony warszawskie i sklep internetowy Nordvella Online, który w danych ma miasto Warszawa.

Osoba, która miała zobaczyć tylko część danych, widzi więc więcej niż w każdej z ról osobno. Gdy jedna z ról ma OLS, a druga filtr wierszy, objaw jest inny: Desktop odmawia podglądu komunikatem „Wybrana kombinacja ról nie jest obsługiwana, ponieważ nie można łączyć zabezpieczeń na poziomie wiersza i zabezpieczeń na poziomie obiektu z różnych ról” (w angielskiej wersji: „The selected combination of roles is not supported because row-level and object-level security cannot be combined from different roles”).

Raport Nordvelli w podglądzie dwóch ról naraz, Region Południe i Sklep Warszawa: 306 mln zł i siedem sklepów
Dwie role to suma, nie część wspólna. Region Południe daje 83 460 430 zł, Sklep Warszawa 222 818 295 zł, a razem 306 278 725 zł: tyle pokazuje suma tabeli. Gdyby filtry łączyły się przez i, raport byłby pusty.

Dlaczego tak się dzieje

Według dokumentacji Microsoft role RLS są addytywne: osoba w dwóch rolach widzi wiersze z obu. Dokumentacja dodaje, że znana z uprawnień w bazach SQL Server zasada, według której raz odebrany dostęp zostaje odebrany (po angielsku once denied always denied), tu nie obowiązuje. Rola z regułą FALSE () i rola z regułą TRUE () dają razem dostęp do wszystkich wierszy, w Nordvelli do 15 sklepów. Filtry ról łączą się operatorem lub. Gdyby łączyły się przez i, raport byłby pusty: warunki [Region] = "Południe" i [Miasto] = "Warszawa" połączone przez && zostawiły 0 sklepów, bo żaden sklep nie leży jednocześnie w Warszawie i w Regionie Południe.

Suma nie zawsze rośnie. Rola dynamiczna Manager sklepu dla Anny Wiśniewskiej (sklep Warszawa Centrum, 34 740 655,15 zł) razem z Region Południe dała 118 201 085,40 zł, a dla Piotra Nowaka 83 460 430,25 zł, tyle co sam region, bo jego sklep w Krakowie leży w Regionie Południe. Jedna osoba w zespole może więc nie zauważyć problemu, który drugiej otwiera dane innego miasta. Członkostwo w roli przychodzi też przez grupy zabezpieczeń, więc ktoś może trafić do dwóch ról, choć nikt nie przypisał go wprost. Gdy szerszy dostęp wynika z roli w obszarze roboczym, a nie z ról RLS, zajrzyj do posta o administratorze obszaru, który widzi wszystko.

Co zrobić krok po kroku

  1. Sprawdź, w ilu rolach jest osoba. W usłudze przy modelu semantycznym kliknij Więcej opcji, potem Zabezpieczenia, i na stronie Zabezpieczenia na poziomie wiersza przejrzyj członków każdej roli. Szukaj zarówno adresu tej osoby, jak i grup, do których należy.
  2. Sprawdź efekt łączny na konkretnej osobie. Przy roli kliknij trzy kropki, wybierz Testuj jako rola, a na pasku Przeglądanie jako: wybierz tę osobę. Według dokumentacji Microsoft ten sam pasek pozwala testować kombinację ról. W Desktopie odpowiednikiem jest zaznaczenie kilku ról w oknie Wyświetl jako role.
  3. Zaprojektuj jedną rolę na jeden zakres. Gdy osoba ma widzieć Region Południe i salony warszawskie, załóż dla niej rolę z jedną regułą na DimSklepy, zamiast przypisywać ją do dwóch ról. Reguła poniżej wycina sklep internetowy, który w danych ma miasto Warszawa. Zostawia 6 sklepów i 164 505 876,59 zł. Dokumentacja Microsoft zaleca jedną rolę, która daje komplet uprawnień danej osoby.
    [Region] = "Południe"
        || ( [Miasto] = "Warszawa" && [Typ] <> "E-commerce" )
  4. Gdy osoba ma widzieć część wspólną, na przykład tylko salony flagowe w swoim regionie, połącz warunki w jednej regule operatorem &&. Reguła poniżej zostawia dwa sklepy, Kraków Stare Miasto i Katowice, razem 64 526 603,27 zł. Dwie osobne role, Region Południe i rola salonów flagowych, dałyby sumę: 6 sklepów i 176 187 100,71 zł, z Gdańskiem, Wrocławiem i Warszawą Centrum.
    [Region] = "Południe" && [Typ] = "Flagship"
  5. Osobie, która ma mieć filtr wierszy i OLS, daj jedną rolę z oboma zabezpieczeniami. W lekcji 22 rola Sprzedawca Południe miała regułę na DimSklepy taką jak Region Południe i OLS na tych samych czterech kolumnach co rola Sprzedawca: pokazała 83 mln zł regionu, a karta marży i tabela pokazały błąd. Szczegóły OLS opisujemy w poście o ukryciu kolumny i OLS.
  6. Uważaj na relacje z filtrem zabezpieczeń w obu kierunkach. Silnik ma komunikat „Użytkownik należy do wielu ról „Region Południe, Sklep Warszawa”, które mają filtry zabezpieczeń, co nie jest obsługiwane, gdy jedna z ról ma filtry wpływające na tabelę „DimSklepy” z relacjami SecurityFilteringBehavior=Both.” (w angielskiej wersji: „The user belongs to multiple roles 'Region Południe, Sklep Warszawa' that have security filters, which isn't supported when one of the roles has filters affecting table 'DimSklepy' with SecurityFilteringBehavior=Both relationships.”). Z treści komunikatu wynika, że przy takich relacjach osoba w kilku rolach z filtrami dostaje błąd zamiast sumy. Samą opcję opisujemy w poście o filtrze zabezpieczeń w obu kierunkach.

Jak sprawdzić, że problem zniknął

Naprawione, gdy każda osoba jest w jednej roli, a Testuj jako rola dla tej osoby pokazuje dokładnie jej zakres. W Nordvelli rola z reguły z kroku 3 ma dać 6 sklepów, a z reguły z kroku 4 dwa sklepy, Kraków Stare Miasto i Katowice. Patrz na sumę w tabeli albo na karcie: przy dwóch rolach pokazywała 306 278 725 zł zamiast oczekiwanej kwoty.

Nazywaj role od zakresu osoby, a nie od pojedynczego warunku, prowadź listę, kto jest w której roli, i przypisuj grupy zabezpieczeń, których członkowie nie nakładają się między rolami. Gdy osoba potrzebuje też zablokowanych kolumn, łączysz wszystko w jednej roli, jak w lekcji o etykietach poufności i OLS.

Źródła i sposób sprawdzenia

  • Microsoft Learn: Row-level security (RLS) guidance in Power BI Desktop (unikaj wielu ról, filtry addytywne) (źródło)
  • Microsoft Learn: Row-level security (RLS) with Power BI (FAQ: user in multiple roles, Test as role) (źródło)
  • Kurs Power BI, lekcja 21 (test roli poleceniem Wyświetl jako, kilka ról naraz: 306 278 725 zł) i lekcja 22 (RLS i OLS dla jednej osoby: tylko w jednej roli)
  • Sprawdzone zapytaniami DAX na modelu Nordvelli: warunki ról połączone operatorem lub i operatorem i, rola dynamiczna razem ze statyczną, reguły jednej roli

Zachowanie programu sprawdziliśmy w Power BI Desktop 2.157 (wydanie z sierpnia 2026 r.) z polskim interfejsem, a przykłady na modelu sieci Nordvella z bezpłatnego kursu Power BI. Microsoft wydaje nową wersję Power BI Desktop co miesiąc, więc nazwy przycisków i limity usługi mogą się zmieniać. Aktualne wartości podaje dokumentacja Microsoft Learn.

Wróć do listy: 131 najczęstszych pytań i problemów związanych z Power BI

Najczęściej zadawane pytania

Co widzi użytkownik w dwóch rolach RLS w Power BI?
Sumę danych obu ról. Według dokumentacji Microsoft role RLS są addytywne, a ich filtry łączą się operatorem lub. W modelu Nordvelli rola Region Południe daje 83 460 430 zł, rola Sklep Warszawa 222 818 295 zł, a obie role razem 306 278 725 zł z siedmiu sklepów.
Jak w Power BI ograniczyć dane do części wspólnej dwóch warunków RLS?
Warunki łączy się w jednej regule jednej roli operatorem i, a nie w dwóch osobnych rolach, bo dwie role zawsze dają sumę. W Nordvelli reguła z warunkami Region Południe i Typ Flagship zostawia dwa sklepy, Kraków Stare Miasto i Katowice, razem 64 526 603,27 zł.
Czy można połączyć RLS i OLS z dwóch różnych ról w Power BI?
Nie. Power BI Desktop odmawia podglądu takiej kombinacji komunikatem, że nie można łączyć zabezpieczeń na poziomie wiersza i zabezpieczeń na poziomie obiektu z różnych ról. Osoba, która ma mieć filtr wierszy i zablokowane kolumny, dostaje jedną rolę z regułą wierszy i ustawieniem OLS.
Jak sprawdzić, w ilu rolach RLS jest użytkownik Power BI?
W usłudze Power BI przy modelu semantycznym wybierz Więcej opcji i Zabezpieczenia, a na stronie Zabezpieczenia na poziomie wiersza przejrzyj członków każdej roli, także grupy. Efekt łączny sprawdzisz poleceniem Testuj jako rola, wybierając na pasku Przeglądanie jako konkretną osobę.

Komentarze (0)

Musisz być zalogowany by móc dodać komentarz. Zaloguj się przez Google

Brak komentarzy...