240 votes

L'autorisation EXECUTE a été refusée pour l'objet 'xxxxxxx', la base de données 'zzzzzzz', le schéma 'dbo'.

J'ai des problèmes pour exécuter une fonction.

Voilà ce que j'ai fait :

  1. Créez une fonction en utilisant SQL Server Management Studio. Elle a été créée avec succès.
  2. J'ai ensuite essayé d'exécuter la fonction nouvellement créée et voici ce que j'obtiens :

L'autorisation EXECUTE a été refusée sur l'objet 'xxxxxxx', la base de données zzzzzzz', schéma 'dbo'.

0 votes

Si l'utilisateur a le rôle de db_owner, il peut aussi exécuter (ce qui n'équivaut pas à grant exec...).

1 votes

J'ai obtenu cette erreur lorsqu'il y avait une erreur de syntaxe dans ma déclaration SQL. Essentiellement, j'avais fusionné GO y Create sur GOCreate . D'autres erreurs de syntaxe semblent également donner cette erreur.

193voto

Rowland Shaw Points 22860

Il semble que vous deviez accorder le droit d'exécution à l'utilisateur (ou à un groupe dont il fait partie) pour la procédure stockée en question.

Par exemple, vous pourrait accorder ainsi l'accès :

USE zzzzzzz;
GRANT EXEC ON dbo.xxxxxxx TO PUBLIC

2 votes

Bonjour, je sais que cela fait un peu de temps, mais j'ai une question. Une telle action peut-elle poser des problèmes de sécurité ? Est-ce qu'elle ouvre le sp à tout le monde ?

13 votes

Oui, cela permet à toute personne ayant une connexion à la base de données d'exécuter la procédure stockée. Je m'attendrais à ce que les personnes soucieuses de la sécurité accordent l'accès à la procédure stockée à l'utilisateur. groupe concerné dans su base de données .

9 votes

Vous pouvez également utiliser GRANT EXEC TO PUBLIC pour accorder l'accès à tous les objets de la base de données

143voto

kazim Points 178

La meilleure solution que j'ai trouvée est de créer un nouveau rôle de base de données, à savoir

CREATE ROLE db_executor;

puis accordez à ce rôle le droit d'exécution.

GRANT EXECUTE TO db_executor;

Maintenant, lorsque vous allez dans les propriétés de l'utilisateur et allez à User Mapping et sélectionnez la base de données où vous avez ajouté le nouveau rôle, maintenant le nouveau rôle sera visible dans la section Database role membership for :.

Pour plus de détails, lire l'article complet

9 votes

Cette réponse est la meilleure si vous avez besoin d'accorder EXECUTE pour tous les SPs à un login utilisateur particulier -- sans utiliser public ou db_owner. Cela semble être la réponse la plus prudente et la plus utile ici.

3 votes

Pour une raison quelconque, c'est la seule réponse qui fonctionne pour moi sur SQL Server 2012. Donner à mon utilisateur le droit explicite d'EXECUTER ne fonctionne pas. Cela ne fonctionne que s'il hérite de cette autorisation par le biais d'un rôle.

1 votes

Cela devrait être la réponse. Cela a marché comme un charme pour moi. Merci beaucoup !

108voto

Suhail Mumtaz Awan Points 1734

Dans SQL Server Management Studio, allez à security->schema->dbo :

enter image description here

Double-cliquez sur dbo, sélectionnez la page Permissions, puis cliquez sur le lien "View database permissions" en bleu :

enter image description here

Sélectionnez l'utilisateur pour lequel vous souhaitez modifier les autorisations, et recherchez l'autorisation "Exécuter" sous l'onglet "explicite" :

enter image description here

Choisissez l'autorisation appropriée en cochant la case correspondante.

0 votes

Merci. J'oublie toujours cette étape lorsque je configure des bases de données SQL. J'ai fait référence à cette question et à cette réponse 3 fois cette année.

59voto

Iain Points 2472

Vous devez exécuter quelque chose comme ceci

GRANT Execute ON [dbo].fnc_whatEver TO [domain\user]

4 votes

C'était ce dont j'avais besoin, mais je devais faire [domain\user] plutôt que 'domain\user'

53voto

csebryam Points 513

Cela fonctionnera si vous essayez d'accorder des autorisations à des utilisateurs ou à des rôles.

Utilisation de Microsoft SQL Server Management Studio :

  1. Aller à : Bases de données
  2. Clic droit sur dbo.my_database
  3. Choisissez : Propriétés
  4. Dans le panneau latéral gauche, cliquez sur : Permissions
  5. Sélectionnez l'utilisateur ou le rôle et dans le panneau de nom
  6. Trouvez Exécuter dans les autorisations et cocher la case : Accorder, Avec accord, ou Refuser

0 votes

Malheureusement, l'utilisateur a déjà les droits d'exécution ! C'est pourquoi c'est si déroutant....

0 votes

Merci Keim, cela fonctionne parfaitement quand je coche Grant.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X