Wszystkie polecenia muszą być wykonywane podczas połączenia z odpowiednim klastrem bazy danych. Upewnij się o tym.
Role są obiektami bazy danych klaster . Wszystkie bazy danych tego samego klastra współdzielą zestaw zdefiniowanych ról. Uprawnienia są przyznawane / odbierane na bazę danych / schemat / tabelę itp.
Rola potrzebuje dostępu do bazy danych , oczywiście. Przyznaje to PUBLIC
domyślnie. Inne:
GRANT CONNECT ON DATABASE my_db TO my_user;
Podstawowe uprawnienia Postgres 14 lub nowszego
Postgres 14 dodaje predefiniowane role niezwiązane z logowaniem pg_read_all_data
/ pg_write_all_data
.
Mają SELECT
/ INSERT
, UPDATE
, DELETE
przywileje dla wszystkich tabele, widoki i sekwencje. Plus USAGE
na schematach. Możemy GRANT
członkostwo w tych rolach:
GRANT pg_read_all_data TO my_user;
GRANT pg_write_all_data TO my_user;
Obejmuje to wszystkie podstawowe polecenia DML (ale nie DDL i niektóre specjalne polecenia, takie jak TRUNCATE
lub EXECUTE
uprawnienia do funkcji!). Instrukcja:
pg_read_all_data
Odczytaj wszystkie dane (tabele, widoki, sekwencje), tak jakby miał SELECT
prawa do tych obiektów i USAGE
prawa do wszystkich schematów, nawet bez ich wyraźnego posiadania. Ta rola nie ma atrybutu roliBYPASSRLS
ustawić. Jeśli używany jest RLS, administrator może chcieć ustawić BYPASSRLS
w rolach, których ta rola jest GRANT
ed do.
pg_write_all_data
Zapisz wszystkie dane (tabele, widoki, sekwencje) tak, jakby miały INSERT
,UPDATE
i DELETE
prawa do tych obiektów i USAGE
prawa do wszystkich schematów, nawet bez posiadania tego wprost. Ta rola nie ma atrybutu roli BYPASSRLS
ustawić. Jeśli używany jest RLS, administrator może chcieć ustawić BYPASSRLS
w rolach, w których ta rola jestGRANT
ed do.
Wszystkie uprawnienia bez używania predefiniowanych ról (dowolna wersja Postgresa)
Polecenia muszą być wykonywane podczas połączenia z odpowiednią bazą danych. Upewnij się o tym.
Rola wymaga (co najmniej) USAGE
przywilej dotyczący schematu . Ponownie, jeśli jest to przyznane PUBLIC
, jesteś objęty. Inne:
GRANT USAGE ON SCHEMA public TO my_user;
Lub przyznaj USAGE
na wszystkich schematy niestandardowe:
DO
$$
BEGIN
-- RAISE NOTICE '%', ( -- use instead of EXECUTE to see generated commands
EXECUTE (
SELECT string_agg(format('GRANT USAGE ON SCHEMA %I TO my_user', nspname), '; ')
FROM pg_namespace
WHERE nspname <> 'information_schema' -- exclude information schema and ...
AND nspname NOT LIKE 'pg\_%' -- ... system schemas
);
END
$$;
Następnie wszystkie uprawnienia dla wszystkich tabeli (wymaga Postgresa 9.0) lub później).
I nie zapomnij o sekwencjach (jeśli istnieje):
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO my_user;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO my_user;
Alternatywnie możesz użyć "Kreatora grantów" pgAdmin 4 do pracy z GUI.
Istnieje kilka innych obiektów, instrukcja GRANT
ma pełną listę. Od Postgresa 12:
uprawnienia do obiektu bazy danych (tabela, kolumna, widok, tabela obca, sekwencja, baza danych, opakowanie danych obcych, serwer obcy, funkcja, procedura, język proceduralny, schemat lub przestrzeń tabel)
Ale reszta jest rzadko potrzebna. Więcej szczegółów:
- Jak zarządzać DOMYŚLNYMI UPRAWNIENIAMI dla UŻYTKOWNIKÓW BAZ DANYCH a SCHEMATEM?
- Przyznaj uprawnienia do określonej bazy danych w PostgreSQL
- Jak przyznać wszystkie uprawnienia do widoków dowolnemu użytkownikowi
Rozważ aktualizację do aktualnej wersji.