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

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

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

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

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

Users and privileges

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

Users and roles

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

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

См. также:

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

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

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

Привилегии

В 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-команд для управления привилегиями приведена в справочнике терминов и команд SQL

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

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

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

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;

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

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

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

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

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;

Роли

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

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

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

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

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

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

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

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

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

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

Для первых двух методов действуют требования. Для метода ldap пароль не требуется и игнорируется.

Создание

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

Пример:

CREATE USER alice WITH PASSWORD 'P@ssw0rd' USING chap-sha1;
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 неуспешных попыток аутентификации в picodata connect пользователь блокируется автоматически.

Для разблокировки пользователя используйте следующую 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';

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

При установке или изменении пароля пользователя следует учитывать требования к его длине и сложности в том случае, если используются методы аутентификации chap-sha1 и md5 (для метода 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;