Sicurezza a livello di colonna
La sicurezza a livello di colonna consente ai clienti di controllare l'accesso alle colonne della tabella in base al contesto di esecuzione o dell'appartenenza ai gruppi dell'utente.
La sicurezza a livello di colonna semplifica la progettazione e la codifica della sicurezza nell'applicazione, consentendo di limitare l'accesso alle colonne per proteggere i dati sensibili. Assicurando, ad esempio, che utenti specifici possano accedere solo determinate colonne di una tabella relative al loro reparto. La logica di restrizione dell'accesso si trova sul livello del database e non su un altro livello applicazione lontano dai dati. Il database applica le restrizioni di accesso a ogni tentativo di accesso ai dati da qualsiasi livello. Questa restrizione rende la sicurezza più affidabile e solida, grazie alla riduzione della superficie di attacco del sistema di sicurezza generale. La sicurezza a livello di colonna elimina anche l'esigenza di introduzione di visualizzazioni per filtrare le colonne per imporre limitazioni di accesso agli utenti.
È possibile implementare la sicurezza a livello di colonna con la sintassi T-SQL GRANT per le autorizzazioni per gli oggetti. Con questo meccanismo sono supportati sia l'autenticazione SQL che Microsoft Entra ID (in precedenza Azure Active Directory).
Si consideri anche la possibilità di applicare la sicurezza a livello di riga nelle tabelle, in base a un filtro di clausola WHERE
.
Sintassi
La sintassi dell'istruzione GRANT
per le autorizzazioni per gli oggetti consente di concedere autorizzazioni agli elenchi di colonne delimitati da virgole in una tabella.
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
Esempi
L'esempio seguente illustra come escludere TestUser
dall'accesso alla colonna SSN
della tabella Membership
:
Creare la tabella Membership
con la colonna SSN
usata per archiviare i numeri di previdenza sociale:
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);
Consentire a TestUser
di accedere a tutte le colonne a eccezione della colonna SSN
, che contiene dati sensibili:
GRANT SELECT ON Membership(MemberID, FirstName, LastName, Phone, Email) TO TestUser;
Le query eseguite come TestUser
hanno esito negativo se includono la colonna SSN
:
SELECT * FROM Membership;
Con l'errore risultante:
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'.
Utilizzare casi
Di seguito sono riportati alcuni esempi di come viene utilizzata la sicurezza a livello di colonna:
- Una società di servizi finanziari consente solo agli account manager di accedere ai numeri di previdenza sociale (SSN), ai numeri di telefono e ad altri dati personali.
- Un fornitore di assistenza sanitaria consente solo a medici e infermieri di avere accesso a cartelle cliniche sensibili mentre impedisce ai membri del reparto contabilità di visualizzare questi dati.