PostgreSQL: роли базы данных

Введение

Роли уровня базы данных охватывают всю базу данных в своей области разрешений. Роль можно рассматривать как пользователя базы данных или группу пользователей базы данных, в зависимости от того, как она настроена. Роли создаются пользователями (обычно администраторами) и используются для группирования привилегий (Привилегия — это право на выполнение определенного типа оператора SQL или право на доступ к объекту другого пользователя.) Или других ролей.

Оглавление

Роли базы данных

Атрибуты ролей

Членство в ролях

Роли базы данных

PostgreSQL управляет разрешениями на доступ к базе данных, используя концепцию ролей. Вы можете создать роль, используя команду CREATE ROLE SQL. CREATE ROLE добавляет новую роль в кластер базы данных PostgreSQL. Чтобы использовать эту команду, вы должны иметь привилегию CREATEROLE или быть суперпользователем базы данных.

Синтаксис:

 CREATE ROLE name [[WITH] option [...]] 

Параметры:

name : имя новой роли.

Параметр Описание
СУПЕРПОЛЬЗОВАТЕЛЬ
NOSUPERUSER
Эти параметры определяют, является ли новая роль «суперпользователем». По умолчанию используется NOSUPERUSER.
CREATEDB
NOCREATEDB
Эти параметры определяют способность роли создавать базы данных. По умолчанию используется NOCREATEDB.
CREATEROLE
NOCREATEROLE
Эти параметры определяют, будет ли разрешено создание роли новые роли (то есть выполнить CREATE ROLE). Роль с привилегией CREATEROLE также может изменять и удалять другие роли. Если не указано, по умолчанию используется NOCREATEROLE.
INHERIT
NOINHERIT
Эти параметры определяют, будет ли роль » наследует «привилегии ролей, членом которых он является. По умолчанию используется INHERIT.
LOGIN
NOLOGIN
Эти параметры определяют, разрешен ли вход для роли ; то есть, может ли роль быть назначена в качестве имени авторизации начального сеанса во время подключения клиента. NOLOGIN используется по умолчанию, за исключением случаев, когда CREATE ROLE вызывается через альтернативное написание CREATE USER.
REPLICATION
NOREPLICATION
Эти параметры определяют, разрешено ли роли инициировать потоковую репликацию или переводить систему в режим резервного копирования и выходить из него. NOREPLICATION — значение по умолчанию.
CONNECTION LIMIT connlimit Если роль может войти в систему, это указывает, сколько одновременных подключений она может делать. -1 (по умолчанию) означает отсутствие ограничений.
PASSWORD password Устанавливает пароль роли.
ШИФРОВАТЬ, НЕ ШИФРОВАТЬ Эти ключевые слова определяют, будет ли пароль храниться в зашифрованном виде в системных каталогах.
VALID UNTIL ‘timestamp’ Предложение VALID UNTIL устанавливает дату и время, после которых пароль роли больше не действителен. Если это предложение опущено, пароль будет действителен все время.
IN ROLE имя_роли В предложении IN ROLE указан один или несколько существующих ролей, к которым новая роль будет немедленно добавлена ​​в качестве нового члена.
IN GROUP имя_роли IN GROUP — это устаревшее написание IN ROLE.
ROLE имя_роли Предложение ROLE перечисляет одну или несколько существующих ролей, которые автоматически добавляются как члены новой роли.
ADMIN имя_роли Предложение ADMIN похоже на ROLE, но названные роли добавляются в новую роль С ОПЦИЕЙ ADMIN, давая им право предоставлять членство в этой роли другим.
USER role_name Предложение USER является устаревшим написанием предложение ROLE.
SYSID uid Предложение SYSID игнорируется, но принимается для обратной совместимости.

Примеры:

Создайте роль (без пароля), которая может входить в систему:

 СОЗДАТЬ РОЛЬ david LOGIN; 

Создать роль с паролем:

 СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ david С ПАРОЛЕМ 'ks839 # @ S';  

