Перейти к содержанию

Управление доступом

В данном разделе описана ролевая модель управления доступом в Picodata и приведены примеры необходимых для ее настройки с помощью DCL-команд языка SQL.

Ролевая модель

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

Users and privileges

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

Users and roles

У каждого пользователя может быть одна или несколько ролей. Каждому пользователю или роли может быть назначена одна или несколько привилегий. При этом, сразу после создания новая роль не содержит привилегий: их нужно явно ей присвоить.

Пользователь, который назначает привилегию, должен сам обладать ею. Глобальные привилегии может назначать только администратор СУБД.

См. также:

Объекты доступа

Picodata является распределенной СУБД, и управление доступом происходит централизованно на всем кластере. Для управления доступом в Picodata используются дискреционный и ролевой методы. Объектами доступа являются:

Доступ к объектам предоставляется на основе настраиваемого списка управления доступом (access control list, ACL), который определяет, какими привилегиями обладает пользователь или роль.

Пользователи СУБД

При подключении к системе пользователь указывает имя учетной записи. Действия, которые пользователь может совершать в системе, определяются выданными ему привилегиями.

Каждый объект в системе (таблица, роль, учетная запись, процедура) имеет привязанного к нему владельца — пользователя СУБД. Владельцем объекта является его создатель. Он обладает неотъемлемыми полными привилегиями на этот объект.

Системные пользователи

Picodata предоставляет несколько встроенных учетных записей для системных пользователей:

  • admin — Администратор СУБД
  • pico_service — служебный пользователь, от имени которого происходит коммуникация между инстансами кластера
  • guest — неавторизованный пользователь

Примечание

Для установки пароля для служебного пользователя pico_service поместите в рабочую директорию инстанса файл .picodata-cookie, содержащий пароль. Это нужно сделать до первого запуска инстанса. См. также Безопасный запуск.

Администратор СУБД

Администратором СУБД является встроенный пользователь admin.

Администратор СУБД является суперпользователем и обладает следующими привилегиями:

  • создавать учетные записи пользователей СУБД
  • модифицировать, блокировать и удалять учетные записи пользователей СУБД
  • назначать права доступа пользователям СУБД к объектам доступа СУБД
  • управлять конфигурацией СУБД
  • создавать, подключать БД

Администратор БД

Наделить пользователя alice правами Администратора БД можно следующим набором SQL-команд:

CREATE ROLE db_admin;
GRANT READ TABLE TO db_admin;
GRANT CREATE TABLE TO db_admin;
GRANT CREATE USER TO db_admin;
GRANT CREATE ROLE TO db_admin;
GRANT CREATE PROCEDURE TO db_admin;
GRANT db_admin to alice;

Это обеспечивает наличие у администратора БД следующих прав:

  • создавать учетные записи пользователей БД
  • модифицировать, блокировать и удалять учетные записи пользователей БД
  • управлять конфигурацией БД через создание и удаление таблиц БД
  • назначать права доступа пользователям БД к таблицам БД
  • создавать резервные копии БД и восстанавливать БД из резервной копии
  • создавать, модифицировать и удалять хранимые процедуры

При создании объекта пользователь становится его владельцем и автоматически получает на него неотъемлемые полные привилегии.

Пользователь БД

Только что созданный пользователь обладает:

  • ролью public
  • привилегией login (подключение к кластеру)

Picodata позволяет наделить пользователя БД следующими правами:

  • создавать и манипулировать записями в таблицах БД
  • выполнять хранимые процедуры

Для этого используйте следующие SQL-команды:

Пример для таблицы `warehouse` и пользователя `alice`
GRANT WRITE ON TABLE warehouse TO alice;
GRANT READ ON TABLE warehouse TO alice;
Пример для процедуры `proc` и пользователя `alice`
GRANT EXECUTE ON PROCEDURE proc TO alice;

Привилегии

В Picodata определены следующие виды привилегий:

  • привилегии для работы с пользователями (CREATE USER, ALTER USER, DROP USER)
  • привилегии для работы с ролями (CREATE ROLE, DROP ROLE)
  • привилегии для работы с таблицами (CREATE TABLE, ALTER TABLE, DROP TABLE, READ TABLE, WRITE TABLE)
  • привилегии для работы с процедурами (CREATE PROCEDURE, DROP PROCEDURE, EXECUTE PROCEDURE)
  • LOGIN — право подключаться к экземпляру кластера. Автоматически выдается новым пользователям при создании.

