Řízení přístupu je jedním z klíčových konceptů ve všech databázových prostředích. V tomto článku se dozvíme o řízení přístupu založeného na rolích Snowflake (RBAC) a o tom, jak vytvořit vlastní role a udělit přístup k rolím z WebUI Snowflake a pomocí klienta SnowSQL CLI.
1. Co je Role based Access Control (RBAC)?
Sněhová vločka poskytuje Role-based Access Control (RBAC) jako mechanismus pro udělování nebo odepírání přístupu k různým databázovým objektům a akcím objektům zabezpečení (uživatelům, službám atd.).
2. Co je Role?
Role jsou entity, které mohou udělovat a odebírat práva k zabezpečeným objektům. Uživatelům jsou přiděleny role, které jim umožňují provádět činnosti nezbytné pro obchodní funkce jejich organizace.
Uživatel může mít přiřazeno několik rolí. Uživatelé si mohou vyměňovat role a provádět různé úkoly s různými sadami práv.
Role lze přiřadit i jiným rolím, což také vede k hierarchii rolí. Vlastní role mohou být vytvořeny uživateli s vhodným přístupem. Jakékoli role nad touto pozicí v hierarchii zdědí oprávnění spojená s touto rolí.
V účtu Snowflake budou některé role definované systémem, které jsou vestavěny. Role, které jsou definovány systémem, nelze odebrat a oprávnění přiřazená těmto rolím nelze zrušit.
Existuje pět systémem definovaných rolí a Snowflake určuje, jakou „roli“ by měla každá systémová role plnit a kterou by uživatelé měli následovat.
- SPRÁVCE ÚČTU: Pozice ACCOUNTADMIN spojuje odpovědnosti SYSADMIN a SECURITYADMIN do jedné.
- ORGADMIN: Na organizační úrovni se jedná o roli, která řídí provoz.
- SPRÁVCE ZABEZPEČENÍ: Tato pozice je zodpovědná za sledování a správu uživatelů a rolí.
- USERADMIN: Tato pozice má na starosti vytváření rolí a uživatelů.
- SYSADMIN: V účtu má tato role schopnost vytvářet sklady, databáze a další objekty. SYSADMIN má shrnout všechny vlastní role.
- VEŘEJNÉ: Toto je role, která je automaticky přiřazena všem uživatelům a rolím ve vašem účtu.
Kromě těchto systémově definovaných rolí lze vytvářet role podle požadavku a přidělovat této roli oprávnění. To se nazývá Vlastní role .
3. Hierarchie rolí a dědičnost privilegií
Následující diagram ukazuje, jak jsou systémem definované role hierarchizovány a jak lze vlastní role přidružit k systémem definovaným rolím.
ORGADMIN je samostatná systémová role, která dohlíží na operace v celé organizaci. Hierarchie systémových rolí tuto roli neobsahuje.

Příklad pro hierarchii rolí a dědění oprávnění:

Ve výše uvedeném příkladu
- Role 2 zdědí oprávnění „Vybrat“.
- Role 1 zdědí oprávnění „Vybrat“ a „Vytvořit“.
- Uživatel 1 byla přidělena Role-1, což znamená všechna tři oprávnění.
- Uživateli 2 byla přidělena role 2, což znamená oprávnění „Vybrat“ a „Vytvořit“.
Poznámka: Rolím budou udělena oprávnění a role budou uděleny uživatelům, aby určovaly akce/operace, které mohou uživatelé provádět s objekty v systému.
4. Jak vytvořit vlastní role
Zde vytvoříme vlastní role, o kterých jsme hovořili dříve. Můžeme vytvořit pravidla z WebUI Snowflake nebo pomocí SnowSQL CLI klienta. Nejprve uvidíme grafický způsob.
4.1. Vytvořte role z WebUI Snowflake
Systémem definované role si můžete prohlédnout v uživatelském rozhraní Snowflake. Přejděte na Účet Snowflake 🡪 🡪 Role .

Vytvořte novou roli s názvem 'dev_ostechnix' . Chcete-li tak učinit, přejděte na Snowflake-UI 🡪 Účet 🡪 Role 🡪 Vytvořit .

