web-dev-qa-db-fra.com

L'autorisation EXECUTE a été refusée sur l'objet 'aspnet_CheckSchemaVersion', base de données 'XXX'

J'utilise asp.net 4 c # et le framework d'entité 4 avec MS SQL 2008. J'essaie de configurer mon application Web localement à l'aide de IIS 7.

Pour mon site Web, je suis un fournisseur d’adhésion Asp qui a installé différentes tables et sprocs dans ma base de données (aspnet_).

En exécutant le script, nous recevons cette erreur:

The EXECUTE permission was denied on the object 'aspnet_CheckSchemaVersion', database 'XXX', schema 'dbo'.     at System.Data.SqlClient.SqlConnection.OnError
  • Comment puis-je résoudre le problème? Veuillez me donner des instructions claires. Merci pour votre aide.
13
GibboK

Il devrait y avoir quelques rôles de base de données liés aux tables d'appartenance, par exemple aspnet_profile_fullaccess. Assurez-vous que le compte que vous utilisez est membre du rôle approprié. 

Vous ne devez PAS affecter l'utilisateur que vous vous connectez à la base de données en tant que privilège dbowner. Le compte ne devrait avoir que les droits dont il a besoin et rien de plus. Si vous accordez à dbo et que quelqu'un exploite une faille de votre site Web, il disposera d'un accès total et non contrôlé à l'intégralité de votre base de données pour ce qu'il souhaitait - supprimer des tables, modifier les données à volonté.

23
Simon Halsey

Je ne pense pas que vous devriez faire de l'utilisateur le propriétaire de db. J'ai eu le même problème, et il suffisait d'attribuer à mon utilisateur les 4 rôles avec BasicAccess + pour lui donner l'autorisation EXECUTE sur tous les proc stockés:

GRANT EXECUTE TO [theUserName];

Je sais que ce n'est pas idéal. Il convient d’accorder des autorisations EXECUTE uniquement sur le processus stocké requis, mais si vous avez besoin d’une solution rapide jusqu’à ce que vous trouviez les SP que votre utilisateur doit pouvoir exécuter, cela devrait fonctionner.

Le problème est que l'ID utilisateur avec lequel l'application se connecte ne dispose pas de privilèges suffisants dans la base de données. Il doit être le propriétaire de la base de données ou recevoir des autorisations sur toutes les procédures stockées aspnet_.

Veuillez donc vérifier les autorisations dans SQL Server 2008 pour cet utilisateur particulier. et si possible faire de cet utilisateur un propriétaire.

J'espère que cela t'aides...

Edit: je voulais que vous le fassiez en tant que propriétaire simplement pour vérifier qu'il existe des problèmes d'autorisations. Une fois que vous êtes sûr du problème, vous pouvez affecter des autorisations à cet utilisateur. donc connaître la cause exacte et la solution exacte. 

1
Bravo

Je conviens qu'il est possible de tester en ajoutant le rôle db_owner pour vérifier l'erreur d'autorisation. Mais il faut rappeler de toute urgence qu'il est nécessaire de tester et de supprimer le rôle. 

Faites un clic droit sur l'utilisateur de connexion >> sélectionnez propriétés >> puis mappage de l'utilisateur.

En regardant l’erreur SQL fournie, vous pouvez supposer que c’est le problème basé sur «L’autorisation d’exécution a été refusée». Après avoir utilisé le rôle db_owner comme test et confirmation, vous pouvez ensuite consulter les différentes instructions SQL pour savoir quelles procédures stockées sont appelées. Par exemple, considérons ce qui suit 

SQL As String = "EXEC [EAC]. [MyStoredProcedure]", etc. . . "

Une fois que vous avez découvert les différentes procédures stockées utilisées par l'application, vous pouvez ensuite accorder l'exécution à ces exécutions spécifiques. Par exemple, en considérant le SQL suivant. 

USE DATABASE
GRANT EXECUTE ON OBJECT::EAC.myStoredProcedure
TO myRoleorUser; 

Notez que la procédure EAC.myStoredProcedure mentionnée dans le code est trouvée lors du développement de la base de données, puis de la programmabilité, puis du développement des procédures stockées.

Voici la base de connaissances Microsoft pour une aide supplémentaire sur le ciblage des procédures stockées spécifiques sur le serveur SQL. https://docs.Microsoft.com/en-us/sql/relational-databases/stored-procedures/grant-permissions-on-a-stored-procedure?view=sql-server-2017

0
loganpixel