Säkerhet på kolumnnivå
Column-Level säkerhet gör att kunder kan styra åtkomsten till tabellkolumner baserat på användarens körningskontext eller gruppmedlemskap.
Säkerhet på kolumnnivå förenklar utformningen och kodningen av säkerhet i ditt program, så att du kan begränsa kolumnåtkomsten för att skydda känsliga data. Se till exempel till att specifika användare bara kan komma åt vissa kolumner i en tabell som är relevanta för deras avdelning. Logiken för åtkomstbegränsning finns på databasnivån i stället för från data på en annan programnivå. Databasen tillämpar åtkomstbegränsningarna varje gång dataåtkomst görs från valfri nivå. Den här begränsningen gör säkerheten mer tillförlitlig och robust genom att minska ytan på ditt övergripande säkerhetssystem. Dessutom eliminerar säkerhet på kolumnnivå också behovet av att införa vyer för att filtrera bort kolumner för att införa åtkomstbegränsningar för användarna.
Du kan implementera säkerhet på kolumnnivå med T-SQL-syntaxen BEVILJA objektbehörigheter . Med den här mekanismen stöds både SQL-autentisering och Microsoft Entra-ID (tidigare Azure Active Directory).
Överväg även möjligheten att framtvinga säkerhet på radnivå för tabeller, baserat på ett WHERE
satsfilter.
Syntax
Syntaxen för instruktionen GRANT
för objektbehörigheter gör det möjligt att bevilja behörigheter till kommaavgränsade kolumnlistor i en tabell.
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
Exempel
I följande exempel visas hur du kan begränsa TestUser
åtkomsten SSN
till kolumnen i Membership
tabellen:
Skapa Membership
en tabell med SSN
en kolumn som används för att lagra personnummer:
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);
Tillåt TestUser
åtkomst till alla kolumner förutomSSN
kolumnen, som har känsliga data:
GRANT SELECT ON Membership(MemberID, FirstName, LastName, Phone, Email) TO TestUser;
Frågor som körs som TestUser
fel om de innehåller SSN
kolumnen:
SELECT * FROM Membership;
Med det resulterande felet:
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'.
Användningsfall
Några exempel på hur säkerhet på kolumnnivå används idag:
- Ett företag för finansiella tjänster tillåter endast kontoansvariga att ha tillgång till kundnummer (SSN), telefonnummer och andra personuppgifter.
- En vårdgivare tillåter endast läkare och sjuksköterskor att ha tillgång till känsliga medicinska journaler samtidigt som medlemmar av faktureringsavdelningen hindras från att visa dessa data.