В PostgreSQL всичко е изградено около концепцията зароля .
Когато за първи път инсталира PostgreSQL на macOS, скриптът създаде роля с вашето потребителско име за macOS , със списък с предоставени разрешения.
В PostgreSQL няма потребители, само роли .
Като стартирате psql postgres
във вашия терминал, вие автоматично ще влезете с вашето потребителско име за macOS в PostgreSQL, като по този начин ще получите достъп до създадената роля.
В моя случай flaviocopes
ролята беше създадена и мога да я видя с помощта на \du
команда:
Виждаш ли? Имам следните атрибути на роли по подразбиране:
Superuser
Create role
Create DB
Replication
Bypass RLS
и не съм член на друга роля (повече за това по-късно)
Създаване на нова роля
Създава се нова роля с помощта на CREATE ROLE
команда:
CREATE ROLE <role>;
Например:
CREATE ROLE testing;
Получихме нова роля с Cannot login
атрибут на ролята. Новосъздаденият ни потребител няма да може да влезе.
Можете да опитате, като напишете \q
команда и след това psql postgres -U testing
, но ще видите тази грешка:
За да решим този проблем, трябва да добавим LOGIN
атрибут на ролята при създаване:
CREATE ROLE <role> WITH LOGIN;
Ако премахнем тази роля с помощта на:
DROP ROLE <role>;
и добавете WITH LOGIN
този път:
DROP ROLE testing;
CREATE ROLE testing WITH LOGIN;
Можем да видим, че testing
Ролята може да влезе, защото нямаме Cannot login
атрибут роля този път:
Опитайте, като добавите командата \q
за да излезете и след това psql postgres -U testing
:
Забележете, че подкана променено от =#
до =>
защото нямаме Superuser
атрибут роля сега.
Добавяне на парола към роля
В предишния CREATE ROLE
команда създадохме роля без парола. Разбира се, много е важно да имате (сигурни) пароли. Можете да добавите парола, като използвате PASSWORD
ключова дума:
CREATE ROLE <role> WITH LOGIN PASSWORD '<password>';
СЪЗДАВАНЕ НА ПОТРЕБИТЕЛ
Алтернативен начин за дефиниране на роли с LOGIN
автоматично добавен атрибут (ефективно създаване на потребители, които могат да влизат) е да използвате CREATE USER
:
CREATE USER <role> PASSWORD '<password>';
Добавяне на атрибут на роля към роля
Атрибут role може да бъде добавен по-късно към роля с помощта на ALTER ROLE
команда.
Да предположим, че сме създали роля без атрибута LOGIN:
CREATE ROLE <username> PASSWORD '<password>';
Можем да го добавим с помощта на:
ALTER ROLE <role> WITH LOGIN;
Вградени атрибути на роли
Видяхме LOGIN
атрибут role вече, за да позволите на роля да влезе.
Но какви са другите вградени атрибути на ролята, които можем да използваме?
LOGIN
/NOLOGIN
:разреши (или не) влизане в PostgreSQLSUPERUSER
/NOSUPERUSER
:разреши (или не) разрешения на суперпотребител. Суперпотребител на база данни ще заобиколи други проверки за разрешения, с изключение наLOGIN
(трябва да се предостави отделно).CREATEDB
/NOCREATEDB
:разреши (или не) възможността за създаване на нови бази данниCREATEROLE
/NOCREATEROLE
:позволява (или не) възможността за създаване на нови ролиCREATEUSER
/NOCREATEUSER
:разреши (или не) възможността за създаване на нови потребителиINHERIT
/NOINHERIT
:разрешаване (или не) възможността да се направят привилегиите наследствениREPLICATION
/NOREPLICATION
:дайте (или не) разрешения за репликация (разширена тема, която няма да разглеждаме)
Групови роли
В PostgreSQL няма групи потребители.
Вместо това можете да създавате роли с определени разрешения и след това да предоставяте тези роли на други роли.
Ролите ще наследят разрешенията на ролите, предоставени им, ако тези роли имат атрибут INHERIT.
Създаване на групова роля
За да създадете групова роля, въведете
CREATE ROLE <groupname>;
Синтаксисът е същият като създаването на роля.
След като груповата роля е създадена, можете да добавите роли към груповата роля, като използвате GRANT
:
GRANT <groupname> TO <role>
Например, можем да създадем flavio
потребителска роля, групова роля „служител“ и присвоете потребителя на груповата роля:
CREATE USER flavio PASSWORD 'superSecret123$';
CREATE ROLE employee;
GRANT employee TO flavio;
Можете да премахнете роля от групова роля, като използвате:
REVOKE <groupname> FROM <username>
Пример:
REVOKE employee FROM flavio;
Атрибути на групови роли
По подразбиране добавянето на роля към групова роля не направете ролята да наследява атрибути (разрешения) от ролята на групата.
Трябва да създадете груповата роля с INHERIT
атрибут.
Да предположим, че създавате ролята на групата на служителите и й задавате CREATEDB
атрибут:
CREATE ROLE employee WITH CREATEDB INHERIT;
Сега създайте нова роля с помощта на INHERIT
:
CREATE ROLE flavio;
GRANT employee TO flavio;