J'ai des problèmes pour exécuter une fonction.
Voici ce que j'ai fait:
- Créez une fonction à l'aide de SQL Server Management Studio. Il a été créé avec succès.
- 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', base de données 'zzzzzzz', schéma 'dbo'.
sql-server
upendra parmar
la source
la source
GO
etCreate
enGOCreate
. D'autres erreurs de syntaxe semblent également donner cette erreur.Réponses:
On dirait que vous devez accorder l'autorisation d'exécution à l'utilisateur (ou à un groupe dont il fait partie) pour la procédure stockée en question.
Par exemple, vous pouvez accorder l'accès ainsi:
la source
GRANT EXEC TO PUBLIC
pour accorder l'accès à tous les objets de la base de donnéesLa meilleure solution que j'ai trouvée est de créer un nouveau rôle de base de données ie
puis accordez à ce rôle l'autorisation d'exécution.
Désormais, lorsque vous accédez aux propriétés de l'utilisateur, accédez à Mappage des utilisateurs et sélectionnez la base de données dans laquelle vous avez ajouté un nouveau rôle, le nouveau rôle sera désormais visible dans la section Appartenance au rôle de base de données pour:
Pour plus de détails, lisez l'article complet
la source
EXEC sp_addrolemember @rolename = N'db_executor', @membername = N'processAPI'
Dans Sql Server Management Studio:
allez juste à
security->schema->dbo
.Double-cliquez sur dbo, puis cliquez sur
permission tab->(blue font)view database permission
et n'hésitez pas à faire défiler les champs obligatoires tels que"execute".
Aidez-vous à choisir en utilisantgrant
ou desdeny
contrôles. J'espère que cela aidera :)la source
vous devez exécuter quelque chose comme ça
la source
[domain\user]
plutôt que'domain\user'
Cela fonctionnera si vous essayez d'accorder une autorisation aux utilisateurs ou aux rôles.
Utilisation de Microsoft SQL Server Management Studio:
la source
Donner une telle autorisation peut être dangereux, surtout si votre application Web utilise le même nom d'utilisateur.
Désormais, l'utilisateur Web (et le World Wide Web) a également l'autorisation de créer et de déposer des objets dans votre base de données. Pensez à l'injection SQL!
Je recommande d'accorder des privilèges d'exécution uniquement à l'utilisateur spécifique sur l'objet donné comme suit:
Désormais, l'utilisateur myusernameNoquotes peut exécuter la procédure storedProcedureNameNoquotes sans autres autorisations inutiles sur vos précieuses données.
la source
Vous n'avez pas le droit de l'exécuter, bien que vous ayez suffisamment d'autorisations pour le créer.
Pour plus d'informations, consultez Autorisations d'objet GRANT (Transact-SQL)
la source
Si vous rencontrez des problèmes tels que la question posée ci-dessus concernant l'exception levée lorsque la solution est exécutée, le problème est l'autorisation, qui n'est pas 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 par le nom de votre base de données, les procédures stockées (fonction) et le type d'autorisation ou de rôle ou à qui vous accordez l'accès.
/ ****** Objet: StoredProcedure [dbo]. [GetAllEmployees] Date du script: 27/01/2016 16:27:27 ****** /
la source
Vous pouvez donner à tout le monde l'autorisation d'exécution:
«Public» est le rôle de base de données par défaut dont tous les utilisateurs sont membres.
la source
J'ai rencontré le même problème et je l'ai résolu en donnant la permission de db_owner aussi à l'utilisateur de la base de données.
la source
Si vous rendez cet utilisateur spécial pour une base de données spécifique, alors peut-être ne le définissez-vous pas comme db_owner dans le "mappage utilisateur" des propriétés
la source
vous feriez mieux de modifier les rôles de serveur, qui a été conçu 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.
Bonne chance
la source
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
la source