150 votes

La permission SELECT a été refusée sur l'objet 'Users', base de données 'XXX', schéma 'dbo'

J'ai déplacé une base de données de SQL Server 2012 vers Azure. Je ne veux pas utiliser l'utilisateur master, donc j'ai créé un utilisateur test. Voici ce que j'ai fait pour la base de données XXX sur Azure :

create user test from login test with default_schema=[dbo]
exec sp_addrolemember 'db_owner','test'

J'ai vérifié que les objets de la base de données qui m'intéressent sont tous dans le schéma dbo. La table Users est dans le schéma dbo.

La chaîne de connexion dans mon projet web a test comme login. Cela produit le message d'erreur :

La permission SELECT a été refusée sur l'objet 'Users', base de données 'XXX', schéma 'dbo'

Que signifie le message d'erreur et que puis-je faire pour permettre à l'utilisateur test d'accéder à la base de données XXX ?

168voto

Kolob Canyon Points 1262
  1. Ouvrez SQL Management Studio
  2. Développez votre base de données
  3. Développez le dossier "Sécurité"
  4. Développez "Utilisateurs"
  5. Cliquez avec le bouton droit de la souris sur l'utilisateur (celui qui tente d'exécuter la requête) et sélectionnez Propriétés.
  6. Sélectionnez la page Adhésion.
  7. Assurez-vous que vous décochez

    db_denydatareader

    db_denydatawriter

saisissez la description de l'image ici

Cela va de soi, mais accordez uniquement les autorisations dont l'utilisateur a besoin. Une solution rapide et facile est de cocher db_owner comme je l'ai fait, mais ce n'est pas la meilleure pratique en matière de sécurité.

95voto

Rahul Tripathi Points 1

Je pense que le problème vient du fait que l'utilisateur a des privilèges de refus. Cette erreur se produit lorsque l'utilisateur que vous avez créé n'a pas les privilèges suffisants pour accéder à vos tables dans la base de données. Accordez les privilèges à l'utilisateur pour obtenir ce que vous voulez.

ACCORDEZ à l'utilisateur des autorisations spécifiques telles que SELECT, INSERT, UPDATE et DELETE sur les tables de cette base de données.

51voto

John Hayhow Points 471

La syntaxe pour accorder l'autorisation de sélection sur une table spécifique :

USE VotreDB;

GRANT SELECT ON dbo.nomFonction TO NomUtilisateur;

Pour accorder l'autorisation de sélection sur toutes les tables de la base de données :

USE VotreDB;

GRANT SELECT TO NomUtilisateur;

21voto

Pramod B R Points 472

C'est ainsi que j'ai pu résoudre le problème lorsque je l'ai rencontré

  1. Commencez SQL Management Studio.
  2. Développez le noeud du serveur (dans l'explorateur d'objets).
  3. Développez le noeud des bases de données, puis développez la base de données spécifique à laquelle vous essayez d'accéder en utilisant l'utilisateur spécifique.
  4. Développez le noeud Utilisateurs sous le noeud Sécurité pour la base de données.
  5. Cliquez avec le bouton droit sur l'utilisateur spécifique et cliquez sur 'propriétés'. Vous obtiendrez une boîte de dialogue.
  6. Assurez-vous que l'utilisateur est membre du groupe db_owner (veuillez lire les commentaires ci-dessous avant d'emprunter ce chemin) et apportez les autres modifications requises en utilisant la vue. (J'ai utilisé cela pour 2016. Je ne suis pas sûr de l'apparence spécifique de la boîte de dialogue dans d'autres versions, donc je ne suis pas spécifique)

0voto

billah77 Points 72

Les autorisations doivent être accordées à cet utilisateur

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