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.

18voto

user3695961 Points 21

Donner une telle permission peut être dangereux, surtout si votre application web utilise ce même nom d'utilisateur.

Désormais, l'internaute (et l'ensemble de la toile mondiale) a également le droit de créer et de déposer des objets dans votre base de données. Pensez à l'injection SQL !

Je recommande d'accorder les privilèges d'exécution uniquement à l'utilisateur spécifique sur l'objet donné comme suit :

grant execute on storedProcedureNameNoquotes to myusernameNoquotes

Maintenant l'utilisateur myusernameNoquotes peut exécuter la procédure storedProcedureNameNoquotes sans autres permissions inutiles à vos précieuses données.

8voto

Denis Valeev Points 4354

Vous n'avez pas le droit de l'exécuter, bien que vous ayez suffisamment de permissions pour le créer.

Pour plus d'informations, voir GRANT Object Permissions (Transact-SQL)

3voto

Okwo moses Points 13

Si vous rencontrez des problèmes tels que la question posée ci-dessus concernant l'exception levée lors de l'exécution de la solution, le problème est que la permission n'a pas été correctement accordée aux utilisateurs de ce groupe pour accéder à la base de données/procédure stockée. Tout ce que vous devez faire est de faire quelque chose comme ce que j'ai ci-dessous, en remplaçant le mien avec le nom de votre base de données, les procédures stockées (fonction) et le type de permission ou le rôle ou à qui vous accordez l'accès.

USE [StableEmployee]
GO
GRANT EXEC ON dbo.GetAllEmployees TO PUBLIC

/****** Objet : StoredProcedure [dbo].[GetAllEmployees] script Date : 01/27/2016 16:27:27 ******/

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[GetAllEmployees]
as
Begin
Select EmployeeId, Name, Gender, City, DepartmentId
From tblEmployee

End

3voto

Mando Basha Points 1

Voici comment donner la permission à un utilisateur non public,

Requête directe :

Use MyDatabase Grant execute on [dbo].[My-procedures-name] to [IIS APPPOOL\my-iis-pool] Go

1voto

Fatemeh M. Rezaie Points 163

Si vous faites de cet utilisateur un utilisateur spécial pour une base de données spécifique, alors peut-être que vous ne l'avez pas défini comme db_owner dans "user mapping" des propriétés.

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