Zabezpečení na úrovni sloupců
Column-Level zabezpečení umožňuje zákazníkům řídit přístup ke sloupcům tabulky na základě kontextu spuštění uživatele nebo členství ve skupině.
Zabezpečení na úrovni sloupců zjednodušuje návrh a kódování zabezpečení ve vaší aplikaci a umožňuje omezit přístup ke sloupcům kvůli ochraně citlivých dat. Například zajistit, aby konkrétní uživatelé měli přístup jenom k určitým sloupcům tabulky, které se týkají jejich oddělení. Logika omezení přístupu se nachází v databázové vrstvě, nikoli mimo data v jiné aplikační vrstvě. Databáze aplikuje omezení přístupu při každém pokusu o přístup k datům z jakékoli vrstvy. Díky tomuto omezení je zabezpečení spolehlivější a robustnější, protože se zmenšuje prostor celého systému zabezpečení. Kromě toho zabezpečení na úrovni sloupců také eliminuje potřebu zavedení zobrazení pro odfiltrování sloupců pro uložení omezení přístupu pro uživatele.
Zabezpečení na úrovni sloupců můžete implementovat pomocí syntaxe T-SQL oprávnění k objektům GRANT . S tímto mechanismem se podporuje ověřování SQL i ověřování Microsoft Entra ID (dříve Azure Active Directory).
Zvažte také možnost vynutit u tabulek zabezpečení na úrovni řádků na WHERE
základě filtru klauzule.
Syntax
Syntaxe příkazu pro oprávnění objektu GRANT
umožňuje udělit oprávnění k seznamům sloupců odděleným čárkami v tabulce.
GRANT <permission> [ ,...n ] ON
[ OBJECT :: ][ schema_name ]. object_name [ ( column [ ,...n ] ) ]
TO <database_principal> [ ,...n ]
[ WITH GRANT OPTION ]
[ AS <database_principal> ]
<permission> ::=
SELECT
| UPDATE
<database_principal> ::=
Database_user
| Database_role
| Database_user_mapped_to_Windows_User
| Database_user_mapped_to_Windows_Group
Příklady
Následující příklad ukazuje, jak omezit TestUser
přístup ke SSN
sloupci Membership
tabulky:
Vytvořte Membership
tabulku se sloupcem SSN
sloužícím k uložení čísel sociálního pojištění:
CREATE TABLE Membership
(MemberID int IDENTITY,
FirstName varchar(100) NULL,
SSN char(9) NOT NULL,
LastName varchar(100) NOT NULL,
Phone varchar(12) NULL,
Email varchar(100) NULL);
Povolit TestUser
přístup ke všem sloupcům kroměSSN
sloupce, který obsahuje citlivá data:
GRANT SELECT ON Membership(MemberID, FirstName, LastName, Phone, Email) TO TestUser;
Dotazy spuštěné jako TestUser
neúspěšné, pokud obsahují SSN
sloupec:
SELECT * FROM Membership;
S výslednou chybou:
Msg 230, Level 14, State 1, Line 12
The SELECT permission was denied on the column 'SSN' of the object 'Membership', database 'CLS_TestDW', schema 'dbo'.
Případy použití
Několik příkladů, jak se dnes používá zabezpečení na úrovni sloupců:
- Firma poskytující finanční služby umožňuje přístup k číslům sociálního pojištění zákazníků (SSN), telefonním číslům a dalším osobním údajům pouze správcům účtů.
- Poskytovatel zdravotní péče umožňuje přístup k citlivým lékařským záznamům pouze lékařům a sestrám, přičemž členům fakturačního oddělení brání v zobrazení těchto dat.