Gewähren Sie Zugriff auf alle Tabellen einer Datenbank

13

Ich wollte vor kurzem regelmäßige Zugriffsrechte mit einem Benutzer eines Servers teilen , und ich erkannte , dass eine einfache CREATE USERund GRANT ALL ON DATABASEBefehle nicht ließ ihn einfach laufen SELECTauf den Daten.

Ich möchte einem bestimmten Benutzer Rechte für alle Tabellen aus einer bestimmten Datenbank gewähren, bin mir jedoch nicht sicher, ob es die beste Idee ist, ihm Zugriff auf das gesamte Schema zu gewähren, publicda ich nicht weiß, ob dies eine Art von Privilegien ermöglichen würde Eskalation. Gibt es einen anderen Weg?

d33tah
quelle
Warum kannst du nicht einfach GRANT SELECT ON TableName TO [Domain\User]? Normalerweise ordne ich der db_datareaderRolle nur Benutzer zu, wenn sie lediglich Lesezugriff auf alle Tabellen benötigen, aber ich bin mir nicht sicher, wie detailliert Sie sein möchten.
Kris Gruttemeyer
Ich möchte allen Tabellen in der Datenbank alle CRUD gewähren. Auch das DROPPEN und ERSTELLEN innerhalb dieser Datenbank könnte sich als nützlich erweisen.
d33tah

Antworten:

19

Das Privileg auf DATABASEgewährt nur allgemeine Verbindungsrechte zur Datenbank und nicht mehr. Ein Benutzer mit genau diesem Recht kann nur sehen, was die breite Öffentlichkeit sehen darf.

Um Lesezugriff auf alle Tabellen zu gewähren , benötigen Sie außerdem Berechtigungen für alle Schemas und Tabellen:

GRANT USAGE ON SCHEMA public TO myuser; -- more schemas?
GRANT SELECT ON ALL TABLES IN SCHEMA public TO myuser;

Möglicherweise möchten Sie auch Standardberechtigungen für zukünftige Schemas und Tabellen festlegen . Führen Sie für jede Rolle aus, die Objekte in Ihrer Datenbank erstellt

ALTER DEFAULT PRIVILEGES FOR ROLE mycreating_user IN SCHEMA public
GRANT SELECT ON TABLES TO myuser;

Aber Sie müssen wirklich zuerst das gesamte Konzept verstehen .
Und es ist fast immer besser, Berechtigungen in Gruppenrollen zu bündeln und dann die Gruppenrolle den Benutzerrollen zuzuweisen / zu entziehen. Verbunden:

Erwin Brandstetter
quelle
Ist myusrein Tippfehler? Sollte es nicht sein myuser?
Attomos
1
@attomos: In diesem Beispiel soll es sich um einen anderen Benutzer handeln. Ich habe geklärt.
Erwin Brandstetter