Udostępnij za pośrednictwem


Zabezpieczenia na poziomie kolumny

Column-Level zabezpieczenia umożliwiają klientom kontrolowanie dostępu do kolumn tabeli na podstawie kontekstu wykonywania użytkownika lub członkostwa w grupie.

Zabezpieczenia na poziomie kolumn upraszczają projektowanie i kodowanie zabezpieczeń w aplikacji, co pozwala ograniczyć dostęp do kolumn w celu ochrony poufnych danych. Na przykład upewnienie się, że konkretni użytkownicy mogą uzyskiwać dostęp tylko do określonych kolumn tabeli, które są odpowiednie dla ich działu. Logika ograniczeń dostępu znajduje się w warstwie bazy danych, a nie od danych w innej warstwie aplikacji. Baza danych stosuje ograniczenia dostępu za każdym razem, gdy jest podejmowana próba dostępu do danych z dowolnej warstwy. To ograniczenie sprawia, że bezpieczeństwo jest bardziej niezawodne i niezawodne dzięki zmniejszeniu obszaru powierzchni ogólnego systemu zabezpieczeń. Ponadto zabezpieczenia na poziomie kolumn eliminują również konieczność wprowadzania widoków w celu odfiltrowania kolumn w celu nałożenia ograniczeń dostępu na użytkowników.

Zabezpieczenia na poziomie kolumny można zaimplementować za pomocą składni języka T-SQL GRANT Object Permissions . Dzięki temu mechanizmowi obsługiwane są zarówno uwierzytelnianie SQL, jak i identyfikator Microsoft Entra (dawniej Azure Active Directory).

Należy również rozważyć możliwość wymuszania zabezpieczeń na poziomie wiersza w tabelach na podstawie filtru WHERE klauzuli.

Diagram przedstawia tabelę schematu z pierwszą kolumną kierowaną przez zamkniętą kłódkę i jej komórki kolorem pomarańczowym, podczas gdy pozostałe kolumny są białymi komórkami.

Składnia

Składnia instrukcji GRANT uprawnień obiektu umożliwia udzielanie uprawnień do list kolumn rozdzielanych przecinkami w tabeli.

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

Przykłady

W poniższym przykładzie pokazano, jak ograniczyć TestUser dostęp do SSN kolumny Membership tabeli:

Utwórz Membership tabelę z kolumną SSN używaną do przechowywania numerów ubezpieczenia społecznego:

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);

Zezwalaj na TestUser dostęp do wszystkich kolumn z wyjątkiemSSN kolumny zawierającej poufne dane:

GRANT SELECT ON Membership(MemberID, FirstName, LastName, Phone, Email) TO TestUser;

Zapytania wykonywane jako TestUser niepowodzenie, jeśli zawierają kolumnę SSN :

SELECT * FROM Membership;

Z powodu błędu wynikowego:

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'.

Przypadki zastosowań

Niektóre przykłady sposobu użycia zabezpieczeń na poziomie kolumny dzisiaj:

  • Firma świadcząca usługi finansowe umożliwia tylko menedżerom kont dostęp do numerów ubezpieczenia społecznego klienta (SSN), numerów telefonów i innych danych osobowych.
  • Dostawca opieki zdrowotnej umożliwia tylko lekarzom i pielęgniarkom dostęp do poufnych dokumentacji medycznej, uniemożliwiając członkom działu rozliczeniowego wyświetlanie tych danych.

Następne kroki