Примечание

Привилегии на управление плагинами имеются только у Администратора СУБД.

См. также:

Таблица привилегий

В таблице ниже показаны привилегии и их возможности по отношению к объектам доступа. Привилегии показаны отдельно для объектов, созданных текущим пользователем (свои объекты) и объектов, владельцем которых является кто-то другой (чужие объекты).

Легенда

SQL-команды выделены в таблице цветом, в зависимости от их типа:

 — Data Definition Language (DDL)
 — Data Control Language (DCL)
 — Data Modification Language (DML)
 — Data Query Language (DQL)


ALTER PLUGIN доступно только для пользователя admin доступно только для пользователя admin
ALTER PROCEDURE не требуется не реализовано
ALTER SYSTEM доступно только для пользователя admin доступно только для пользователя admin
ALTER TABLE не требуется ALTER TABLE
CREATE INDEX не требуется CREATE TABLE
CREATE PLUGIN доступно только для пользователя admin доступно только для пользователя admin
CREATE PROCEDURE CREATE PROCEDURE CREATE PROCEDURE
CREATE TABLE CREATE TABLE не применимо
DROP INDEX
  • Своя таблица + свой индекс: не требуется
  • Чужая таблица + свой индекс: DROP TABLE
  • Своя таблица + чужой индекс: не требуется
  • Чужая таблица + чужой индекс: DROP TABLE
DROP PLUGIN доступно только для пользователя admin доступно только для пользователя admin
DROP PROCEDURE не требуется DROP PROCEDURE
DROP TABLE не требуется DROP TABLE
TRUNCATE TABLE не требуется WRITE TABLE
ALTER USER не требуется ALTER USER
CREATE ROLE не применимо CREATE ROLE
CREATE USER не применимо CREATE USER
DROP ROLE не требуется DROP ROLE
DROP USER не требуется DROP USER
GRANT не требуется доступно только для пользователя admin
REVOKE не требуется доступно только для пользователя admin
AUDIT POLICY доступно только для пользователя admin доступно только для пользователя admin
CALL
  • Своя таблица + своя процедура: не требуется
  • Чужая таблица + своя процедура: WRITE TABLE
  • Своя таблица + чужая процедура: EXECUTE PROCEDURE
  • Чужая таблица + чужая процедура: EXECUTE PROCEDURE + WRITE TABLE
DELETE не требуется READ TABLE + WRITE TABLE
INSERT не требуется WRITE TABLE
UPDATE не требуется READ TABLE + WRITE TABLE
SELECT не требуется READ TABLE

Роли

Роль представляет собой именованную группу привилегий, что позволяет структурировать управление доступом. Чтобы выдать или отозвать привилегию у роли, используйте команды GRANT и REVOKE.

Названия ролей public, super и replication являются зарезервированными.

Роль public автоматически назначается всем создаваемым пользователям. Наделение роли public привилегией на какой-либо объект делает его общедоступным.

Роль super является системной и используется исключительно для внутренних целей.

Роль replication зарезервирована как системная для корректной работы механизма репликации.

Начало работы

Для начала работы с пользователями, привилегиями и ролями следует подключиться к инстансу Picodata.

Управление пользователями

Методы аутентификации

При создании и модификации пользователей в Picodata поддерживаются следующие методы аутентификации:

Для методов md5, chap-sha1 и scram-sha256 действуют требования. Для метода ldap пароль не требуется и игнорируется.

Создание

Для создания пользователя используйте SQL-команду CREATE USER.

Пример:

CREATE USER alice WITH PASSWORD 'P@ssw0rd' USING md5;
CREATE USER bob USING ldap;

Для имени пользователя (и в целом для объектов в Picodata) действуют правила использования допустимых символов. Также следует учитывать требования к длине и сложности пароля.

Для выполнения команды требуется привилегия CREATE USER:

GRANT CREATE USER TO alice;

Такое право по умолчанию есть у Администратора СУБД (admin).

Модификация

Для изменения учетных данных пользователя используйте SQL-команду ALTER USER.

Для выполнения команды требуется привилегия ALTER USER на конкретную учетную запись или на все учетные записи сразу:

GRANT ALTER ON USER bob TO alice;
GRANT ALTER USER TO alice;

Привилегия ALTER USER есть по умолчанию у создателя данной учетной записи и у Администратора СУБД.

Блокирование

