Share via


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.

Le diagramme montre une table schématique avec la première colonne présentant un cadenas fermé en en-tête et des cellules de couleur orange alors que les autres colonnes sont des cellules blanches.

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.

Étapes suivantes