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 PostgreSQLSUPERUSER
/NIESUPERUSER
:zezwól (lub nie) na uprawnienia administratora. Superużytkownik bazy danych pominie inne kontrole uprawnień, z wyjątkiemLOGIN
(musi być przyznane osobno).CREATEDB
/NOCREATEDB
:zezwól (lub nie) na możliwość tworzenia nowych baz danychCREATEROLE
/NOCREATEROLE
:zezwól (lub nie) na możliwość tworzenia nowych rólCREATEUSER
/NOCREATEUSER
:zezwól (lub nie) na możliwość tworzenia nowych użytkownikówDZIEDZICZ
/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;