2015-02-18 5 views
25

Was ist die grant Option/Trick muss ich dem aktuellen Benutzer geben ("userA"), damit er den Eigentümer eines Objekts ändern kann, der gehört von einem anderen Benutzer ("userC")?Postgresql: Fehler "muss Eigentümer der Beziehung sein" beim Ändern eines Eigentümerobjekts

Genauer gesagt, die Kontakt Tabelle wird durch die BenutzerC Besitz und wenn ich führen Sie die folgende Abfrage für den Besitzer der userB Wechsel, verbunden mit dem userA:

alter table contact owner to userB; 

Ich erhalte diesen Fehler:

ERROR: must be owner of relation contact 

Aber userA hat alle benötigten Rechte, die normalerweise zu tun (die "auf Schema erstellen" grant Option sollte genug sein):

grant select,insert,update,delete on all tables in schema public to userA; 
grant select,usage,update on all sequences in schema public to userA; 
grant execute on all functions in schema public to userA; 
grant references, trigger on all tables in schema public to userA; 
grant create on schema public to userA; 
grant usage on schema public to userA; 

Thks


Befehlszeilen Ausgabe:

[email protected]:~# psql -U userA myDatabase 
myDataBase=>\dt contact 
    List of relations 
Schema | Name | Type | Owner 
-------+---------+----------+--------- 
public | contact | table | userC 
(1 row) 
myDataBase=> 
myDataBase=>alter table contact owner to userB; 
ERROR: must be owner of relation public.contact 
myDataBase=> 

Antwort

44

Dank der Mike Kommentar, ich habe das Dokument neu zu lesen und ich habe erkannt, dass meine aktuellen Benutzer (aka. UserA, auf dem bereits die Privileg erstellen) war kein direkt/indirekt Mitglied die neue besitzende Rolle ...

So ist die Lösung war ganz einfach, ich habe gerade diesen Zuschuss getan:

grant userB to userA; 

das ist alles, Folk ;-)


Update:

Eine weitere Anforderung ist, dass das Objekt durch den Benutzer userA vor Veränderung in ihrem Besitz befinden werden muss ...

+0

Dieses Problem tritt auf, wenn wir falsche Benutzer zu Aktionen wie update/delete verwenden.Ich war mit diesem Problem konfrontiert coz ich falsche Benutzer verwendet, um DMLs.when ich wählte den richtigen Benutzer, wurde das Problem gelöst.Auch wenn Sie dem aktuellen Benutzer die DML-Berechtigungen gewähren, wird dieses Problem gelöst werden. – Ankur

+0

Ich möchte nur erwähnen, dass wenn ein Benutzer Groß-und Kleinschreibung ist, sollte es zitiert werden. ZB: rate "UserB" zu userA -> in diesem Fall ist der erste Benutzer Groß-und Kleinschreibung, aber die zweite nicht – guival

6

Von the fine manual.

You must own the table to use ALTER TABLE.

Oder ein Datenbank-Superuser sein.

ERROR: must be owner of relation contact

PostgreSQL-Fehlermeldungen sind in der Regel genau richtig. Dieser ist genau richtig.

+0

Die Doc nuancierter ist: _You * muß die Tabelle besitzt * ALTE verwenden TABELLE. [...] Um den Eigentümer zu ändern, müssen Sie * auch ein direktes oder indirektes Mitglied der neuen Eigentümerrolle * sein, und diese Rolle muss das CREATE-Privileg für das Schema der Tabelle haben._ => der Zielbenutzer (aka. UserB) hat schon das priv erstellt. auf dem Schema, aber mein aktueller Benutzer (aka. userA) war kein indirektes Mitglied der neuen Rolle. Danke Mike, um mich erleuchtet zu haben! – gudepier

Verwandte Themen