Vyplňte název role, vyberte nadřazenou roli a okomentujte tuto roli.

Nová role 'dev_ostechnix' bude vytvořena, jakmile stisknete tlačítko 'Dokončit'.
Tuto vlastní roli jsme vytvořili se systémem definovanou rolí 'ACCOUNTADMIN' . V současné době nebyla tato role udělena žádnému uživateli. Protože je rodičovská role SYSADMIN, role 'dev_ostechnix' je přidělena uživateli 'SYSADMIN' .

4.2. Vytvořte role z příkazového řádku pomocí SnowSQL
Propojte Snowflake se SnowSQL pomocí příkazu níže:
# snowsql -a uz64318.southeast-asia.azure -u OSTECHNIX
Zadejte heslo svého účtu:
Password: * SnowSQL * v1.2.21 Type SQL statements or !help OSTECHNIX#[email protected](no database).(no schema)>

ACCOUNT ADMIN je super privilegovaná role, s touto rolí jsme se přihlásili. Nyní vytvoříme vlastní roli pomocí role ACCOUNT ADMIN.
Aktuální roli můžete zkontrolovat pomocí níže uvedeného příkazu:
OSTECHNIX#[email protected](no database).(no schema)>select current_role(); +----------------+ | CURRENT_ROLE() | |----------------| | ACCOUNTADMIN | +----------------+ 1 Row(s) produced. Time Elapsed: 0.133s OSTECHNIX#[email protected](no database).(no schema)>

Vytvořte roli 'TEST_OSTECHNIX' s komentářem 'role testera' pomocí níže uvedeného příkazu.
OSTECHNIX#[email protected](no database).(no schema)>CREATE ROLE "TEST_OSTECHNIX" COMMENT = 'tester role';
Ukázkový výstup:
+-------------------------------------------+ | status | |-------------------------------------------| | Role TEST_OSTECHNIX successfully created. | +-------------------------------------------+ 1 Row(s) produced. Time Elapsed: 0.753s OSTECHNIX#[email protected](no database).(no schema)>

Role můžete zobrazit pomocí příkazu níže.
OSTECHNIX#[email protected](no database).(no schema)>show ROLES;

V současnosti nejsou roli 'TEST_OSTECHNIX' udělena žádná oprávnění.
Ověřte udělení pomocí níže uvedeného příkazu.
OSTECHNIX#[email protected](no database).(no schema)>show grants to role TEST_OSTECHNIX;

5. Udělte roli oprávnění
Každá kategorie objektů bude mít vlastní sadu oprávnění. Například 'Virtual Warehouse' bude mít níže uvedená oprávnění.
- MODIFY: Umožňuje měnit vlastnosti Warehouse.
- MONITOR: Umožňuje sledovat dotazy spuštěné ve skladu a statistiky využití skladu.
- PROVOZOVAT: Umožňuje změnit stav skladu jako Stop, Start, Suspend &Resume. Umožňuje také zobrazit minulé a současné dotazy ve skladu a zrušit dotazy.
- POUŽITÍ: Umožňuje používat Sklad, tj. umožňuje provádět dotazy ve Skladu.
- VLASTNICTVÍ: Umožňuje plnou kontrolu nad skladem. Toto oprávnění může mít u objektu současně pouze jedna role.
- VŠECHNY: Umožňuje všechna oprávnění kromě VLASTNICTVÍ.
Zde udělujeme oprávnění objektu 'Virtual Warehouse' do role, kterou jsme vytvořili výše.
5.1. Udělte oprávnění roli z WebUI Snowflake
Roli můžete změnit, pokud byla role přidělena. Protože používáme roli ACCOUNT ADMIN, bude mít super kontrolu. Přepněte roli kliknutím na možnosti v části Účet v pravém horním rohu.
Nyní jsme v roli 'SPRÁVCE ÚČTU'. Bude mít všechna oprávnění ve skladech v systému.

