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żytkownikUtwórz rolęUtwórz bazę danychReplikacjaPomiń 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;
