Jestem zalogowany na konto superużytkownika i oto proces, który wykonuję:
1-> CREATE ROLE test WITH IN ROLE testroles PASSWORD 'testpasswd'
2-> CREATE SCHEMA AUTHORIZATION test
Rola została utworzona poprawnie, ale podczas próby utworzenia schematu pojawia się ten błąd:
ERROR: must be member of role "test"
Z góry dziękuję!
postgresql
roles
Ultranuke
źródło
źródło
Odpowiedzi:
Napotkałem ten problem podczas korzystania
CREATE DATABASE
z Amazon RDS. Myślę, że to zasadniczo to samo, co używanieCREATE SCHEMA
.W przypadku korzystania z usługi Amazon RDS użytkownik wystawiający
CREATE DATABASE
musi być członkiem roli, która będzie właścicielem bazy danych. W moim przypadku konto superużytkownika, którego używam, jest wywoływaneroot
i mam zamiar utworzyć rolę,o
która będzie właścicielem bazy danychd
:postgres=> CREATE ROLE o; CREATE ROLE postgres=> CREATE DATABASE d OWNER = o; ERROR: must be member of role "o" postgres=> GRANT o TO root; GRANT ROLE postgres=> CREATE DATABASE d OWNER = o; CREATE DATABASE
źródło
GRANT o TO postgres;
przed utworzeniem bazy danych.Natknąłem się na ten sam problem, narzeka, że obecny (główny) użytkownik, z którym jesteś zalogowany, nie jest członkiem grupy użytkowników, dla której próbujesz utworzyć schemat. Powinieneś przyznać dostęp do roli swojemu głównemu użytkownikowi, co pozwoli Ci bezbłędnie stworzyć SCHEMAT:
GRANT <role> TO <master_user>;
źródło
Czy używasz RDS? Ponieważ mam ten sam problem, gdy loguję się jako „superużytkownik”, którego dla Ciebie utworzyli. Sposób, w jaki mogłem to naprawić, polegał na utworzeniu nowej roli grupowej obejmującej mojego superużytkownika i użytkownika, który był właścicielem schematu. Dla Ciebie oznaczałoby to więc dodanie superużytkownika i użytkownika testowego do nowej grupy ról:
CREATE ROLE users NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION; GRANT megausers TO testroles; GRANT test TO testroles;
Teraz powinieneś być w stanie stworzyć swoją schmea
źródło
Miałem ten problem z RDS.
Aby to rozwiązać:
Zaloguj się jako superużytkownik
psql --host=xxxxxxx.rds.amazonaws.com --port=5432 --username=RDS_SUPERUSER_NAME --password --dbname=postgres
Utwórz użytkownika
CREATE USER newuser WITH CREATEDB PASSWORD 'password';
Wyloguj
Zaloguj się jako
newuser
psql --host=xxxxxxx.rds.amazonaws.com --port=5432 --username=newuser --password --dbname=postgres
Utwórz swoją bazę danych / schemat
CREATE SCHEMA/DATABASE ....
źródło
Czy nie musimy po prostu przyznać użytkownikowi administracyjnemu członkostwa w roli usługi?
create role service_role with password 'some_password'; create database service_db with owner service_role; ERROR: must be member of role "service_role" grant admin_user service_role; GRANT ROLE create database service_db with owner service_role; CREATE DATABASE
źródło
GRANT service_role TO admin_user;
Napotkałem ten problem również na RDS. Zalogowałem się jako
root
użytkownik, utworzyłem rolę o nazwie,myappuser
a następnie próbowałem utworzyć schemat o nazwie,superduper
którego właścicielem jestmyappuser
.Znalazłem rozwiązanie, które działa. Utwórz
myappuser
rolę i upewnij się, że ta rola ma przynajmniej uprawnienia do tworzenia baz danych (to uprawnienie nazywa sięCREATEDB
). Po utworzeniumyappuser
roli zalogowałem się do bazy danych jakomyappuser
i utworzyłemsuperduper
schemat, którego użytkownikiem jestmyappuser
. To działało bez żadnych problemów.źródło
Miałem ten sam problem. Aby rozwiązać ten problem, zalogowałem się w nowo utworzonej roli i utworzyłem bazę danych. W jakiś sposób grant nie działa w RDS Postgres.
źródło
Właśnie natknąłem się na to używając Amazon RDS.
Wiele odpowiedzi jest już poprawnych, ale możesz też po prostu zmienić rolę.
Oto moja realizacja
psql -h ${PGHOST} -p ${PGPORT:-5432} -U ${PGUSER:-postgres} -c "ALTER USER renderer WITH CREATEDB PASSWORD '$RENDERPASSWORD'"
Więc zmieniając hasło, dodam również uprawnienie roli CREATEDB do roli.
źródło
Naprawiłem to, logując się jako
postgres
użytkownik (a następnie wprowadzając zmiany, czyli zmianę właściciela w moim przypadku):sudo -u postgres psql ALTER DATABASE my_database OWNER TO new_user;
źródło