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.

0voto

philu Points 684

Vous pouvez donner à tout le monde la permission d'exécuter :

GRANT Execute on [dbo].your_object to [public]

"Public" est le rôle par défaut de la base de données dont tous les utilisateurs sont membres.

0voto

Amir Points 11

La réponse générale est d'accorder l'autorisation d'exécution comme expliqué ci-dessus. Mais cela ne fonctionne pas si le propriétaire du schéma du SP est différent des objets sous-jacents.

Vérifier les propriétaires de schémas par :

select name, USER_NAME(s.principal_id) AS Schema_Owner from sys.schemas s

Pour changer le propriétaire d'un schéma, vous pouvez :

ALTER AUTHORIZATION ON SCHEMA::YOUR_SCHEMA TO YOUR_USER;

Exemples :

ALTER AUTHORIZATION ON SCHEMA::Claim TO dbo
ALTER AUTHORIZATION ON SCHEMA::datix TO user1;

Enfin, si dans votre SP vous tronquez une table ou modifiez la structure, vous pouvez ajouter WITH EXECUTE AS OWNER dans votre SP :

ALTER procedure [myProcedure] 
WITH EXECUTE AS OWNER

as

truncate table etl.temp

0voto

Warf Points 171

Si vous n'avez besoin d'accorder qu'une seule fonction, alors (seul l'administrateur de la base de données peut le faire) :

  1. Ouvrir le studio de gestion
  2. Trouver la fonction/procédure que vous voulez accorder dans Object Eplorer (dbname-Programmability-[Functions/Stored Procedures]-...)
  3. Cliquez avec le bouton droit de la souris sur le nom de la fonction ou de la procédure et ouvrez Propriétés.
  4. Dans Propriétés, sélectionnez Permissions, ajoutez l'utilisateur (ou le schéma) de votre choix et accordez-lui le droit d'exécution.

Je pense que c'est la manière la plus sûre de le faire, car vous n'autorisez que l'utilisateur à exécuter cette fonction. Rien d'autre !

0voto

Sakthivel Points 89

J'ai rencontré le même problème et je l'ai résolu en donnant la permission db_owner à l'utilisateur de la base de données.

16 votes

Je ne pense pas que ce soit une bonne solution... parce que je ne peux pas donner cette permission à mon application web... Je ne sais pas qui a voté en faveur de cette solution...

9 votes

Ce n'est pas recommandé, car cela est très peu sûr. Vous devez créer des rôles appropriés au lieu d'utiliser db_owner qui a un contrôle total sur toute la base de données.

-3voto

Ali Kashanchi Points 7764

Vous feriez mieux de modifier les rôles de serveur, qui ont été conçus pour les privilèges de sécurité. ajoutez le rôle de serveur sysadmin à votre utilisateur. pour une meilleure sécurité, vous pouvez avoir vos rôles de serveur personnalisés. mais cette approche vous donnera ce que vous voulez pour le moment.

  1. Explorateur d'objets -> Serveur -> Sécurité -> Logins
  2. Cliquez avec le bouton droit de la souris sur l'utilisateur souhaité
  3. Aller à Rôles des serveurs sur le côté gauche
  4. Assurez-vous que sysadmin est coché
  5. Cliquez sur OK et redémarrez votre serveur SQL

Bonne chance

enter image description here

8 votes

Sysadmin est totalement exagéré (et dangereux).

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