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

Uprawnienia użytkownika PostgreSQL

W PostgreSQL wszystko opiera się na koncepcji roli .

Podczas pierwszej instalacji PostgreSQL na macOS skrypt utworzył rolę z twoją nazwą użytkownika macOS , z listą przyznanych uprawnień.

W PostgreSQL nie ma użytkowników, tylko role .

Uruchamiając psql postgres w swoim terminalu, automatycznie zalogujesz się do PostgreSQL przy użyciu swojej nazwy użytkownika macOS, uzyskując w ten sposób dostęp do utworzonej roli.

W moim przypadku flaviokopy rola została utworzona i mogę ją zobaczyć, używając \du polecenie:

Widzieć? Mam następujące atrybuty ról domyślnie:

  • Superużytkownik
  • Utwórz rolę
  • Utwórz bazę danych
  • Replikacja
  • Pomiń RLS

i nie jestem członkiem żadnej innej roli (więcej o tym później)

Tworzenie nowej roli

Nowa rola jest tworzona za pomocą CREATE ROLE polecenie:

CREATE ROLE <role>;

Na przykład:

CREATE ROLE testing;

Otrzymaliśmy nową rolę z Nie mogę się zalogować atrybut roli. Nasz nowo utworzony użytkownik nie będzie mógł się zalogować.

Możesz spróbować, wpisując \q polecenie, a następnie psql postgres -U testing , ale zobaczysz ten błąd:

Aby rozwiązać ten problem, musimy dodać LOGIN atrybut roli podczas tworzenia:

CREATE ROLE <role> WITH LOGIN;

Jeśli usuniemy tę rolę za pomocą:

DROP ROLE <role>;

i dodaj Z LOGOWANIEM tym razem:

DROP ROLE testing;
CREATE ROLE testing WITH LOGIN;

Widzimy, że testowanie rola może się zalogować, ponieważ nie mamy opcji Nie można się zalogować tym razem atrybut roli:

Spróbuj, dodając polecenie \q zakończyć, a następnie psql postgres -U testing :

Zauważ, że monit zmieniono z =# do => ponieważ nie mamy Superużytkownika atrybut roli teraz.

Dodawanie hasła do roli

W poprzednim CREATE ROLE polecenie utworzyliśmy rolę bez hasła. Oczywiście bardzo ważne jest posiadanie (bezpiecznych) haseł. Możesz dodać hasło, używając PASSWORD słowo kluczowe:

CREATE ROLE <role> WITH LOGIN PASSWORD '<password>';

UTWÓRZ UŻYTKOWNIKA

Alternatywny sposób definiowania ról za pomocą LOGIN automatycznie dodanym atrybutem (skutecznie tworzącym użytkowników, którzy mogą się logować) jest użycie CREATE USER :

CREATE USER <role> PASSWORD '<password>';

Dodawanie atrybutu roli do roli

Atrybut roli można później dodać do roli za pomocą ALTER ROLE polecenie.

Załóżmy, że stworzyliśmy rolę bez atrybutu LOGIN:

CREATE ROLE <username> PASSWORD '<password>';

Możemy to dodać za pomocą:

ALTER ROLE <role> WITH LOGIN;

Wbudowane atrybuty ról

Widzieliśmy LOGIN atrybut role już, aby umożliwić logowanie roli.

Ale jakich innych wbudowanych atrybutów ról możemy użyć?

  • ZALOGUJ / NIELOGUJ :zezwól (lub nie) na logowanie do PostgreSQL
  • SUPERUSER / NIESUPERUSER :zezwól (lub nie) na uprawnienia administratora. Superużytkownik bazy danych pominie inne kontrole uprawnień, z wyjątkiem LOGIN (musi być przyznane osobno).
  • CREATEDB / NOCREATEDB :zezwól (lub nie) na możliwość tworzenia nowych baz danych
  • CREATEROLE / NOCREATEROLE :zezwól (lub nie) na możliwość tworzenia nowych ról
  • CREATEUSER / NOCREATEUSER :zezwól (lub nie) na możliwość tworzenia nowych użytkowników
  • DZIEDZICZ / NOINHERIT :zezwól (lub nie) na możliwość dziedziczenia uprawnień
  • REPLIKACJA / BRAK POWTÓRZ :przyznaj (lub nie) uprawnienia do replikacji (zaawansowany temat, którego nie omówimy)

Role w grupie

W PostgreSQL nie ma grup użytkowników.

Zamiast tego możesz tworzyć role z określonymi uprawnieniami, a następnie przydzielać je innym rolom.

Role odziedziczą uprawnienia przyznanych im ról, jeśli te role mają atrybut INHERIT.

Utwórz rolę grupową

Aby utworzyć rolę grupową, wpisz

CREATE ROLE <groupname>;

Składnia jest taka sama jak przy tworzeniu roli.

Po utworzeniu roli grupowej możesz dodać role do roli grupowej za pomocą GRANT :

GRANT <groupname> TO <role>

Na przykład możemy stworzyć flavio rolę użytkownika, rolę grupową „pracownik” i przypisz użytkownika do roli grupowej:

CREATE USER flavio PASSWORD 'superSecret123$';
CREATE ROLE employee;
GRANT employee TO flavio;

Możesz usunąć rolę z roli grupowej za pomocą:

REVOKE <groupname> FROM <username>

Przykład:

REVOKE employee FROM flavio;

Atrybuty ról grupowych

Domyślnie dodanie roli do roli grupowej nie spraw, aby rola dziedziczyła atrybuty (uprawnienia) z roli grupowej.

Musisz utworzyć rolę grupową z INHERIT atrybut.

Załóżmy, że tworzysz rolę grupy pracowników i przypisujesz jej CREATEDB atrybut:

CREATE ROLE employee WITH CREATEDB INHERIT;

Teraz utwórz nową rolę za pomocą INHERIT :

CREATE ROLE flavio;
GRANT employee TO flavio;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dołącz do aliasów kolumn SQL

  2. Importuj bibliotekę psycopg2 nie załadowaną:libssl.1.0.0.dylib

  3. Zapytanie PostgreSQL z 'ANY' nie działa

  4. GIS:PostGIS/PostgreSQL vs. MySql vs. SQL Server?

  5. Niewrażliwe na wielkość liter unikalne pola modelu w Django?