Sdílet prostřednictvím


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.

Diagram znázorňuje schematickou tabulku s prvním sloupcem, který je záhlavím zavřeného visacího zámku, a jeho buňkami oranžovou barvou, zatímco ostatní sloupce jsou bílé buňky.

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.

Další kroky