Создайте роль с паролем, который действителен до конца 2014 года. Через одну секунду в 2015 году пароль больше не действителен.

 CREATE ROLE david WITH  ПАРОЛЬ ВХОДА 'ks839 # @ S' ДЕЙСТВИТЕЛЬНО ДО '2015-01-01'; 

Создайте роль, которая может создавать базы данных и управлять ролями:

 CREATE ROLE admin  WIT  H CREATEDB CREATEROLE; 

Совместимость:

Оператор CREATE ROLE находится в стандарте SQL, но стандарт требует только синтаксиса :

 CREATE ROLE name [WITH ADMIN role_name] 

Несколько начальных администраторов, и все другие опции CREATE ROLE являются расширениями PostgreSQL.

Alter Role

Команда ALTER ROLE используется для изменения атрибутов роли PostgreSQL.

Синтаксис:

 ALTER ROLE name [[WITH] option [... ]] где вариант может быть: СУПЕРПОЛЬЗОВАТЕЛЬ |  NOSUPERUSER |  CREATEDB |  NOCREATEDB |  КРЕАТЕРОЛЬ |  НОКРЕАТЕРОЛЬ |  СОЗДАТЕЛЬ |  NOCREATEUSER |  НАСЛЕДОВАНИЕ |  NOINHERIT |  ВХОД |  НОЛОГИН |  РЕПЛИКАЦИЯ |  НОРПЛИКАЦИЯ |  ПОДКЛЮЧЕНИЕ LIMIT connlimit |  [ЗАШИФРОВАНО |  НЕШифрованный] ПАРОЛЬ 'пароль' |  ДЕЙСТВИТЕЛЬНО ДО 'timestamp'ALTER имя РОЛИ ПЕРЕИМЕНОВАТЬ НА новое_имяALTER имя РОЛИ [В БАЗЕ ДАННЫХ имя_базы_данных] УСТАНОВИТЬ параметр_конфигурации {TO |  =} {значение |  ПО УМОЛЧАНИЮ} ALTER ROLE {name |  ВСЕ} [В БАЗЕ ДАННЫХ имя_базы_данных] УСТАНОВИТЬ параметр_конфигурации ИЗ ТЕКУЩЕЙ РОЛИ {имя |  ALL} [IN DATABASE имя_базы_данных] RESET параметр_конфигурацииALTER ROLE {имя |  ALL} [IN DATABASE database_name] СБРОСИТЬ ВСЕ 

Примеры:

Изменить пароль роли:

 ALTER ROLE davide С ПАРОЛЕМ 'hu8jmn3'; 

Удалить пароль роли:

 ALTER ROLE davide WITH PASSWORD NULL; 

Измените дату истечения срока действия пароля, указав, что срок действия пароля истечет в полдень 4 мая 2015 года с использованием часового пояса, который на один час опережает UTC:

 ALTER ROLE chris VALID UNTIL 'May 4 12:00  : 00 2015 +1 '; 

Сделать пароль действительным вечно:

 ALTER ROLE fred VALID UNTIL' infinity '; 

Give роль возможность создавать другие роли и новые базы данных:

 ALTER ROLE miriam CREATEROLE CREATEDB; 

Назначьте роли нестандартное значение параметра maintenance_work_mem:

 ALTER ROLE worker_bee SET maintenance_work_mem = 100000; 

Присвойте роли нестандартное значение параметра client_min_messages, зависящее от базы данных:

 ИЗМЕНИТЬ РОЛЬ fred IN DATABASE devel SET  client_min_messages = DEBUG; 

Совместимость:

Оператор ALTER ROLE является расширением PostgreSQL.

Атрибуты роли

Роль базы данных может иметь ряд атрибутов, которые определяют ее привилегии и взаимодействуют с системой аутентификации клиента.

Имя Описание
привилегия входа

