PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

PostgreSQL:nadaj użytkownikowi wszystkie uprawnienia w bazie danych PostgreSQL

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mapowanie typu szeregowego PostgreSQL z adnotacjami Hibernate

  2. PostgreSQL błędna konwersja ze znacznika czasu bez strefy czasowej na znacznik czasu ze strefą czasową

  3. Konfiguracja klastra Puma w Heroku

  4. Jak uzyskać koniec dnia?

  5. Odpowiednik unpivot() w PostgreSQL