Для блокировки пользователя alice используйте следующую SQL-команду:

ALTER USER alice WITH NOLOGIN;

После 4 неуспешных попыток аутентификации пользователь блокируется автоматически.

Для разблокировки пользователя используйте следующую SQL-команду:

ALTER USER alice WITH LOGIN;

Для выполнения команд требуется привилегия ALTER USER — на все учетные записи или на конкретную.

По умолчанию привилегия ALTER USER есть у создателя учетной записи и у администратора СУБД.

Удаление

Для удаления пользователя alice используйте SQL-команду DROP USER:

DROP USER alice;

Для выполнения команды требуется привилегия DROP USER на конкретную учетную запись или на все учетные записи сразу:

GRANT DROP ON USER bob TO alice;
GRANT DROP USER TO alice;

Привилегия DROP USER есть по умолчанию у создателя данной учетной записи и у Администратора СУБД.

Просмотр списка пользователей

Пользователи Picodata хранятся в глобальной системной таблице _pico_user. Для просмотра всего списка используется следующая команда:

SELECT * FROM _pico_user;

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

GRANT READ ON TABLE _pico_user TO alice;

Установка и изменение пароля

Для установки или изменения пароля на T0psecret для пользователя alice используйте следующую SQL-команду:

ALTER USER "alice" WITH PASSWORD 'T0psecret';

Требования к паролю

При установке или изменении пароля пользователя следует учитывать требования к его длине и сложности в том случае, если используются методы аутентификации md5, chap-sha1 или scram-sha256 (для метода ldap пароль не требуется и игнорируется):

  • пароль должен быть не короче 8 символов
  • пароль должен одновременно содержать минимум один символ в нижнем регистре, символ в верхнем регистре и одну цифру

Пример некорректного пароля: topsecret

Пример корректного пароля: T0psecret

Использование ролей

Для создания и удаления ролей используйте команды CREATE ROLE и DROP ROLE.

Выполнение данных действий требует наличия привилегий CREATE ROLE / DROP ROLE соответственно.

Для назначения роли manager пользователю alice используйте команду GRANT:

GRANT manager TO alice;

Назначение привилегии ALTER на таблицу warehouse для роли manager:

На конкретную таблицу `warehouse`
GRANT WRITE ON TABLE warehouse TO manager;
На все таблицы
GRANT WRITE TABLE TO manager;

В подобных командах можно использовать как идентификатор роли, так и пользователя. Стоит отметить, что не все привилегии можно выдать ролям, например, привилегия SESSION не может быть выдана другой роли при помощи GRANT, а только командой ALTER USER.

Выдать или отозвать роль может только ее создатель. Исключением является администратор СУБД, который может выдать или отозвать любую роль.

Отозвать роль можно с помощью команды REVOKE:

Отзыв привилегии у роли
REVOKE WRITE ON TABLE warehouse FROM manager;
Отзыв роли у пользователя
REVOKE manager FROM alice;

Управление доступом к таблицам

Picodata позволяет задавать разрешение пользователям и процедурам выполнять следующие операции в отношении таблиц БД: создание, модификация, удаление, чтение.

Для наделения пользователя alice и созданных им процедур указанными привилегиями на таблицу warehouse используйте SQL-команды GRANT:

GRANT CREATE TABLE TO alice;
GRANT ALTER ON TABLE warehouse TO alice;
GRANT DROP ON TABLE warehouse TO alice;
GRANT READ ON TABLE warehouse TO alice;
GRANT WRITE ON TABLE warehouse TO alice;

Отозвать привилегию можно SQL-командой REVOKE. Например:

REVOKE DROP ON TABLE warehouse FROM alice;

В качестве <table_name> можно использовать имена системных таблиц — по умолчанию доступ к ним запрещен всем пользователям СУБД, кроме admin и pico_service.

Управление доступом к процедурам

Picodata позволяет задавать разрешение пользователям СУБД выполнять следующие операции в отношении процедур: создание, модификация, удаление, исполнение.

Для наделения пользователя alice указанными привилегиями для процедуры proc используйте SQL-команду GRANT:

GRANT CREATE PROCEDURE TO alice;
GRANT DROP ON PROCEDURE proc TO alice;
GRANT EXECUTE ON PROCEDURE proc TO alice;

Отозвать привилегию можно SQL-командой REVOKE. Например:

REVOKE DROP ON PROCEDURE proc FROM alice;