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