Die SELECT-Berechtigung wurde für das Objekt 'Benutzer', Datenbank 'XXX', Schema 'dbo' verweigert.


81

Ich habe eine Datenbank von SQL Server 2012 nach Azure verschoben. Ich möchte den Benutzer nicht verwenden master, daher habe ich einen Benutzer erstellt test. Folgendes habe ich für die Datenbank XXX in Azure getan:

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

Ich habe überprüft, und die Datenbankobjekte, an denen ich interessiert bin, befinden sich alle im Schema dbo. Die Tabelle Usersbefindet sich im Schema dbo.

Die Verbindungszeichenfolge in meinem Webprojekt hat testals Login. Es wird die Fehlermeldung ausgegeben:

The SELECT permission was denied on the object 'Users', database 'XXX', schema 'dbo'

Was bedeutet die Fehlermeldung und was kann ich tun, um dem Benutzer den testZugriff auf die Datenbank XXX zu ermöglichen?


Vielen Dank für diese Frage :)
Kamlesh

Antworten:


75

Ich denke, das Problem ist, dass der Benutzer Berechtigungen verweigert . Dieser Fehler tritt auf, wenn der von Ihnen erstellte Benutzer nicht über die erforderlichen Berechtigungen verfügt, um auf Ihre Tabellen in der Datenbank zuzugreifen. Gewähren Sie dem Benutzer das Privileg, um das zu erhalten, was Sie möchten.

Gewähren Sie den benutzerspezifischen Berechtigungen wie SELECT, INSERT, UPDATE und DELETE für Tabellen in dieser Datenbank.


3
Manchmal fehlen Ihnen Optionen für Datenbankdatenleser / Datenbankbesitzer? windowstechinfo.com/2014/09/…
Aravinda

5
Ich musste 'db_denydatareader' und 'db_denydatawriter' deaktivieren und ich denke, das ist es, was SaeX mit "widerrufen" meint. Danke SaeX.
AH.

@AH. Ich hatte das gleiche Problem wie Sie und schrieb eine Antwort auf diese Frage. Probieren Sie es aus, wenn Sie eine Chance bekommen
Kolob Canyon

Sie sind Lebensretter, vielen Dank :)
Kamlesh

55
  1. Öffnen Sie SQL Management Studio
  2. Erweitern Sie Ihre Datenbank
  3. Erweitern Sie den Ordner "Sicherheit"
  4. Erweitern Sie "Benutzer"
  5. Klicken Sie mit der rechten Maustaste auf den Benutzer (der die Abfrage ausführen möchte) und wählen Sie ihn aus Properties.
  6. Seite auswählen Membership.
  7. Stellen Sie sicher, dass Sie deaktivieren

    db_denydatareader

    db_denydatawriter

Geben Sie hier die Bildbeschreibung ein

Dies sollte selbstverständlich sein, aber nur die Berechtigungen erteilen, die der Benutzer benötigt. Eine einfache, faule Lösung besteht darin, zu überprüfen, db_ownerwie ich es getan habe, aber dies ist nicht die beste Sicherheitspraxis.


4
Sie sind Lebensretter, vielen Dank :)
Kamlesh

1
Du hast mir STUNDEN zeitraubendes Googeln und Frust erspart!
Scott Fleming

1
Viele von uns wählen einfach alle aus, indem sie davon ausgehen, dass wir alle Berechtigungen erhalten. Allerdings gibt es eine denyzu
Murali Murugesan

30

Die Syntax zum Erteilen der Auswahlberechtigung für eine bestimmte Tabelle:

USE YourDB;

GRANT SELECT ON dbo.functionName TO UserName;

So erteilen Sie die Auswahlberechtigung für alle Tabellen in der Datenbank:

USE YourDB;

GRANT SELECT TO UserName;

2
Das erste Mal habe ich dies getan, daher bin ich mir nicht sicher, ob es korrekt war, aber ich wollte eine Auswahlberechtigung für die gesamte Datenbank erteilen, also habe ich GRANT SELECT TO UserName ausgeführt und die ON-Klausel weggelassen. Es funktionierte.
Rich

18

