Udostępnij za pośrednictwem


Zabezpieczenia na poziomie kolumny

Zabezpieczenia Column-Level umożliwiają klientom kontrolę 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 niektórych kolumn tabeli, które są odpowiednie dla ich działu. Logika ograniczeń dostępu znajduje się w warstwie bazy danych, a nie z dala 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 kolumny eliminują również potrzebę wprowadzenia widoków w celu filtrowania kolumn w celu nałożenia ograniczeń dostępu dla użytkowników.

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

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

Diagram przedstawia tabelę schematu z pierwszą kolumną oznaczoną zamkniętą kłódką, a jej komórki mają kolor pomarańczowy, podczas gdy pozostałe kolumny mają białe komórki.

Składnia

Składnia instrukcji GRANT dla 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 tabelę Membership 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 TestUser na dostęp do wszystkich kolumn z wyjątkiem dla kolumny SSN zawierającej poufne dane:

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

Zapytania wykonywane jako TestUser kończą się niepowodzeniem, jeśli zawierają kolumnę SSN:

SELECT * FROM Membership;

Wraz z wystąpieniem powstałego błędu:

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 użycia

Kilka przykładów 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, jednocześnie uniemożliwiając członkom działu rozliczeniowego wyświetlanie tych danych.

Następne kroki