Partager via


Signature de procédures stockées dans SQL Server (ADO.NET)

Mise à jour : November 2007

Depuis SQL Server 2005, vous pouvez signer une procédure stockée avec un certificat ou une clé asymétrique. Cela est très utile lorsque des autorisations ne peuvent pas être héritées par le biais du chaînage des propriétés ou lorsque ce dernier est rompu, comme avec SQL dynamique. Vous devez alors créer un utilisateur mappé au certificat en accordant à l'utilisateur du certificat des autorisations sur les objets auxquels la procédure stockée doit accéder.

Lorsque la procédure stockée est exécutée, SQL Server combine les autorisations de l'utilisateur du certificat à celles de l'appelant. À la différence de la clause EXECUTE AS, il ne modifie pas le contexte d'exécution de la procédure. Les fonctions intégrées qui retournent les noms d'accès et d'utilisateur retournent le non de l'appelant, et non celui de l'utilisateur du certificat.

Une signature numérique est un résumé des données qui est chiffré avec la clé privée du signataire. La clé privée garantit que la signature numérique est unique à son porteur ou propriétaire. Vous pouvez signer des procédures stockées, des fonctions ou des déclencheurs.

Remarque :

Vous pouvez créer un certificat dans la base de données MASTER afin d'accorder des autorisations de niveau serveur.

Création de certificats

Lorsque vous signez une procédure stockée avec un certificat, un résumé des données contenant le hachage chiffré du code de la procédure stockée est créé à l'aide de la clé privée. Au moment de l'exécution, le résumé des données est chiffré avec la clé publique et comparée à la valeur de hachage de la procédure stockée. Toute modification de la procédure stockée invalide la valeur de hachage afin que la signature numérique ne corresponde plus. Cela permet d'éviter qu'une personne n'ayant pas accès à la clé privée puisse modifier le code de la procédure stockée. Par conséquent, vous devez signer de nouveau la procédure à chaque fois que vous la modifiez.

La signature d'un module est réalisée en quatre étapes :

  1. Créez un certificat à l'aide de l'instruction Transact-SQL CREATE CERTIFICATE [certificateName]. Cette instruction possède plusieurs options permettant de définir une date de début et de fin, de même qu'un mot de passe. La date d'expiration par défaut est une année.

  2. Créez un utilisateur de base de données associé à ce certificat à l'aide de l'instruction Transact-SQL CREATE USER [userName] FROM CERTIFICATE [certificateName]. Cet utilisateur existe uniquement dans la base de données et n'est pas associé une connexion.

  3. Accordez les autorisations requises sur les objets de la base de données à l'utilisateur du certificat.

Remarque :

Un certificat ne permet pas d'accorder des autorisations à un utilisateur dont les autorisations ont été révoquées à l'aide de l'instruction DENY. L'instruction DENY a toujours priorité sur l'instruction GRANT, ce qui empêche l'appelant d'hériter des autorisations accordées à l'utilisateur du certificat.

  1. Signez la procédure avec le certificat en utilisant l'instruction Transact-SQL ADD SIGNATURE TO [procedureName] BY CERTIFICATE [certificateName].

Ressources externes

Pour plus d'informations, voir les ressources suivantes.

Ressource

Description

Signature de modules dans la documentation en ligne de SQL Server 2008

Décrit la signature de module, en fournissant un exemple de scénario et des liens vers les rubriques pertinentes relatives à Transact-SQL.

Signature de modules dans la documentation en ligne de SQL Server 2005

Décrit la signature de module, en fournissant un exemple de scénario et des liens vers les rubriques pertinentes relatives à Transact-SQL.

Signature de procédures stockées à l'aide d'un certificat dans la documentation en ligne de SQL Server 2005

Propose un didacticiel de signature d'une procédure stockée à l'aide d'un certificat.

Voir aussi

Concepts

Scénarios de sécurité des applications dans SQL Server (ADO.NET)

Gestion des autorisations à l'aide des procédures stockées dans SQL Server (ADO.NET)

Écriture de code SQL dynamique sécurisé dans SQL Server (ADO.NET)

Personnalisation des autorisations avec emprunt d'identité dans SQL Server (ADO.NET)

Modification de données à l'aide de procédures stockées (ADO.NET)

Autres ressources

Sécurisation des applications ADO.NET

Vue d'ensemble de la sécurité SQL Server (ADO.NET)