Přístupy uživatelů k tabulkám a sloupcům v Azure SQL Database

Data uložená v Azure SQL databázi nemusí být určena každému - určitě se nám budou hodit účty, které nesmí zapisovat a mohou jen číst. A možná v některé z tabulek bude konkrétní sloupeček, který nechceme, aby viděl každý. Dnes si pohrajeme s účty v Azure SQL.

Klasický SQL user vs. contained SQL user

Klasické řešení uživatelského účtu je vytvořit přístupový login na úrovni serveru (tedy nějaké přihlašovací jméno a heslo). V jednotlivých databázích potom můžeme vytvořit uživatele, jehož přihlašovací údaje jsou právě tento login na serveru. Můžete tedy jeden login používat u mnoha databází a pokud potřebujete změnit heslo, stačí to udělat jednou.

Azure SQL nemá koncept skutečného serveru, který by vám patřil, takže má trochu jinak definované role a "serverové" loginy jsou vytvářeny na úrovni master databáze.

Nejprve vytvoříme LOGIN v master DB (pošlete v SQL Server Management Studio toto Query na master):

CREATE LOGIN serveruser WITH PASSWORD = 'Azure123456';

Pak spusťte Query ve vaší databázi, v mém případě v mojesql:

CREATE USER serveruser FROM LOGIN serveruser;
ALTER ROLE db_datareader ADD MEMBER serveruser;

Teď se můžete zkusit tímto účtem nalogovat. V databázi mojesql budete moci číst, ale ne zapisovat.

Nevýhodou tohoto přístupu je, že bez LOGIN v serveru tento USER nefunguje. Pokud tedy například budete DB replikovat, musíte si ručně zajistit, že na jiném serveru v destinaci tento LOGIN taky existuje. Možná je tedy lepší uživatele vytvořit specificky přímo pro databázi tak, že nemá žádné návaznosti na cokoli jiného. Contained uživatele vytvoříme snadno - stačí poslat tohle rovnou na kontextu databáze, v mém případě mojesql.

CREATE USER dbuser WITH PASSWORD = 'Azure123456';
ALTER ROLE db_datareader ADD MEMBER dbuser;

To je vše, můžete se nalogovat.

Znepřístupnění tabulky nebo konkrétního sloupečku

Nejen, že můžeme někomu zpřístupnit data pouze pro čtení, ale dá se i specifikovat které tabulky nebo dokonce které sloupečky může používat. Pokud nechceme něco takové řešit pro každého uživatele zvlášť (ale můžeme), použijeme role. Vytvořme si novou roli, ve které povolíme pouze čtení tabulky zákazníků a to pouze sloupečků křestního jména a příjmení.

CREATE ROLE kontraktor AUTHORIZATION db_datareader; 
GRANT SELECT ON SalesLT.Customer (FirstName, LastName) TO kontraktor;
CREATE USER franta WITH PASSWORD = 'Azure123456';
ALTER ROLE kontraktor ADD MEMBER franta;

Připojte se jako uživatel franta a zkuste tento SELECT:

Pokud se pokusíme číst nějaký sloupeček, na který nemáme právo, nepodaří se to.

 

Přístup k tabulkám a sloupečkům můžete v Azure SQL dobře. Kromě toho máte na výběr celou řadu dalších bezpečnostních funkcí jako je row-level security, AlwaysEncrypted nebo Data Masking. O těch v jiných článcích.



Dynamické schvalování přístupů do Azure s Privileged Identity Management Security
Modernizujte konektivitu vašich poboček s Azure Virtual WAN Security
Enterprise governance s Azure Blueprints pro všechny vaše subskripce Security
Předávání tajností do App Service (WebApp) přes Azure Key Vault Security
Nemodifikovatelná storage v Azure pro zákonné držení vašich dokumentů Security