úterý 25. března 2008

Jak zajistit, aby uživatelé viděli v reportech / dashboardech pouze ty informace, na které mají nárok (Row Level Security)

Mezi další požadavky na Analytický systém patří bezpečnost. Bezpečnost v rámci Oracle Business Intelligence můžeme rozdělit do několika oblastí:
  • Ověřování (Authentication) více zde

  • Oprávnění (Authorization)
    • Na objekty – tzn. na BI metadata (Cílové oblasti, dimenze, ukazatele, ...), na reporty, dashboardy, záložky atd.

    • Na systém – tzn. na BI nástroje (BI Answers, BI Delivers, ...) a na operace, které lze provádět v rámci jednotlivých nástrojů (např. tvorba reportu, prohlížení/úprava dashboardu, plánování distribuce sestav, zpětný zápis, ...)

    • „Na data - řádky“ (Row Level Security) – tzn. kontrola přístupu na obsah (řádky), který vidí uživatel v rámci Analytického systému (tj. v rámci reportu, dashboardu, sestavy, atd.)

Oprávnění „na data - řádky“ (Row Level Security)
To, čeho je třeba docílit je jednou vyvinout report nebo dashboard a pak v něm uživatelům (dle jejich role a oprávnění) zobrazovat pouze ty informace, na které mají nárok - tzn. je třeba nastavit Row Level Security.

Globální Dashboard "Prodeje" – Přístup uživatele s plným oprávněním
(vidí informace za celou firmu)



Globální Dashboard "Prodeje" – Přístup manažera pobočky ČR
(vidí informace pouze za danou pobočku)



„Row Level Security“ můžete nastavit globálně pro celou databázi – podmínkou je, že vybraná databázová technologie tuto bezpečnostní politiku podporuje. V případě, že zdrojová data jsou uložena v databázi Oracle, pak můžete využít funkcionalitu Virtual Private Database (VPD). Nespornou výhodou VPD je, že nezáleží z jakých nástrojů/aplikací budou uživatelé přistupovat na data (tj. Oracle BI, jiné BI, TOAD, SQL Navigator, SQL Plus .... aplikace) – vždy uvidí pouze ta data, na která mají nárok.

V případě, že zdrojová databáze neumožňuje použít „Row Level Security“, pak ji můžete nastavit v rámci Oracle Business Intelligence EE / SE-One. Postup viz. níže.


Postup
1/ Někde (v databázi, Excelu, LDAPu) je třeba udržovat informace o tom, kdo má na co práva (v mém případě mám v db tabulku REGION_MANAGER obsahující informace o loginu uživatele do BI a pobočce/regionu na kterou má oprávnění).



2/ Pomocí Variable Managera (menu Manage > Variables ...) založte Session Variable Inicialization Block, který vybere pro právě zalogovaného uživatele (proměnná :USER) data z Vaší security tabulky (u mne je to výše uvedená tabulka).
Výsledný řádek dotazu uložte do Vaší proměnné, na kterou se dále budete odkazovat (v mém případě je to proměnná PRODEJ_REGION). V případě, že uživatel má právo na více regionů (tzn. select bude vracet více jak jeden řádek), je třeba, aby cílová proměnná byla typu Row-wise (více o použití Row-wise proměnné najdete zde v bodu 8).



3/ Pomocí Security Managera (menu Manage > Security ...) založte skupinu (v mém případě skupina „Regionalni manager“), přes kterou nastavíte restrikce/práva vybraným uživatelům. Poté přidejte uživatele do skupiny (u mne je to uživatel czmgr a skmgr).



4/ Pro založenou skupinu vyberte volbu „Permissions...“



5/ Přejděte na záložku Filters a zde vyberte a nadefinujte požadované restrikce/filtry


  • Pro sloupec „Name“ vyberte z Prezentační vrstvy Cílovou oblast a složku (postupně všechny složky tj. všechny dimenze a fakta z Vašeho modelu), pro kterou chcete nastavit omezení

  • Pro sloupec „Status“ vyberte Enable
  • Pro sloupec „Business Model Filter“ zadejte podmínku, která omezuje data pouze na ta, na která má mít právě přihlášený uživatel právo, tj. hodnota sloupce = Vaše proměnná z kroku 2 (v mém případě sloupec STAT z dimenze GEOGRAFIE obsahuje názvy všech poboček a proměnná PRODEJ_REGION obsahuje pobočku právě přihlášeného uživatele – tzn. filtr zajišťuje restrikci na data o jeho pobočce).


Všimněte si, že filtr ("Prodejní analýzy".GEOGRAFIE.STAT = VALUEOF(NQ_SESSION."PRODEJ_REGION")) je zkopírován pro všechny složky (tj. všechny dimenze a fakta) z modelu. To je z důvodu, aby byla zajištěna stejná restrikce i pro jiné dimenze v cílové oblasti. Tzn. když si uživatel do reportu vloží pouze sloupce Výnos, Náklad a Prodejní kanál, tak stejně v reportu uvidí pouze informace o Výnosech a Nákladech přes Prodejní kanály za jeho pobočku (tzn. sloupec STAT v reportu nemusí být uveden).



Erik Eckhardt (eec).

1 komentář:

Anonymní řekl(a)...

Funguje to opravdu celkem dobře i když některé vygenerované dotazy nejsou zrovna optimální. Potřeboval bych uživatelům omezit pohled pouze na jejich střediska - což tímto způsobem není probém.

Ovšem další požadavek je, aby od určité úrovně organizační struktury k datům zas přístup měli (tedy vlastně k souhrnům např. za pobočku, za region, za stát ...). Nevím jak toto řešit neboť když mám omezení dané na všechny dimenze a data (jak je to i v prikladu) tak mi nepomuze ani dalsi tabulka s daty agregovanymi za vyssi celky - BI to provaze s dimenzi struktury a vysledek omezi.

Stejně tak když se potom zobrazují data z jiné tabulky, která již nemá být nijak omezována a použije se časová dimenze na které omezení je (nakopírované omezení na střediska jako ve vašem příkladu), tak v dotazu odesílaném do DB je join těchto tabulek.

Dik za radu
Vladimir Cekal
vlacek@volny.cz