PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Потребителски разрешения на PostgreSQL

В 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 :разреши (или не) влизане в PostgreSQL
  • SUPERUSER / 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;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как Tand() работи в PostgreSQL

  2. Получаване на всички сгради в обхват от 5 мили от определени координати

  3. Управление на роли и атрибути на роли в PostgreSQL

  4. PostgreSQL:Показване на таблици в PostgreSQL

  5. Изчисляване на кумулативна сума в PostgreSQL