Только роли с атрибутом LOGIN могут использоваться в качестве начального имени роли для соединения с базой данных. Чтобы создать роль с правами входа в систему, используйте:

Синтаксис:

 CREATE ROLE name LOGIN; CREATE USER name; 

Примечание. CREATE USER эквивалентно CREATE ROLE, за исключением того, что CREATE USER предполагает LOGIN по умолчанию, а CREATE ROLE — нет.

Статус суперпользователя Суперпользователь базы данных обходит все проверки разрешений, кроме права входа в систему. Это опасная привилегия, и ее не следует использовать по неосторожности ; лучше всего выполнять большую часть своей работы в роли не суперпользователя.
создание базы данных Роль должна иметь явное разрешение на создание баз данных (кроме суперпользователей, так как они обходят все проверки разрешений).
создание роли Роли должно быть явно предоставлено разрешение на создание дополнительных ролей (кроме суперпользователей, поскольку это обходит все разрешения чеки).
инициирование репликации Роли должно быть явно дано разрешение на запуск потоковой репликации (за исключением суперпользователей, поскольку это обходит все разрешения чеки).
пароль Пароль имеет значение только в том случае, если метод аутентификации клиента требует, чтобы пользователь указывал пароль при подключении к базе данных .

Атрибуты роли можно изменить после создания с помощью ALTER ROLE. См. Справочные страницы для команд CREATE ROLE и ALTER ROLE.

Роль также может иметь зависящие от роли значения по умолчанию для многих параметров конфигурации времени выполнения. Например, если по какой-то причине вы хотите отключить сканирование индекса при каждом подключении, вы можете использовать:

 ALTER ROLE myname SET enable_indexscan TO off; 

Role Membership

Часто удобно группировать пользователей вместе, чтобы упростить управление привилегиями: таким образом привилегии могут быть предоставлены или отозваны для группы в целом. В PostgreSQL это делается путем создания роли, представляющей группу, а затем предоставления членства в этой роли отдельным ролям пользователей.

Чтобы настроить роль группы, сначала создайте роль:

Синтаксис:

 CREATE ROLE name; 

Обычно роль используется как группа не имеют атрибута LOGIN, хотя вы можете установить его, если хотите.

После того, как групповая роль существует, вы можете добавлять и удалять участников с помощью команд GRANT и REVOKE:

 GRANT group_role TO role1, ...; REVOKE group_role FROM role1, ...; 

Вы также можете предоставить членство другим ролям группы (поскольку на самом деле нет никакого различия между группами роли и негрупповые роли). База данных не позволит вам создавать циклические циклы членства. Кроме того, не разрешено предоставлять членство в роли для PUBLIC.

Члены групповой роли могут использовать привилегии роли двумя способами. Во-первых, каждый член группы может явно выполнить SET ROLE, чтобы временно «стать» групповой ролью. Во-вторых, роли-участники с атрибутом INHERIT автоматически используют привилегии ролей, членами которых они являются, включая любые привилегии, унаследованные этими ролями. В качестве примера предположим, что мы сделали:

 CREATE ROLE david LOGIN INHERIT; CREATE ROLE admin NOINHERIT; CREATE ROLE wheel NOINHERIT; GRANT admin TO david; GRANT wheel TO admin; 

Сразу после подключения в качестве роли Дэвида сеанс базы данных будет использовать привилегии, предоставленные непосредственно Дэвиду, плюс любые привилегии, предоставленные администратору, потому что Джо «наследует» привилегии администратора. Однако привилегии, предоставленные колесу, недоступны, потому что, хотя Джо косвенно является членом колеса, членство осуществляется через администратора, который имеет атрибут NOINHERIT.. После:

 SET ROLE admin; 

Чтобы уничтожить групповую роль, используйте DROP ROLE:

 DROP ROLE name; 

Любое членство в групповой роли автоматически аннулируется (но это не влияет на роли участников).

Оцените статью
nanomode.ru
Добавить комментарий