Erteilen Sie Berechtigungen für PostgreSQL-Rollen im Vergleich zu Benutzern

27

Ich lerne gerade die Unterschiede zwischen PostgreSQL und MySQL, da ich ein neues Projekt habe und beabsichtige, meine vorhandene Software von MySQL auf PostgreSQL zu migrieren. Ich habe angefangen, eine HTML-Tabelle mit einem Vergleich der Befehle (für Benutzer / Datenbanken / Eingabeaufforderung usw.) zwischen den beiden zu erstellen. Nachdem ich hier eine Antwort gelesen habe, ist mir aufgefallen, dass rolesie als Gruppe verwendet wird. Mit MySQL habe ich zwei Benutzer, grundsätzlich öffentlich ( DELETE, INSERT, SELECTund UPDATEBerechtigungen) und einen Admin - Benutzer mit ein paar zusätzlichen Berechtigungen.

Also im Grunde in der Windows 7-Eingabeaufforderung (nur lokale Entwicklung) ...

  • Ist eine Rolle ein Benutzer, eine Gruppe oder ein lose verwendeter Begriff, der für PostgreSQL spezifisch ist?
  • Wie erteile ich einem bestimmten Benutzer nur bestimmte Berechtigungen für alle Tabellen in einer Datenbank?
  • Wie erteile ich einem bestimmten Benutzer alle Berechtigungen für alle Tabellen in einer Datenbank?
  • Wie, wenn über , wird eine Rolle einen Benutzer zu vergleichen , bei der Verwendung GRANToder REVOKEBenutzerberechtigungen für?
John
quelle

Antworten:

48

Eine Rolle ist eine Entität, die als Benutzer und / oder als Gruppe fungieren kann. Eine Rolle WITH LOGINkann als Benutzer verwendet werden, dh Sie können sich damit anmelden. Jede Rolle kann als Gruppe fungieren, einschließlich Rollen, als die Sie sich auch anmelden können. "Benutzer" und "Gruppe" sind also im Wesentlichen Begriffe, die auf die beabsichtigte Verwendung einer Rolle hinweisen. Es gibt keinen wirklichen Unterschied zwischen ihnen. Selbst in der PostgreSQL-Variante von SQL werden die beiden mehr oder weniger als Synonyme verwendet. In der Dokumentation zu CREATE USERheißt es beispielsweise:

CREATE USER ist jetzt ein Alias ​​für CREATE ROLE.

Alles gewähren ... siehe Handbuch fürGRANT . Wahrscheinlich möchten Sie Rechte ALL TABLES IN SCHEMA publiceher für alle Tabellen in der Datenbank gewähren als für alle Tabellen in der Datenbank.

Einige Rechte gewähren ... das Gleiche, aber anstatt es zum Beispiel zu GRANT ALLbenutzen GRANT SELECT, INSERT. Siehe auch hier das Handbuch.

Eine Rolle ist ein Benutzer und / oder eine Gruppe. Sie können nur Rollen zuweisen, da nur Rollen vorhanden sind.

Craig Ringer
quelle
Tolle Erklärung!
Sharadov
Also ... wie lautet die Syntax zum Gewähren aller Rechte für alle Tabellen im Schema public?
AlxVallejo,
@AlxVallejo das sollte helfen . Versuchen Sie es mit dem oberen Link oder lesen Sie die GRANTDokumentationsseite, auf der es aufgeführt istALL TABLES IN SCHEMA
Craig Ringer