Pracuję nad bazą danych amazon RDS postgresql, w której wiem, że wystąpił problem z publicznym schematem (być może został usunięty). Ale najwyraźniej schemat istnieje i problem nie został rozwiązany. Oto przykładowa sesja z nowo utworzoną pustą bazą danych:
mydb=> CREATE TABLE distributors (
mydb(> did integer,
mydb(> name varchar(40) UNIQUE
mydb(> );
ERROR: no schema has been selected to create in
mydb=> show search_path;
search_path
----------------
"$user",public
(1 row)
mydb=> create schema public;
ERROR: schema "public" already exists
Jakaś wskazówka? Czego powinienem szukać?
Rozwiązany. Dzięki odpowiedzi Daniela Vérité rozwiązałem następujące kwestie:
grant usage on schema public to public;
grant create on schema public to public;
Czy są to domyślne uprawnienia w schemacie publicznym?
Mam jednego użytkownika, który może uzyskać dostęp do bazy danych, więc myślę, że to i tak nie może zwiększyć ryzyka bezpieczeństwa ...
Myślę, że powinienem dokonać tej samej modyfikacji na template1 . Czy to jest poprawne? Jak mogę sprawdzić, czy uprawnienia w szablonie 1 są prawidłowe (powiedzmy, wartości domyślne)?
postgresql
schema
amazon-rds
Emanuele Paolini
źródło
źródło
Odpowiedzi:
Dzieje się tak, gdy nie ma
USAGE
uprawnień do żadnego ze schematówsearch_path
. Domyślnie pseudo-rolapublic
(wszyscy użytkownicy) ma to uprawnienie wpublic
schemacie, więc ten błąd występuje tylko po jawnym odwołaniu go za pomocą:Jest to wymagane, gdy nie jest pożądane, aby ludzie zaglądali do schematów innych osób, nawet bez wybierania danych z tabel (co jest przyznawane na podstawie różnych uprawnień).
Jeśli
REVOKE
nie zostało to zrobione w tej bazie danych, mogło się to zdarzyć w bazie danych szablonów, według której modelowane są nowe bazy danych (patrzCREATE DATABASE
).Gdy użytkownik ma
USAGE
uprawnienia, ale nie maCREATE
uprawnień do schematu, jest to inny błąd podczas próby utworzenia obiektu: odmowa dostępu do schematu publicznego .Aby sprawdzić uprawnienia w psql, użyj
\dn+ public
.Domyślnie (pokazany z rozszerzonym wyświetlaczem
\x
dla czytelności):brak wcześniejszej nazwy roli
=
oznacza, że dotyczy wszystkich ról (= public)Bez publicznego uprawnienia do UŻYTKOWANIA
Bez publicznych uprawnień UŻYTKOWANIA lub TWORZENIA
źródło
Miałem plik pgdump z funkcjami tworzenia w niestandardowym schemacie i chciałem zmienić niestandardową nazwę schematu na publiczną i zastąpić wszystkie wystąpienia starym schematem pustym (np. Myschema.tablename na tablename) i zacząłem otrzymywać błąd
W moim przypadku błąd występuje, gdy na początku zrzutu obecnego wiersza
Zmieniłem drugi argument na „public”
I problem zniknął
źródło