- 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.
„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ář:
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
Okomentovat