So konnte ich das Problem lösen, als ich es sah

  1. Starten Sie SQL Management Studio.
  2. Erweitern Sie den Serverknoten (im 'Objekt-Explorer').
  3. Erweitern Sie den Datenbankknoten und anschließend die spezifische Datenbank, auf die Sie mit dem spezifischen Benutzer zugreifen möchten.
  4. Erweitern Sie den Knoten Benutzer unter dem Knoten Sicherheit für die Datenbank.
  5. Klicken Sie mit der rechten Maustaste auf den bestimmten Benutzer und klicken Sie auf "Eigenschaften". Sie erhalten ein Dialogfeld.
  6. Stellen Sie sicher, dass der Benutzer Mitglied der Gruppe db_owner ist (lesen Sie bitte die folgenden Kommentare, bevor Sie diesen Pfad verwenden) und andere erforderliche Änderungen in der Ansicht. (Ich habe dies für 2016 verwendet. Ich bin mir nicht sicher, wie der spezifische Dialog in einer anderen Version aussieht und daher nicht spezifisch ist.)

6
Seien Sie vorsichtig, wen Sie in die Datenbankrolle db_owner einfügen. Nicht alle Benutzer sollten zu dieser Rolle hinzugefügt werden.
Rod

1
@Rod Wenn die Gewährung des Datenbankbesitzers nicht empfohlen wird, welcher Zugriffstyp wird dann empfohlen, damit die Anwendung mit der Datenbank interagieren kann?
Jacob

1
Würde die Öffentlichkeit ausreichen?
Rod

2
@Jacob Zum Schreiben und Lesen von Daten in eine beliebige Tabelle gibt es die ID db_datareader und db_datawriter. db_owner gibt auch die Berechtigung zum Ändern von Tabellendefinitionen.
Oskar Berggren

3
Dies funktioniert nicht, wenn der Benutzer überprüft hat db_denydatareadeoderdb_denydatawriter
Kolob Canyon


0

Überprüfen Sie den Speicherplatz Ihrer Datenbank. Dieser Fehler tritt auf, wenn der Speicherplatz im Vergleich zum Speicherplatz der Datenbank erhöht wird.


Ändern Sie auch die Datenbank Benutzer-ID und Passwort
Nilesh

0

Mit SSMS habe ich sichergestellt, dass der Benutzer sowohl für die Datenbank als auch für den ReportServer über Verbindungsberechtigungen verfügt.

In der spezifischen Datenbank, die abgefragt wird, habe ich unter Eigenschaften deren Anmeldeinformationen zugeordnet und Datenleser und öffentliche Berechtigungen aktiviert. Wie andere bereits angegeben haben, habe ich auch sichergestellt, dass keine Denishread- / Denywrite-Felder ausgewählt wurden.

Ich wollte den Datenbankbesitz nicht aktivieren, wenn für ihre Berichte, da sie nur ausgewählte Berechtigungen benötigen.


-1

Ich löse mein Problem damit. [WICHTIGER HINWEIS: Es ermöglicht eskalierte (erweiterte) Berechtigungen für das jeweilige Konto, möglicherweise mehr als für einzelne Szenarien erforderlich sind].

  1. Wechseln Sie zu ' Object Explorer ' von SQL Management Studio.
  2. Erweitern Sie Sicherheit und dann Anmelden .
  3. Wählen Sie den Benutzer aus, mit dem Sie arbeiten, klicken Sie mit der rechten Maustaste und wählen Sie Eigenschaften Windows .
  4. In Wählen Sie eine Seite : Gehe hin zu Serverrollen
  5. Klicken Sie auf sysadmin und speichern Sie.

2
Ich bin mir nicht sicher, warum diese Antwort abgelehnt wurde. Diese Antwort hat mein Problem gelöst. Also habe ich gestimmt.
Emran Hussain

9
Diese Antwort sollte herabgestuft werden, da sie den Leser offensichtlich auffordert, dem Benutzerobjekt die vollständige Kontrolle über den gesamten Server zu geben, ohne zu erklären oder zu warnen, dass dies der Fall ist. Aufgrund des Wortlauts der Frage und dieser Antwort besteht meines Erachtens die Gefahr, dass unerfahrene Benutzer dieses "Update" anwenden, ohne es vollständig zu verstehen.
Oskar Berggren

3
Dies ist eine Brute-Force-Option, die nicht angewendet werden sollte. Wenn Sie nicht verstehen, was dies tut, sollten Sie es nicht tun.
n8.

Jeder - tun Sie dies nicht in der Produktionsumgebung.
Gotqn

Natürlich würde ich das nicht in prod machen, aber es hat mein Problem gelöst (in der Entwicklungsumgebung). Es verdient also meine Zustimmung. Danke ccassob.
Fl4v

-2

Möglicherweise ist Ihr Plesk-Panel oder ein anderes Panel-Abonnement abgelaufen. Bitte überprüfen Sie das Abonnement-Ende.


Bitte geben Sie eine weitere Beschreibung Ihrer Antwort an
asolanki
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.