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

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

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

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

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

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

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

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

См. также:

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

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 — право подключаться к экземпляру кластера. Автоматически выдается новым пользователям при создании.

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

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

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

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

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

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

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

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

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

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

Наделить пользователя СУБД правами Администратора БД можно следующим набором 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 <grantee>

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

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

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

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

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

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

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

GRANT WRITE TO TABLE <table name> TO <grantee>;
GRANT READ TO TABLE <table name> TO <grantee>;
GRANT EXECUTE PROCEDURE <procedure name> TO <grantee>;

Роли

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

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

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

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

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

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

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

Создание

Для создания пользователя используйте 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 <grantee>

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

Модификация

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

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

GRANT ALTER ON USER <user name> TO <grantee>
GRANT ALTER USER TO <grantee>

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

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

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

ALTER USER "alice" WITH NOLOGIN

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

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

ALTER USER "alice" WITH LOGIN

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

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

Удаление

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

Пример:

DROP USER "alice"

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

GRANT DROP ON USER <user name> TO <grantee>
GRANT DROP USER TO <grantee>

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

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

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

SELECT * FROM "_pico_user"

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

GRANT READ ON TABLE "_pico_user" TO <grantee>

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

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

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

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

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

Примечание

Требования к паролю применимы при использовании методов аутентификации chap-sha1 и md5. Для метода ldap пароль не требуется и игнорируется.

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

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

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

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

GRANT <role name> TO <grantee>

Назначение привилегий роли:

GRANT <action> ON <object name> TO <grantee>

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

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

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

REVOKE <role name> FROM <grantee>

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

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

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

GRANT CREATE TABLE TO <grantee>
GRANT ALTER ON TABLE <table name> TO <grantee>
GRANT DROP ON TABLE <table name> TO <grantee>
GRANT READ ON TABLE <table name> TO <grantee>

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

REVOKE <priv> ON TABLE <table name> FROM <grantee>

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

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

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

GRANT CREATE PROCEDURE TO <grantee>
GRANT ALTER ON PROCEDURE <procedure name> TO <grantee>
GRANT DROP ON PROCEDURE <procedure name> TO <grantee>
GRANT EXECUTE ON PROCEDURE <procedure name> TO <grantee>

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

REVOKE <priv> ON PROCEDURE <procedure name> FROM <grantee>

Дополнительные примеры SQL-запросов

CREATE USER <user name>
    [ [ WITH ] PASSWORD 'password' ]
    [ USING chap-sha1 | md5 | ldap ]
ALTER USER <user name>
    [ [ WITH ] PASSWORD 'password' ]
    [ USING chap-sha1 | md5 | ldap ]
DROP USER <user name>

CREATE ROLE <role name>
DROP ROLE <role name>

GRANT READ ON TABLE <table name> TO <grantee>
GRANT READ TABLE TO <grantee>

GRANT WRITE TABLE TO <grantee>
GRANT WRITE ON TABLE <table name> TO <grantee>

GRANT CREATE TABLE TO <grantee>
GRANT CREATE ROLE TO <grantee>
GRANT CREATE USER TO <grantee>
GRANT CREATE PROCEDURE TO <grantee>

GRANT ALTER TABLE TO <grantee> -- alter any table
GRANT ALTER USER TO <grantee> -- alter any user
GRANT ALTER PROCEDURE TO <grantee> -- alter any procedure
GRANT ALTER ON TABLE <table name> TO <grantee>
GRANT ALTER ON USER <user name> to <grantee>
GRANT ALTER ON PROCEDURE <procedure name> TO <grantee>

GRANT DROP TABLE TO <grantee> -- drop any table
GRANT DROP USER TO <grantee> -- drop any user
GRANT DROP ROLE TO <grantee> -- drop any role
GRANT DROP PROCEDURE TO <grantee> -- drop any procedure
GRANT DROP ON TABLE <table name> TO <grantee>
GRANT DROP ON USER <user name> TO <grantee>
GRANT DROP ON ROLE <role name> TO <grantee>
GRANT DROP ON PROCEDURE <procedure name> TO <grantee>

GRANT EXECUTE ON PROCEDURE <proc name> TO <grantee>

GRANT <role name> TO <grantee>