Share via


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.

Diagrammet visar en schematisk tabell med den första kolumnen som leds av ett stängt hänglås och dess celler en orange färg medan de andra kolumnerna är vita celler.

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.

Nästa steg