16. ledna 2016

Jak funguje zabezpečení dat v SSAS

Cca dva roky zpátky jsem měl na TechEdu v Praze přednášku na téma „Dynamické zabezpečení“. Je to také téma, které mě opět čeká v práci na aktuálním projektu. O co se jedná? V podstatě o nastavení individuálních práv jednotlivým uživatelům za použití MDX výrazů. K onomu zabezpečení dynamickému se dostanu v dalším článku, nejprve jako předvoj projdu zabezpečení základní, abychom si ukázali jak to funguje, ale také limity. Budu se opět soustředit na multidimenzionální modely analysis services, protože multidimenzionální nasazení v Česku a na Slovensku jsou stále v drtivé většině.
Zabezpečení Analysis Services
Předtím, než se pustíme do zabezpečení dynamického, chtělo by to projít, jak funguje kalsické zabezpečení SSAS. Proti SSAS se můžeme ověřovat pomocí Windows autentizace. Buď pomocí doménových Windows účtů, nebo pomocí Windows účtů lokálních. SSAS rozeznávají 2 typy rolí. Role serverová je pouze jedna, nastavuje se na instanci a sem spadají všichni správci instance (ekvivalent sysadmina z DB enginu). Mohou všechno ve všech databázích na dané instanci, stejně jako měnit nastavení instance. Dále můžeme tvořit databázové role uživatelské svázané s jednou konkrétní databází. Role se dají tvořt buď ve Visual studiu, nebo přes Management studio. Pokud budete přidávat členy role přes management studio a následně budete chtít databázi aktualizovat z Visual Studia, dejte si pozor, ať si nastavení rolí nepřepíšete. Visual studio se neptá a přelívá. Použijte místo toho deployment wizard pro SSAS.
Designer role
Projďeme si jednotlivé záložky. Budu popisovat jen to co je většinou potřeba
General – týká se databáze. Full control = admin dané databáze (nikoliv celé instance). Process database – uživatel většinou nepotřebuje, ale hodí se servisnímu účtu, pod kterým procesujeme kostku. View definition – uživatel, který prochází kostky nepotřebuje, vývojář, který chce psát MDX dotazy ano. Jinak neuvidí databázi v Management studiu.
Membership – sem patří členové role. Většinou se práva nastavují na úrovni AD skupin.
Data sources – většinou není potřeba
Cubes – vždycky je potřeba. Zde definujete přístupy k jednotlivým kostkám ve stejné databázi. Access se dá zvolit none/read/read-write. Read-write se týká funkce Writeback (samo o sobě nestačí, je toho potřeba nastavit poněkud více).
Local cube/drill through access – lokální kostka znamená, že můžete data z SSAS stáhnout lokálně do souboru .cub a lokální kostku procházet bez konektivity na zdroj (přežité, použijte raději PowerPivot, který je v podstatě taky lokální kostkou a umí toho nesrovnatelně více). Drill through se naopak hodí. Možná znáte dvojklik na buňku v Excelu při procházení přes kontingenční tabulku. Detaily se vysypou na nový list a to je přesně ono. Drill through. SSAS také podporují detailnější Drillthrough akci (je možno vyjmenovat, které dimenze, measures atd použít. Ve výchozím chování je jak lokální kostka, tak drill through zakázáno a můžete je jednotlivě povolit.
Cell data – zabezpečení se dá řešit na úrovni jednotlivých buněk pomocí MDX výrazu. Když mají ale analysis services testovat práva pro individuální buňky je to problém, protože buněk je hodně. Jedná se o spolehlivého zabijáka výkonu, kterého navíc zpravidla nepotřebujete (jde to jinak, čtěte dál). Na záložce cell data můžete s výhodou použít funkci test cube security. Testováni co vidí členové role i když jste admin bez nutnosti logovat se pod jiným uživatelem.
Dimensions – týká se sdílených dimenzí mezi různými kostkami, zde nastavíte akorát read, read/write na celé dimenzi. Writeback dimenzí jsem zatím nepotřeboval, stejně chybí nějaká normální klientská aplikace (Excel 2010 a vyšší umí pouze writeback faktů, nikoliv dimenzí)
Poslední záložka Mining structures se týká datamingu. Nás bude nejvíce zajímat záložka předposlední
Dimension data
Zde se děje veškerá magie s řízením přístupu kdo co uvidí/neuvidí. Dialog si můžete prohlédnout na obrázku
Rozbalovací menu dimensions umožňuje vybrat, zda chcete práva omezit na úrovni dimenzí sdílených a ovlivnit všechny kostky, nebo zda chcete v konkrétní kostce omezit měřítka, které daný uživatel uvidí, případně jestli chcete omezit dimenzionální záznamy v dané kostce.
Pokud bych v MDX Tutorial kostce zvolil dim Product, mám dvě možnosti jak postupovat. Buď můžu explicitně zakazovat položky, které nemá uživatel vidět, nebo vyberu deselect all members a naopak explicitně zatrhávám jen položky, které daný uživatel má vidět. Na pozadí se generuje buď denied member set, nebo allowed member set (zobrazíte na záložce advanced).
Vyberu, že uživatelé mají vidět pouze kategorii bikes
Přepínám na záložku Advanced a vidím následující obrazovku
Generoval se mi allowed member set (z povolených/zakázaných setů bude vycházet dynamické zabezpečení). Kromě toho můžu nastavit default membera. Může být užitečné například v situaci, že firma působí jak v Česku, tak na Slovensku. Češi můžou vidět výkony Slováků a obráceně. Výchozí řez ale uvidí pouze pro svůj region.
Také vidíme nenápadné, byť důležité zatržítko: “enable visual totals” Které znamená, sčítám jen to na co mám práva do celkové sumy. Pokud jsme explicitně zatrhli, že uživatel uvidí jen “Bikes”, celkovou sumu vidí za celou firmu. Pokud mu tedy nezatrhneme enable visual totals, což by viděl celkový souhrn jen za “Bikes”. Hodí se občas oba přístupy. Někdy kvůli výpočtu % podílu prodejů daného prodejce umožníme vidět i celkové příjmy, nebo naopak dost často chceme, aby každý viděl jen tu část, za kterou je odpovědný i v celkové sumě.
Omezení
Nevím o žádném omezení fyzickém (počet rolí), když ale chcete řešit granulárně práva kdo má k čemu přístup. Dojdete dříve či později do bodu zlomu. Vyklikávání povolených/zakázaných setů je udržitelné jen do určité míry. Pokud bychom chtěli rozsekat Českou republiku geograficky a omezit práva na úrovni krajů. Tímto přístupem bychom museli vytvořit 14 rolí (jedna pro každý kraj pokud dobře počítám). Vyklikávat 14 rolí je už pro mne na hranici udržitelnosti/přehlednosti. Nebylo by jednodušší mít roli pouze jednu a konfiguraci brát z databázové tabulky podle toho kdo je přihlášen? Za mě ano a to je právě ten případ, kdy sáhneme po dynamickém zabezpečení a budeme práva nastavovat MDX výrazem. To je téma pro článek někdy v snad blízké budoucnosti :)
Závěr

V dnešním článku jsme shrnuli jak funguje nastavení oprávnění v analytických službách SQL Serveru. Došli jsme až na hranici udržitelnosti při potřebě definovat práva hodně granulárně. Připravili jsme si půdu pro článek jak nastavit a řídit práva pomocí MDX výrazů.

3 komentáře:

  1. Výživný článek, díky za užitečný přehled! Těšíme se na to dynmické pokračování :)

    OdpovědětVymazat
  2. Tak dynamické zabezpečení sepsáno zde: http://www.neoral.cz/2016/01/dynamicke-zabezpeceni-ssas-s-pouzitim.html

    OdpovědětVymazat