Sécurité au niveau des colonnes
La sécurité au niveau des colonnes permet aux clients de contrôler l’accès aux colonnes des tables de base de données en fonction du contexte d’exécution de l’utilisateur ou de son appartenance à un groupe.
La sécurité au niveau des colonnes simplifie la conception et le codage de la sécurité de votre application, ce qui vous permet de limiter l'accès aux colonnes afin de protéger les données sensibles. Vous pouvez, par exemple, vous assurer que des utilisateurs spécifiques peuvent accéder uniquement à certaines colonnes d’une table qui sont pertinentes par rapport à leur service. La logique de la restriction d'accès est située dans la couche de base de données plutôt que loin des données d'une autre couche Application. La base de données applique les restrictions d'accès à chaque tentative d'accès aux données à partir d'un niveau quelconque. Cette restriction renforce la fiabilité et la robustesse de votre sécurité en réduisant la surface d'exposition de votre système de sécurité global. En outre, la sécurité au niveau des colonnes élimine la nécessité d'ajouter des vues pour filtrer les colonnes afin d'imposer des restrictions d'accès aux utilisateurs.
Vous pouvez implémenter la sécurité au niveau des colonnes à l’aide de la syntaxe T-SQL GRANT Object Permissions. Avec ce mécanisme, l’authentification SQL et l’authentification d’ID Microsoft Entra (anciennement Azure Active Directory) sont prises en charge.
Envisagez également la possibilité d’appliquer la sécurité au niveau des lignes sur les tables, en fonction d’un WHERE
filtre de clause.
Syntaxe
La syntaxe de l’instruction GRANT
pour les autorisations d’objet permet d’accorder des autorisations aux listes de colonnes délimitées par des virgules sur une table.
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
Exemples
L'exemple suivant montre comment empêcher l'utilisateur TestUser
d'accéder à la colonne SSN
de la table Membership
:
Créez la table Membership
avec la colonne SSN
utilisée pour stocker les numéros de sécurité 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);
Autorisez TestUser
à accéder à toutes les colonnes à l'exception de la colonne SSN
qui contient les données sensibles :
GRANT SELECT ON Membership(MemberID, FirstName, LastName, Phone, Email) TO TestUser;
Les requêtes exécutées sous le nom TestUser
échouent si elles comprennent la colonne SSN
:
SELECT * FROM Membership;
Avec l’erreur résultante :
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'.
Cas d'utilisation
Exemples d'utilisation actuelle de la sécurité au niveau des colonnes :
- Une entreprise de services financiers autorise uniquement les gestionnaires de comptes à accéder aux numéros de sécurité sociale, numéros de téléphone et autres données à caractère personnel.
- Un prestataire de soins de santé autorise uniquement les médecins et infirmières à accéder aux dossiers médicaux sensibles tout en empêchant les membres du service de facturation de consulter ces données.