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

Przyznaj uprawnienia do określonej bazy danych w PostgreSQL

Podstawowa koncepcja w Postgresie

Role są obiektami globalnymi, które mogą uzyskiwać dostęp do wszystkich baz danych w klastrze db - z wymaganymi uprawnieniami.

klaster przechowuje wiele baz danych , które zawierają wiele schematów . Schematy (nawet o tej samej nazwie) w różnych bazach danych nie są powiązane. Nadawanie uprawnień do schematu dotyczy tylko tego konkretnego schematu w bieżącym DB (bieżącym DB w momencie nadawania).

Każda baza danych zaczyna się od schematu public domyślnie. To konwencja i od niej zaczyna się wiele ustawień. Poza tym schemat public to po prostu schemat jak każdy inny.

Pochodząc z MySQL, możesz zacząć od jednego schematu public , skutecznie całkowicie ignorując warstwę schematu. Regularnie używam dziesiątek schematów na bazę danych.
Schematy są trochę (ale nie do końca) jak katalogi w systemie plików.

Gdy użyjesz wielu schematów, pamiętaj, aby zrozumieć search_path ustawienie:

  • W jaki sposób search_path wpływa na rozwiązywanie identyfikatorów i „bieżący schemat”

Uprawnienia domyślne

Zgodnie z dokumentacją dotyczącą GRANT :

PostgreSQL nadaje domyślne uprawnienia do niektórych typów obiektów PUBLIC . Żadne uprawnienia nie są przyznawane użytkownikowi PUBLIC domyślnie w tabelach, kolumnach, schematach lub przestrzeniach tabel. W przypadku innych typów uprawnienia domyślne przyznawane PUBLIC są następujące:CONNECT i CREATE TEMP TABLE dla baz danych; EXECUTE uprawnienia do funkcji; i USAGE przywilej dla języków.

Wszystkie te ustawienia domyślne można zmienić za pomocą ALTER DEFAULT PRIVILEGES :

  • Przyznaj wszystko w określonym schemacie w bazie danych do roli grupowej w PostgreSQL

Rola w grupie

Jak skomentował @Craig, najlepiej GRANT przywileje do roli grupowej, a następnie nadaj określonemu użytkownikowi członkostwo w tej roli (GRANT rolę grupową do roli użytkownika). W ten sposób łatwiej jest rozdawać i cofać pakiety uprawnień potrzebnych do niektórych zadań.

Rola grupowa to po prostu kolejna rola bez logowania. Dodaj login, aby przekształcić go w rolę użytkownika. Więcej:

  • Dlaczego PostgreSQL połączył użytkowników i grupy w role?

Wstępnie zdefiniowane role

Aktualizacja: Postgres 14 lub nowszy dodaje nowe predefiniowane role (formalnie „role domyślne”) pg_read_all_data i pg_write_all_data aby uprościć niektóre z poniższych. Zobacz:

  • Przyznaj dostęp do wszystkich tabel bazy danych

Przepis

Powiedzmy, że mamy nową bazę danych mydb , grupa mygrp i użytkownika myusr ...

Podczas połączenia z daną bazą danych jako superużytkownik (postgres na przykład):

REVOKE ALL ON DATABASE mydb FROM public;  -- shut out the general public
GRANT CONNECT ON DATABASE mydb TO mygrp;  -- since we revoked from public

GRANT USAGE ON SCHEMA public TO mygrp;

Aby przypisać „użytkownikowi wszystkie uprawnienia do wszystkich tabel” tak jak napisałeś (mogę być bardziej restrykcyjny):

GRANT ALL ON ALL TABLES IN SCHEMA public TO mygrp;
GRANT ALL ON ALL SEQUENCES IN SCHEMA public TO mygrp; -- don't forget those

Aby ustawić domyślne uprawnienia dla przyszłych obiektów, uruchom dla każdej roli który tworzy obiekty w tym schemacie:

ALTER DEFAULT PRIVILEGES FOR ROLE myusr IN SCHEMA public
GRANT ALL ON TABLES TO mygrp;

ALTER DEFAULT PRIVILEGES FOR ROLE myusr IN SCHEMA public
GRANT ALL ON SEQUENCES TO mygrp;

-- more roles?

Teraz przydziel grupę użytkownikowi:

GRANT mygrp TO myusr;

Powiązana odpowiedź:

  • PostgreSQL - użytkownik bazy danych powinien mieć możliwość wywoływania funkcji tylko

Alternatywne (niestandardowe) ustawienie

Pochodzące z MySQL, a ponieważ chcesz zachować oddzielne uprawnienia do baz danych, może ci się spodobać to niestandardowe ustawienie db_user_namespace . Zgodnie z dokumentacją:

Ten parametr włącza nazwy użytkowników dla poszczególnych baz danych. Domyślnie jest wyłączone.

Przeczytaj uważnie instrukcję. Nie używam tego ustawienia. Nie unieważnia powyższego.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ogranicz dostęp użytkowników PostgreSQL za pomocą schematu i widoków

  2. Jak utworzyć użytkownika z uprawnieniami superużytkownika w PostgreSQL?

  3. Mówienie użytkownikom, aby sami się rozwidlili

  4. Postgresql error PANIC:nie można znaleźć prawidłowego rekordu punktu kontrolnego

  5. Jak działa justify_days() w PostgreSQL