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