Jakmile přepneme roli, vidíme, že role 'DEV_OSTECHNIX' nedokáže zobrazit žádné sklady v systému. Role 'DEV_OSTECHNIX' nemá žádná oprávnění.

Chcete-li udělit oprávnění, musí se uživatel přepnout na roli, která má oprávnění k udělení role. Protože používáme ACCOUNT_ADMIN, přecházíme na něj a udělujeme oprávnění roli DEV_OSTECHNIX.
Vyberte řádek skladu, kterému chcete poskytnout oprávnění, na pravé straně se zobrazí vyskakovací okno s oprávněními.

Nyní nejsou udělena žádná privilegia. Klikněte na 'Udělit oprávnění' pro udělení oprávnění roli.

Vyberte, jaké oprávnění chcete udělit, a vyberte roli, které chcete toto oprávnění udělit. Můžete kliknout na + symbol vpravo nahoře pro přidání oprávnění k udělení.
Zde udělujeme oprávnění MODIFY a OPERATE roli DEV_OSTECHNIX.

Oprávnění můžete ověřit přepnutím role na DEV_OSTECHNIX.

5.2. Udělte oprávnění roli pomocí klienta SnowSQL CLI
Ujistěte se, že jste v roli, která by měla mít oprávnění udělovat. Zde v této ukázce používáme ACCOUNT_ADMIN.
OSTECHNIX#[email protected](no database).(no schema)>select current_role(); +----------------+ | CURRENT_ROLE() | |----------------| | ACCOUNTADMIN | +----------------+ 1 Row(s) produced. Time Elapsed: 0.133s OSTECHNIX#[email protected](no database).(no schema)>

Prohlédněte si sklady dostupné v systému pomocí níže uvedeného příkazu 'show'.
OSTECHNIX#[email protected](no database).(no schema)>show WAREHOUSES;

Přepněte roli na TEST_OSTECHNIX.
OSTECHNIX#[email protected](no database).(no schema)>use role TEST_OSTECHNIX;

Ověřte oprávnění ve skladech pouhým zobrazením skladů.

V současnosti nejsou roli TEST_OSTECHNIX udělena žádná oprávnění.
Chcete-li udělit oprávnění, přepněte zpět na roli ACCOUNT_ADMIN.
OSTECHNIX#(no warehouse)@(no database).(no schema)>use role ACCOUNTADMIN;
Udělte oprávnění pro Warehouse ‚OSTECH_DEMO_3‘ roli TEST_OSTECHNIX.
OSTECHNIX#[email protected](no database).(no schema)>grant MODIFY, OPERATE on warehouse OSTECH_DEMO_3 to role TEST_OSTECHNIX;

Ověřte oprávnění přepnutím do role TEST_OSTECHNIX.
OSTECHNIX#[email protected](no database).(no schema)>use role TEST_OSTECHNIX;
OSTECHNIX#(no warehouse)@(no database).(no schema)>show WAREHOUSES;

Nyní můžete zajistit, že role TEST_OSTECHNIX může prohlížet Warehouse OSTECH_DEMO_3 a že je ve stavu Pozastaveno.
Spusťte Warehouse pomocí níže uvedeného příkazu.
OSTECHNIX#(no warehouse)@(no database).(no schema)>alter WAREHOUSE OSTECH_DEMO_3 RESUME;

Ověřte stav pomocí příkazu 'show'.

Nyní můžeme zajistit, že role TEST_OSTECHNIX má udělená oprávnění ve skladu OSTECH_DEMO_3.
Poznámka: Ať už používáme jakékoli dotazy v rozhraní SnowSQL CLI, stejné lze použít v listu Snowflake dostupném ve WebUI.

Závěr
V tomto článku jsme prošli řízením přístupu na základě rolí (RBAC) ve Snowflake. Ukázali jsme, že RBAC jednoduše vytváří role a uděluje oprávnění roli na objektu 'Virtual Warehouse'.
Podobně můžeme zajistit přístup k dalším objektům, jako jsou databáze, tabulky atd. V dalším článku budeme podrobně rozumět správě uživatelů a poskytování přístupu uživatelům.