Управление доступом¶
В данном разделе описана ролевая модель управления доступом в Picodata и приведены примеры необходимых для ее настройки с помощью DCL-команд языка SQL.
Ролевая модель¶
Ролевая модель Picodata позволяет гибко разграничивать возможности пользователей распределенной системы. Разграничение строится на базе трех основных понятий: пользователей, привилегий и ролей. Привилегии можно назначать напрямую пользователям:
Также, привилегии могут быть назначены роли, которая, в свою очередь, может быть присвоена пользователю:
У каждого пользователя может быть одна или несколько ролей. Каждому пользователю или роли может быть назначена одна или несколько привилегий. При этом, сразу после создания новая роль не содержит привилегий: их нужно явно ей присвоить.
Пользователь, который назначает привилегию, должен сам обладать ею. Глобальные привилегии может назначать только администратор СУБД.
См. также:
Объекты доступа¶
Picodata является распределенной СУБД, и управление доступом происходит централизованно на всем кластере. Для управления доступом в Picodata используются дискреционный и ролевой методы. Объектами доступа являются:
table
– таблица БДuser
– учетная запись пользователя СУБДrole
– рольprocedure
– процедура
Доступ к объектам предоставляется на основе настраиваемого списка управления доступом (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-команды:
GRANT WRITE ON TABLE warehouse TO alice;
GRANT READ ON TABLE warehouse TO 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
:
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;