2015-02-18 18 views
25

Jaki jest grant opcja/trik muszę dać do bieżącego użytkownika („USERA”) w celu umożliwienia mu zmienić właściciela obiektu, który przynależy przez innego użytkownika ("userC")?Postgresql: error „musi być właścicielem relacji” przy zmianie obiektu właściciela

Dokładniej, kontakt tabela jest własnością userC i kiedy wykonać następujące zapytanie do zmiany właściciela do UserB, połączony z USERA:

alter table contact owner to userB; 

Otrzymuję ten błąd:

ERROR: must be owner of relation contact 

Ale USERA posiada wszystkie niezbędne uprawnienia, aby to zrobić normalnie (dalej "tworzyć na schemacie" opcja dotacji powinno wystarczyć):

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 wyjście liniowe


rozkazu:

[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=> 

Odpowiedz

44

Dzięki komentarzu Mike, ja ponownie przeczytać doc i zdałem sobie sprawę, że mój obecny użytkownik (aka. USERA że ma już tworzyć przywilej) nie było bezpośrednim/pośrednim członkiem nowa rola będącym właścicielem ...

więc rozwiązanie było bardzo proste, ja po prostu zrobić to grant:

grant userB to userA; 

to wszystko ludowa ;-)


Aktualizacja:

Innym wymogiem jest to, że obiekt musi być własnością użytkownika USERA przed zmieniając go ...

+0

Ten problem pojawia się, gdy używamy niewłaściwego użytkownika do wykonywania czynności takich jak aktualizacja/usuwanie.Napotykałem ten problem, ponieważ użyłem niewłaściwego użytkownika do zrobienia DML. Kiedy wybrałem odpowiedniego użytkownika, problem został rozwiązany. Również, jeśli przyznasz uprawnienia DML bieżącemu użytkownikowi, problem ten zostanie rozwiązany. – Ankur

+0

Chcemy tylko wspomnieć, że jeśli jakikolwiek użytkownik rozróżnia wielkość liter, należy go podać. Np .: nadaj "UserB" użytkownikowi A ->, w którym to przypadku pierwszy użytkownik rozróżnia wielkość liter, ale drugi nie – guival

6

Od the fine manual.

You must own the table to use ALTER TABLE.

Albo być superużytkownikiem baz danych.

ERROR: must be owner of relation contact

Komunikaty o błędach PostgreSQL są zwykle na miejscu. Ten jest na miejscu.

+0

Doc jest bardziej dopracowany: _You * musi posiadać tablicę * używać ALTER STÓŁ. [...] Aby zmienić właściciela, musisz * również być bezpośrednim lub pośrednim członkiem nowej roli *, a ta rola musi mieć uprawnienie CREATE w schemacie tabeli. => użytkownik docelowy (aka.) ma już plik create priv. w schemacie, ale mój bieżący użytkownik (znany też jako userA) nie był pośrednim członkiem nowej roli. Dzięki Mike, że mnie oświeciłeś! – gudepier

Powiązane problemy