diff --git a/docs/overview/glossary.md b/docs/overview/glossary.md index e966f759a1c6b6ae27c7a3a268e59693b7f4436c..557560301ed298b65109e4028a0fdfacf894150f 100644 --- a/docs/overview/glossary.md +++ b/docs/overview/glossary.md @@ -55,8 +55,11 @@ Ð’ клиентÑких интерфейÑах Vshard желательно прÑтать за фаÑадом, но при оÑтрой необходимоÑти ничто не помешает им воÑпользоватьÑÑ. ## Ð Ð¾Ð»ÐµÐ²Ð°Ñ Ð¼Ð¾Ð´ÐµÐ»ÑŒ {: #access-control } + Ð”Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð¾Ñтупом в Picodata иÑпользуютÑÑ Ð´Ð¸Ñкреционный и ролевой методы. Ðиже приведены оÑновные понÑтиÑ, отноÑÑщиеÑÑ Ðº ролевой модели. +См. [Управление доÑтупом](../tutorial/access_control.md) + ### Объекты доÑтупа {: #access-objects } Объектами доÑтупа ÑвлÑÑŽÑ‚ÑÑ: @@ -82,7 +85,6 @@ Picodata Ñодержит Ñледующие вÑтроенные ÑиÑтемн - роль `public`. ÐвтоматичеÑки назначаетÑÑ Ð²Ñем Ñоздаваемым пользователÑм. Ðаделение роли `publiÑ` привилегией автоматичеÑки наделÑет Ñтой привилегией вÑех пользователей; - роль `super`. Имеет вÑе привилегии, как и пользователь `admin`. - ## СущноÑти {: #essentials } Ð’ начале идет общее обозначение термина, затем в Ñкобках указан предпочтительный вариант ÑƒÐ¿Ð¾Ñ‚Ñ€ÐµÐ±Ð»ÐµÐ½Ð¸Ñ Ð² коде (без пробелов в “змеином региÑтреâ€). diff --git a/docs/tutorial/access_control.md b/docs/tutorial/access_control.md index 0c488864502e2274db18e84b7f9149c42d3a2616..760766cb0e4200a10c41cf40e1f502cee8e5dd95 100644 --- a/docs/tutorial/access_control.md +++ b/docs/tutorial/access_control.md @@ -1,13 +1,15 @@ # Управление доÑтупом -Ð’ данном разделе опиÑаны [SQL-команды](../reference/sql_queries.md) Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ -доÑтупом Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ ролевой модели в Picodata. -## Ð Ð¾Ð»ÐµÐ²Ð°Ñ Ð¼Ð¾Ð´ÐµÐ»ÑŒ {: #role-model } +Ð’ данном разделе опиÑана Ñ€Ð¾Ð»ÐµÐ²Ð°Ñ Ð¼Ð¾Ð´ÐµÐ»ÑŒ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð¾Ñтупом в Picodata и +приведены примеры необходимых Ð´Ð»Ñ ÐµÐµ наÑтройки SQL-команд. + +## Ð Ð¾Ð»ÐµÐ²Ð°Ñ Ð¼Ð¾Ð´ÐµÐ»ÑŒ {: #role_model } + Ð Ð¾Ð»ÐµÐ²Ð°Ñ Ð¼Ð¾Ð´ÐµÐ»ÑŒ Picodata позволÑет гибко разграничивать возможноÑти пользователей раÑпределенной ÑиÑтемы. Разграничение ÑтроитÑÑ Ð½Ð° базе -трех оÑновных понÑтий: [пользователей](../overview/glossary.md#user), -[привилегий](../overview/glossary.md#privilege) и [ролей](../overview/glossary.md#role). -Привилегии можно назначать напрÑмую пользователÑм: +трех оÑновных понÑтий: [пользователей](#users), +[привилегий](#privileges) и [ролей](#roles). Привилегии можно назначать +напрÑмую пользователÑм:  @@ -18,136 +20,398 @@ У каждого Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¼Ð¾Ð¶ÐµÑ‚ быть одна или неÑколько ролей. Каждому пользователю или роли может быть назначена одна или неÑколько -привилегий. СпиÑок объектов, которым могут быть назначены привелении, [приведен ниже](#objects). +привилегий. При Ñтом, Ñразу поÑле ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð½Ð¾Ð²Ð°Ñ Ñ€Ð¾Ð»ÑŒ не Ñодержит +привилегий: их нужно Ñвно ей приÑвоить. + +Пользователь, который назначает привилегию, должен Ñам обладать ею. +Глобальные привилегии может назначать только [админиÑтратор СУБД](#admin). + +### Объекты доÑтупа {: #access_objects } + +Picodata ÑвлÑетÑÑ Ñ€Ð°Ñпределенной СУБД, и управление доÑтупом проиÑходит +централизованно на вÑем клаÑтере. Ð”Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð¾Ñтупом в Picodata +иÑпользуютÑÑ Ð´Ð¸Ñкреционный и ролевой методы. Объектами доÑтупа ÑвлÑÑŽÑ‚ÑÑ: + +- `table` – [таблица](../overview/glossary.md#table) БД +- `user` – [пользователь](#users) СУБД +- `role` – [роль](#roles) +<!-- – `procedure` – Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ð°Ñ Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ð° на Ñзыке SQL --> + +ДоÑтуп к объектам предоÑтавлÑетÑÑ Ð½Ð° оÑнове наÑтраиваемого ÑпиÑка +ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð¾Ñтупом (access control list, ACL), который определÑет, +какими привилегиÑми обладает каждый Ñубъект (пользователь или роль). + +### Привилегии {: #privileges } + +Ð’ Picodata определены Ñледующие виды привилегий: + +- привилегии Ð´Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñми (`CREATE USER`, `ALTER USER`, + `DROP USER`, `SESSION`) +- привилегии Ð´Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Ñ Ñ€Ð¾Ð»Ñми (`CREATE ROLE`, `DROP ROLE`) +- привилегии Ð´Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð°Ð¼Ð¸ (`CREATE TABLE`, `ALTER TABLE`, + `DROP TABLE`, `READ TABLE`, `WRITE TABLE`) + +_Примечание_: + +`SESSION` — право подключатьÑÑ Ð¿Ð¾ Ñети при помощи команд `picodata +connect` и `picodata sql`. ÐвтоматичеÑки выдаетÑÑ Ð½Ð¾Ð²Ñ‹Ð¼ пользователÑм +при Ñоздании, но по умолчанию отключена Ð´Ð»Ñ [ÐдминиÑтратора СУБД](#admin) +(`admin`). Ð’ отличие от других привилегий, Ð´Ð»Ñ Ð²Ñ‹Ð´Ð°Ñ‡Ð¸ или отзыва +привилегии `SESSION` [иÑпользуетÑÑ](#alter_user) SQL-ÑинтакÑÐ¸Ñ `ALTER <user name> { +LOGIN / NOLOGIN }` + +Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ привилегиÑÑ… хранитÑÑ Ð² ÑиÑтемной таблице [_pico_privilege](../architecture/system_tables.md#_pico_privilege). + +### Пользователи {: #users } + +При подключении к ÑиÑтеме пользователь указывает Ð¸Ð¼Ñ ÑƒÑ‡ÐµÑ‚Ð½Ð¾Ð¹ запиÑи. +ДейÑтвиÑ, которые пользователь может Ñовершать в ÑиÑтеме, определÑÑŽÑ‚ÑÑ +выданными ему привилегиÑми. -## Ðачало работы {: #getting-started } -Ð”Ð»Ñ Ð½Ð°Ñ‡Ð°Ð»Ð° работы Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñми, привилегиÑми и ролÑми иÑледует -[подключитьÑÑ](connecting.md#accessing-console) к -интерактивной конÑоли инÑтанÑа Picodata. Ð”Ð»Ñ Ð²Ð²Ð¾Ð´Ð° команд можно -иÑпользовать как формат Lua, так и Ñзык SQL напрÑмую, в завиÑимоÑти от -[выбранного](../reference/sql_queries.md#available_langs) Ñзыка конÑоли. Ð’ примерах -ниже иÑпользован Ñзык SQL. +Каждый объект в ÑиÑтеме (таблица, роль, пользователь) имеет привÑзанного +к нему владельца — Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¡Ð£Ð‘Ð”. Владелец объекта автоматичеÑки +получает вÑе привилегии на Ñтот объект. -## Создание Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ {: #creating-user } -Создание нового Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¿Ñ€Ð¾Ð¸Ñходит Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ SQL-команды `create -user`, функциональноÑть которой аналогична Lua-функции -[`pico.create_user()`](../reference/api.md#picocreate_user). +Picodata предоÑтавлÑет два вÑтроенных Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ â€” `admin` и `guest`. -Приведем пример ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ пользователÑ: +#### ÐдминиÑтратор СУБД {: #admin } + +ÐдминиÑтратором СУБД ÑвлÑетÑÑ Ð²Ñтроенный пользователь `admin`. + +ÐдминиÑтратор СУБД ÑвлÑетÑÑ _Ñуперпользователем_ и обладает Ñледующими +привилегиÑми: + +- ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÑƒÑ‡ÐµÑ‚Ð½Ñ‹Ñ… запиÑей пользователей СУБД +- модифицировать, блокировать и удалÑть учетные запиÑи пользователей СУБД +- назначать права доÑтупа пользователÑм СУБД к объектам доÑтупа СУБД +- управлÑть конфигурацией СУБД +- Ñоздавать, подключать БД + +Данный набор привилегий Ñквивалентен SQL-командам: ```sql -pico.sql([[ - create user peppa - with password 'P@ssw0rd' - using md5 - option (timeout = 3.0) -]]) +GRANT CREATE TABLE TO "admin" +GRANT ALTER TABLE TO "admin" +GRANT DROP TABLE TO "admin" +GRANT READ TABLE TO "admin" +GRANT WRITE TABLE TO "admin" + +GRANT CREATE USER TO "admin" +GRANT ALTER USER TO "admin" +GRANT DROP USER TO "admin" + +GRANT CREATE ROLE TO "admin" +GRANT DROP ROLE TO "admin" ``` -Команда ÑоÑтоит из Ñледующих Ñлементов: +Однако, у него по умолчанию отÑутÑтвует Ð¿Ñ€Ð¸Ð²Ð¸Ð»ÐµÐ³Ð¸Ñ `SESSION`. +ИÑпользовать учетную запиÑÑŒ можно Ð´Ð²ÑƒÐ¼Ñ ÑпоÑобами: + +- запуÑтив инÑÑ‚Ð°Ð½Ñ Ñ [интерактивной конÑолью](../reference/cli.md#interactive) `picodata run -i` +- подключившиÑÑŒ [по Ñокету](../reference/cli.md#console-sock) `picodata connect --unix` + +#### ГоÑть {: #guest } + +Ð’Ñтроенный пользователь `guest` по умолчанию обладает минимальным +набором привилегий: у него еÑть роль [`public`](#public) и право подключатьÑÑ Ðº +ÑиÑтеме. Ðто опиÑываетÑÑ Ñледующими командами: -- обÑзательные `Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ` и `пароль` (без ÑÐºÑ€Ð°Ð½Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñимволов, в одинарных кавычках); -- обÑзательный метод аутентификации (`'chap-sha1'` | `'md5'` | `'ldap'`); -- опциональный таймаут перед возвращением ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŽ. +- `GRANT ROLE "public" TO "guest"` +- `ALTER USER "guest" LOGIN` -При иÑпользовании методов аутентификации `chap-sha1` и `md5` требуетÑÑ Ð¸Ñпользовать пароль не короче 8 -Ñимволов, Ð´Ð»Ñ Ð¼ÐµÑ‚Ð¾Ð´Ð° `ldap` длина Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð½Ðµ проверÑетÑÑ. +#### ÐдминиÑтратор БД {: #db_admin } -## Удаление Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ {: #dropping-user } -Удаление Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ñ Ð¸Ð·Ð²ÐµÑтным именем: +Ðаделить Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¿Ñ€Ð°Ð²Ð°Ð¼Ð¸ ÐдминиÑтратора БД можно набором SQL-команд: ```sql -pico.sql([[ - drop user peppa -]]) +GRANT CREATE TABLE TO <grantee> +GRANT CREATE USER TO <grantee> +GRANT CREATE ROLE TO <grantee> ``` -## Создание роли {: #creating-role } +Ðто обеÑпечивает наличие у админиÑтратора БД Ñледующих прав: -Создание новой роли проиÑходит Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ SQL-команды `create -role`, функциональноÑть которой аналогична Lua-функции -[`pico.create_role()`](../reference/api.md#picocreate_role). +- Ñоздавать учетные запиÑи пользователей БД +- модифицировать, блокировать и удалÑть учетные запиÑи пользователей БД +- управлÑть конфигурацией БД +- назначать права доÑтупа пользователÑм БД к объектам доÑтупа БД +- Ñоздавать резервные копии БД и воÑÑтанавливать БД из резервной копии -Приведем пример ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð¹ роли: +При Ñоздании объекта пользователь ÑтановитÑÑ ÐµÐ³Ð¾ владельцем и +автоматичеÑки получает на него Ñледующие права (в завиÑимоÑти от типа +объекта): ```sql -pico.sql([[ - create role reader - option (timeout = 3.0) -]]) +-- CREATE TABLE <table name> ... +GRANT ALTER ON TABLE <table name> TO <owner> +GRANT DROP ON TABLE <table name> TO <owner> +GRANT READ ON TABLE <table name> TO <owner> +GRANT WRITE ON TABLE <table name> TO <owner> + +-- CREATE USER <user name> +GRANT ALTER ON USER <user name> TO <owner> +GRANT DROP ON USER <user name> TO <owner> + +-- CREATE ROLE <role name> +GRANT DROP ON ROLE <role name> TO <owner> ``` -## Удаление роли {: #dropping-role } +### Роли {: #roles } -Удаление роли Ñ Ð¸Ð·Ð²ÐµÑтным именем: +Роль предÑтавлÑет Ñобой именованную группу привилегий, что позволÑет +Ñтруктурировать управление доÑтупом. Добавление привилегий в роль +производитÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹ `GRANT`, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð½Ð°Ð´ÐµÐ»Ñет роль +привилегией. Кроме того, роли могут быть вложенными друг в друга. +Пример: ```sql -pico.sql([[ - drop role reader -]]) +GRANT [ ROLE ] <role name> TO <role name> ``` -## Управление привилегиÑми {: #managing-privileges } -### Ðазначение и ÑнÑтие привилегий {: #grant-and-revoke } -Ð’ Picodata предуÑмотрены две SQL-команды Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸Ð²Ð¸Ð»ÐµÐ³Ð¸Ñми: -- `GRANT` Ð´Ð»Ñ Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸Ð²Ð¸Ð»ÐµÐ³Ð¸Ð¸ пользователю или роли -- `REVOKE` Ð´Ð»Ñ Ð¸Ð·ÑŠÑÑ‚Ð¸Ñ Ð¿Ñ€Ð¸Ð²Ð¸Ð»ÐµÐ³Ð¸Ð¸ у Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð»Ð¸ роли +Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ ролÑÑ… хранитÑÑ ÑиÑтемной таблице `_pico_role`. Ð”Ð°Ð½Ð½Ð°Ñ +таблица имеет Ñледующую Ñтруктуру: -### ДоÑтупные привилегии {: #available-privileges } -ДоÑтупные привилегии можно уÑловно разделить на три группы: +- `id` – уникальный идентификатор роли +- `name` – Ð¸Ð¼Ñ Ñ€Ð¾Ð»Ð¸ +- `owner_id` – идентификатор владельца -Работа Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñми: +#### Ð’Ñтроенные роли {: #builtin_roles } +Помимо Ñоздаваемых пользователÑми ролей, Picodata предоÑтавлÑет +Ñледующие ÑиÑтемные роли: -- `CREATE` — Ñоздание Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ -- `ALTER` — изменение Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ -- `DROP` — удаление Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ -- `SESSION` — подключение к Picodata по Ñети +##### public -Работа Ñ Ñ€Ð¾Ð»Ñми: +Роль `public` автоматичеÑки назначаетÑÑ Ð²Ñем Ñоздаваемым +пользователÑм. Ðаделение роли `publiÑ` привилегией на какой-либо объект +делает Ñтот объект общедоÑтупным. -- `CREATE` — Ñоздание роли -- `DROP` — удаление роли +##### super +Роль `super` имеет вÑе привилегии, доÑтупные пользователю [`admin`](#admin). -Работа Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð°Ð¼Ð¸: -- `CREATE` — Ñоздание таблицы -- `ALTER` — изменение таблицы -- `DROP` — удаление таблицы -- `READ` — чтение данных из таблицы -- `WRITE` — запиÑÑŒ данных в таблицу +## Ðачало работы {: #getting_started } -### Объекты привилегий {: #target-objects } -Привилегии иогут быть применены к Ñледующим целевым ÑущноÑÑ‚Ñм: <a -name="objects"></a> +Ð”Ð»Ñ Ð½Ð°Ñ‡Ð°Ð»Ð° работы Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñми, привилегиÑми и ролÑми Ñледует +[подключитьÑÑ](../tutorial/connecting.md) к инÑтанÑу Picodata. -- `TABLE` — таблица -- `ROLE` — роль -- `USER` — пользователь +## Управление пользователÑми {: #user_management } + +### Создание {: #create_user } + +Ð”Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ñпользуйте SQL-команду [CREATE +USER](../reference/sql_queries.md#CreateUser): -<!-- -### Примеры команд {: #cli-examples } -Ðаделение Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¿Ñ€Ð°Ð²Ð¾Ð¼ запиÑи в таблицу: ```sql -pico.sql([[ - grant write on "friends_of_peppa" to "peppa" - ]]) +CREATE USER <user name> + [ [ WITH ] PASSWORD 'password' ] + [ USING chap-sha1 | md5 | ldap ] ``` -Создание роли, наделение её правом запиÑи в таблицу, приÑваивание роли пользователю: +Пример: + ```sql -pico.sql([[ - create role "swine_admin" - grant write on "friends_of_peppa" to "swine_admin" - grant "swine_admin" to "peppa" - ]]) +CREATE USER "alice" WITH PASSWORD 'totallysecret' USING chap-sha1 +CREATE USER "bob" USING ldap ``` -ИзъÑтие привилегии у роли: +При иÑпользовании методов аутентификации `chap-sha1` и `md5` требуетÑÑ +иÑпользовать пароль не короче 8 Ñимволов, Ð´Ð»Ñ Ð¼ÐµÑ‚Ð¾Ð´Ð° `ldap` пароль не +требуетÑÑ Ð¸ игнорируетÑÑ. + +Ð”Ð»Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹ требуетÑÑ Ð¿Ñ€Ð¸Ð²Ð¸Ð»ÐµÐ³Ð¸Ñ `CREATE USER`: + ```sql -pico.sql([[ - revoke write on "friends_of_peppa" from "swine_admin" - ]]) -``` --> +GRANT CREATE USER TO <grantee> +``` + +Такое право по умолчанию еÑть у [ÐдминиÑтратора СУБД](#admin) (`admin`). + +### Изменение {: #alter_user } + +Ð”Ð»Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑƒÑ‡ÐµÑ‚Ð½Ñ‹Ñ… данных Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ñпользуйте SQL-команду `ALTER +USER`: +<!-- (../reference/sql_queries.md#AlterUser) --> + +```sql +ALTER USER <user name> + [ LOGIN | NOLOGIN ] + [ ENABLE | DISABLE ] + [ RENAME <new name> ] + [ [ WITH ] PASSWORD <password> ] + [ USING chap-sha1 | md5 | ldap ] +``` +Возможные дейÑтвиÑ: + +- `LOGIN` / `NOLOGIN` — включение/выключение привилегии `SESSION` +- `ENABLE` / `DISABLE` — включение/выключение привилегии `USAGE` +- `RENAME` — переименование Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ +- `USING` — выбора метода аутентификации + +Пример Ð¿ÐµÑ€ÐµÐ¸Ð¼ÐµÐ½Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ: + +```sql +ALTER USER "alice" RENAME "bob" +``` + +Пример блокировки Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ (отзыва привилегий `SESSION` и `USAGE`): + +```sql +ALTER USER "alice" NOLOGIN DISABLE +``` + +Обратное дейÑтвие (разблокировка) Ñ Ð²Ð¾Ð·Ð²Ñ€Ð°Ñ‰ÐµÐ½Ð¸ÐµÐ¼ Ñтих привилегий: + +```sql +ALTER USER "alice" LOGIN ENABLE +``` + +Ð”Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ `ALTER USER` требуетÑÑ Ð¸Ð¼ÐµÑ‚ÑŒ Ñту привилегию. Ее можно выдать на конкретного +пользователÑ: + +```sql +GRANT ALTER ON USER <user name> TO <grantee> +``` + +Или на вÑех пользователей Ñразу: + +```sql +GRANT ALTER USER TO <grantee> +``` + +ÐŸÑ€Ð¸Ð²Ð¸Ð»ÐµÐ³Ð¸Ñ `ALTER USER` по умолчанию еÑть у владельца Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸ у +[ÐдминиÑтратора СУБД](#admin). + +### Удаление {: #drop_user } + +Ð”Ð»Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ðµ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ñпользуйте SQL-команду `DROP USER`: + +```sql +DROP USER <user name> +``` + +Удаление Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¿Ñ€Ð¸Ð²ÐµÐ´ÐµÑ‚ к ошибке еÑли в ÑиÑтеме еÑть объекты, +владельцем которых он ÑвлÑетÑÑ (что ÑоответÑтвует опции `RESTRICT` из +ANSI SQL). + +Ð”Ð»Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚ÑÑ Ð¿Ñ€Ð¸Ð²Ð¸Ð»ÐµÐ³Ð¸Ñ `DROP USER` на +конкретного Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð»Ð¸ на вÑех пользователей Ñразу: + +```sql +GRANT DROP ON USER <user name> TO <grantee> +GRANT DROP USER TO <grantee> +``` + +Такие еÑть по умолчанию у [ÐдминиÑтратора СУБД](#admin) и у владельца +пользователÑ. + +### ИÑпользование ролей {: #role_management } + +Ð”Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¸ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ñ€Ð¾Ð»ÐµÐ¹ иÑпользуйте Ñледующие команды: + +```sql +CREATE ROLE <role name> +DROP ROLE <role name> +``` + +Выполнение данных дейÑтвий требует Ð½Ð°Ð»Ð¸Ñ‡Ð¸Ñ Ð¿Ñ€Ð¸Ð²Ð¸Ð»ÐµÐ³Ð¸Ð¹ `CREATE ROLE` / +`DROP ROLE` ÑоответÑтвенно. + +Ð”Ð»Ñ Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ñ€Ð¾Ð»Ð¸ иÑпользуйте Ñледующую команду: + +```sql +GRANT [ ROLE ] <role name> TO <grantee> +``` + +Ðазначение привилегий роли проиÑходит при помощи команды `GRANT`: + +```sql +GRANT <action> ON <object name> TO <grantee> +``` + +Ð’ качеÑтве `grantee` может выÑтупать идентификатор как роли, так и +пользователÑ. Стоит отметить, что не вÑе привилегии можно выдать ролÑм, +например, Ð¿Ñ€Ð¸Ð²Ð¸Ð»ÐµÐ³Ð¸Ñ `SESSION` не может быть выдана другой роли при +помощи `GRANT`, а только командой [`ALTER USER`](#alter_user). + +Выдать или отозвать роль может только ее Ñоздатель. +ИÑключением ÑвлÑетÑÑ [админиÑтратор СУБД](#admin), +который может выдать или отозвать любую роль. + +Отозвать роль можно Ñледующим образом: + +```sql +REVOKE [ ROLE ] <role name> FROM <grantee> +``` + +## Управление доÑтупом к таблицам {: #tables_access } + +Ð’ Picodata доÑтупно Ñоздание и удаление таблиц. Ðад таблицами можно +Ñовершать операции Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸ запиÑи. Ð”Ð»Ñ Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ Ð´Ð¾Ñтупа к операциÑм +Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð°Ð¼Ð¸ в Picodata доÑтупны привилегии `CREATE`, `DROP`, `READ`, +`WRITE` и `ALTER`. Ð’Ñе привилегии (кроме `CREATE`) могут быть выданы на +конкретную таблицу или на вÑе таблицы Ñразу. ÐŸÑ€Ð¸Ð²Ð¸Ð»ÐµÐ³Ð¸Ñ `CREATE` может быть +выдана только глобально. + +Выдача привилегий оÑущеÑтвлÑетÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹ `GRANT`. Ðа вÑе таблицы: + +```sql +GRANT <priv> TABLE TO <grantee> +``` + +Ðа конкретную таблицу: + +```sql +GRANT <priv> ON TABLE <table name> TO <grantee> +``` + +Отозвать выданные привилегии можно при помощи команды `REVOKE`: + +```sql +REVOKE <priv> ON TABLE <table name> FROM <grantee> +``` + +## Дополнительные примеры SQL-запроÑов {: #sql_examples } + +```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 ALTER TABLE TO <grantee> // alter any table +GRANT ALTER ON TABLE <table name> TO <grantee> +GRANT ALTER USER to <grantee> +GRANT ALTER ON USER <user name> to <grantee> + +GRANT DROP TABLE TO <grantee> +GRANT DROP USER TO <grantee> +GRANT DROP ROLE TO <grantee> +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 [ ROLE ] <role name> TO <grantee> +``` +См. также: -См. также [`pico.grant_privilege`](../reference/api.md#picogrant_privilege) и [`pico.revoke_privilege`](../reference/api.md#picorevoke_privilege) +- [Ð’Ð¸ÐºÐ¸Ð¿ÐµÐ´Ð¸Ñ â€” Управление доÑтупом на оÑнове ролей](https://ru.wikipedia.org/wiki/Управление_доÑтупом_на_оÑнове_ролей){:target="_blank"} +- [Ð’Ð¸ÐºÐ¸Ð¿ÐµÐ´Ð¸Ñ â€” Избирательное управление доÑтупом](https://ru.wikipedia.org/wiki/Избирательное_управление_доÑтупом){:target="_blank"} +- [ОпиÑание ÑиÑтемных таблиц](../architecture/system_tables.md)