Управление доступом¶
В данном разделе описана ролевая модель управления доступом в 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
— право подключаться к экземпляру кластера. Автоматически выдается новым пользователям при создании.
Пользователи СУБД¶
При подключении к системе пользователь указывает имя учетной записи. Действия, которые пользователь может совершать в системе, определяются выданными ему привилегиями.
Каждый объект в системе (таблица, роль, учетная запись) имеет привязанного к нему владельца — пользователя СУБД. Владелец объекта автоматически получает все привилегии на этот объект.
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>