Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
La sicurezza a livello di colonna consente ai clienti di controllare l'accesso alle colonne della tabella in base al contesto di esecuzione dell'utente o all'appartenenza a un gruppo.
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 ogni volta che si tenta l'accesso ai dati da qualsiasi livello. Questa restrizione rende la sicurezza più affidabile e solida, grazie alla riduzione della superficie di esposizione del sistema di sicurezza generale. Inoltre, la sicurezza a livello di colonna elimina anche la necessità di introdurre visualizzazioni per filtrare le colonne per imporre restrizioni di accesso agli utenti.
È possibile implementare la sicurezza a livello di colonna con la sintassi T-SQL GRANT Autorizzazioni Oggetto. Con questo meccanismo sono supportati sia l'autenticazione SQL che l'ID Microsoft Entra (in precedenza Azure Active Directory).
Si dovrebbe anche considerare la possibilità di applicare la sicurezza a livello di riga sulle tabelle, basandosi su un filtro di clausola.
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
Examples
L'esempio seguente illustra come escludere TestUserdall'accesso alla colonna SSN della tabella Membership:
Creare una tabella Membership con una 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 TestUser l'accesso a tutte le colonne ad eccezione della SSN colonna con i dati sensibili:
GRANT SELECT ON Membership(MemberID, FirstName, LastName, Phone, Email) TO TestUser;
Le query eseguite come TestUser hanno esito negativo se includono la SSN colonna :
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'.
Casi d'uso
Ecco alcuni esempi di utilizzo della sicurezza a livello di colonna:
- Una società di servizi finanziari consente solo ai responsabili degli account di avere accesso ai numeri di previdenza sociale dei clienti (SSN), numeri di telefono e altri dati personali.
- Un provider di assistenza sanitaria consente solo ai medici e agli infermieri di avere accesso alle cartelle cliniche sensibili, impedendo ai membri del reparto di fatturazione di visualizzare questi dati.