2013-05-16 8 views
5

erstellen Ich brauche einen neuen Benutzer, aber es sollte alle diese Berechtigungen gewährt werden, die der andere vorhandene Benutzer/Rolle hat.wie doppelte Rolle eines Benutzers in Postgres

z.B.

  • Benutzer A hat SELECT-Berechtigungen für Table1
  • Benutzer A Privilegien auf Table2 EXECUTE hat
  • ...

Wenn ein neuer Benutzer B erstellt wird, ich brauche die gleichen Privilegien wie,

  • Benutzer B hat SELECT-Berechtigungen für Table1
  • Benutzer B hat EXECUTE Privilegien auf Table2
  • ...

nicht fragen, warum:/

Eigentlich hat Benutzer eine benutzerdefinierte Berechtigungen für verschiedene Tabellen, Schemata und Funktionen; Daher ist es sehr mühsam und langwierig, dem neuen Benutzer manuell Berechtigungen zu erteilen. Jede Hilfe wäre gut.

Antwort

0

Ich musste den pgpsql-Code schreiben, um die Privilegien von Benutzer A zu durchlaufen und es Benutzer B zu gewähren. Es wurde ohne jedes Problem gemacht.

create or replace function update_user_privileges() returns text as 
$$ 
declare 

     info record; 
     str text; 

begin 
     /*Grant privileges to user B the same as with user A for a given table schema*/ 
     str:=''; 
     FOR info IN 
      select * from information_schema.table_privileges where table_schema='public' and grantee = 'A' 
     LOOP 
      /*append the tables' name, for which we are assigning privileges from user A to B*/ 
      str:= str ||info.table_name || ','; 

     /*this is the main statement to grant any privilege*/ 
     execute 'GRANT '|| info.privilege_type ||' on table public.'|| info.table_name || ' to B'; 

     END LOOP; 

    return str; 
end 

$$ language 'plpgsql'; 

Verbrauch: Kopieren/Einfügen des Code zu crate diese Funktion und tut dann

select update_user_privileges(); 

** Sie haben es für Ihr Tisch-Schema und Tabellennamen anzupassen. Ich hoffe, es hilft jedem

+0

Was ist mit Spalte, Funktion, Ansichten Berechtigungen? – ArunaFromLK

1

Zuerst verstehen, dass roles und users die gleiche Sache sind. In der Tat gibt es kein Ding namens user wirklich, es ist nur eine ROLE mit einer LOGIN Option.

Zweite roles kann zu anderen roles gewährt werden.

Dritte Privilegien auf Rollen können vererbt werden.

So vorausgesetzt, Sie Ihre Benutzer erstellt haben a wie:

CREATE ROLE A LOGIN; 
GRANT SELECT ON table1 TO a; 
GRANT EXECUTE ON FUNCTION xxx TO a; 

Sie sollten eine zweite Rolle in der Lage zu schaffen, die die erste Rolle spiegelt wie:

CREATE ROLE b LOGIN; 
GRANT a TO b; 
+0

Sie müssen für Rolle A nicht "INHERIT" angeben. Nur für Rolle B (wer erbt die Rechte). + 'INHERIT' ist ein Standard, also muss nicht explizit geschrieben werden. –

+0

Guter Punkt, ich war nur explizit, aber es ist wahrscheinlich nur nervig ... * updates * –

+0

Was ist, wenn ich nicht die Rolle Privilegien erben will, sondern gewähren Sie alle Privilegien von A nach B und auch in der Lage, Privilegien von A zu ändern ohne Auswirkung B – Saad

4

Versuchen Sie so etwas wie:

GRANT A TO B; 

Es wird alle Rechte der Rolle A zu B gewähren.

Für Details lesen Sie this Kapitel des Handbuchs.

+0

Nicht ausreichend. Wenn A ein Superuser ist, benötigen Sie auch: ALTER USER B MIT SUPERUSER; –

+0

Hinweis: Dadurch wird Rolle B alle Privilegien der Rolle A "erben". Rollen werden in einer Art Vererbungsbeziehung gekoppelt. Dadurch werden Berechtigungen nicht dupliziert. –

0

Ich verwendete folgende Methode, um einen neuen Benutzer wie einen vorhandenen Benutzer mit Ubuntu zu erstellen.

  1. ein vollständiges Speicher-Abbild der vorhandenen Datenbank erhalten.
  2. Verwenden Sie den folgenden Befehl, um jede Zeile mit dem Benutzer zu extrahieren, den Sie klonen möchten.

    cat/pfad/zu/db_dump_datei | grep "existing_user_name" >> /path/to/extract.sql

  3. Öffnen Sie extract.sql mit einem Texteditor und ersetzen Sie den bestehenden Benutzernamen durch den neuen Benutzernamen.

  4. Entfernen Sie unerwünschte Abfragen (falls vorhanden).
  5. Jetzt haben Sie neue SQL-Abfragen, um den neuen Benutzer zu erstellen.

Das funktionierte für mich ganz gut. Hoffe, das wird jemandem helfen.

Verwandte Themen