diff --git a/docs/api.md b/docs/api.md index 3dc7d6729600dfb87d3b0c8a9656238534b293fc..60329ec69bb18d5d1dad72416b30173b3c3f7c4b 100644 --- a/docs/api.md +++ b/docs/api.md @@ -42,7 +42,7 @@ picodata> pico.help("help") | [pico.drop_user()](#picodrop_user) | Удаление пользователÑ. | [pico.exit()](#picoexit) | Корректное завершение работы указанного инÑтанÑа. | [pico.expel()](#picoexpel) | [Контролируемый вывод](cli.md#expel) инÑтанÑа из клаÑтера. -| [pico.grant_privilege()](#picogrant_privilege) | Ðазначение права пользователю или роли. +| [pico.grant_privilege()](#picogrant_privilege) | Ðазначение привилегии пользователю или роли. | [pico.help()](#picohelp) | ДоÑтуп к вÑтроенной Ñправочной ÑиÑтеме. | [pico.instance_info()](#picoinstance_info) | Получение информации об инÑтанÑе (идентификаторы, уровни ([grade](glossary.md#grade)) и прочее). | [pico.raft_compact_log()](#picoraft_compact_log) | [КомпактизациÑ](glossary.md#raft-raft-log-compaction) raft-журнала c удалением указанного чиÑла наиболее Ñтарых запиÑей. @@ -54,7 +54,7 @@ picodata> pico.help("help") | [pico.raft_term()](#picoraft_term) | Получение номера терма (текущего или Ð´Ð»Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ð¾Ð¹ запиÑи). | [pico.raft_timeout_now()](#picoraft_timeout_now) | Ðемедленное объÑвление новых выборов в raft-группе. | [pico.raft_wait_index()](#picoraft_wait_index) | Ожидание локального Ð¿Ñ€Ð¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ð¾Ð³Ð¾ raft-индекÑа. -| [pico.revoke_privilege()](#picorevoke_privilege) | Удаление права у Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð»Ð¸ роли. +| [pico.revoke_privilege()](#picorevoke_privilege) | Удаление привилегии у Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð»Ð¸ роли. | [pico.sql()](#picosql) | Выполнение клаÑтерных SQL-запроÑов. | [pico.wait_ddl_finalize()](#picowait_ddl_finalize) | Ожидание Ð¿Ñ€Ð¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ (финализации) DDL-операции. | [pico.wait_vclock()](#picowait_vclock) | Ожидание момента, когда значение [Vclock](glossary.md#vclock-vector-clock) доÑтигнет целевого. @@ -562,12 +562,12 @@ pico.expel("i2") ### pico.grant_privilege -Ðазначает право пользователю или роли на вÑех инÑтанÑах клаÑтера. +Ðазначает привилению пользователю или роли на вÑех инÑтанÑах клаÑтера. Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ Ð³ÐµÐ½ÐµÑ€Ð¸Ñ€ÑƒÐµÑ‚ Ð´Ð»Ñ raft-журнала запиÑÑŒ, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¿Ñ€Ð¸ применении -назначает указанное право. Ð”Ð»Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¸ÑпользуетÑÑ +назначает указанную привилегию. Ð”Ð»Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¸ÑпользуетÑÑ Ñ‚Ð°Ð¹Ð¼Ð°ÑƒÑ‚. Результатом уÑпешного Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ ÑвлÑетÑÑ Ð¸Ð½Ð´ÐµÐºÑ -ÑоответÑтвующей запиÑи в raft-журнале. ЕÑли указанное право уже было -ранее назначено, то Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð¸Ð³Ð½Ð¾Ñ€Ð¸Ñ€ÑƒÐµÑ‚ÑÑ. +ÑоответÑтвующей запиÑи в raft-журнале. ЕÑли ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ð°Ñ Ð¿Ñ€Ð¸Ð²Ð¸Ð»ÐµÐ³Ð¸Ñ ÑƒÐ¶Ðµ была +ранее назначена, то Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð¸Ð³Ð½Ð¾Ñ€Ð¸Ñ€ÑƒÐµÑ‚ÑÑ. ```lua function grant_privilege(grantee, privilege, object_type, [object_name], [opts]) @@ -575,7 +575,7 @@ function grant_privilege(grantee, privilege, object_type, [object_name], [opts]) Параметры: - `grantee` (_string_), Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð»Ð¸ роли -- `privilege` (_string_), название права, варианты: `'read'` | '`write'` +- `privilege` (_string_), название привилегии, варианты: `'read'` | '`write'` `| `'execute'` | `'session' `| `'usage'` | `'create'` | `'drop'` | `'alter'` | `'reference'` | `'trigger'` | `'insert'` | `'update'` | `'delete'` - `object_type` (_string_), тип целевого объекта, варианты: `'universe'` @@ -598,22 +598,22 @@ function grant_privilege(grantee, privilege, object_type, [object_name], [opts]) Примеры:<a name="grant_pr"></a> -Выдать право на чтение таблицы 'Fruit' пользователю 'Dave': +Выдать привилегию на чтение таблицы 'Fruit' пользователю 'Dave': ```lua pico.grant_privilege('Dave', 'read', 'table', 'Fruit') ``` -Выдать пользователю 'Dave' право иÑполнÑÑ‚ÑŒ произвольный код Lua: +Выдать пользователю 'Dave' привилегию иÑполнÑÑ‚ÑŒ произвольный код Lua: ```lua pico.grant_privilege('Dave', 'execute', 'universe') ``` -Выдать пользователю 'Dave' право Ñоздавать новых пользователей: +Выдать пользователю 'Dave' привилегию Ñоздавать новых пользователей: ```lua pico.grant_privilege('Dave', 'create', 'user') ``` -Выдать право на запиÑÑŒ в таблицу 'Junk' Ð´Ð»Ñ Ñ€Ð¾Ð»Ð¸ 'Maintainer': +Выдать привилегию на запиÑÑŒ в таблицу 'Junk' Ð´Ð»Ñ Ñ€Ð¾Ð»Ð¸ 'Maintainer': ```lua pico.grant_privilege('Maintainer', 'write', 'table', 'Junk') ``` @@ -928,11 +928,11 @@ function raft_wait_index(target, timeout) ### pico.revoke_privilege -УдалÑет право Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð»Ð¸ роли на вÑех инÑтанÑах клаÑтера. Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ +УдалÑет привилегию Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð»Ð¸ роли на вÑех инÑтанÑах клаÑтера. Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ Ð³ÐµÐ½ÐµÑ€Ð¸Ñ€ÑƒÐµÑ‚ Ð´Ð»Ñ raft-журнала запиÑÑŒ, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¿Ñ€Ð¸ применении удалÑет -указанное право. Ð”Ð»Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¸ÑпользуетÑÑ Ñ‚Ð°Ð¹Ð¼Ð°ÑƒÑ‚. +указанную привилегию. Ð”Ð»Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¸ÑпользуетÑÑ Ñ‚Ð°Ð¹Ð¼Ð°ÑƒÑ‚. Результатом уÑпешного Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ ÑвлÑетÑÑ Ð¸Ð½Ð´ÐµÐºÑ ÑоответÑтвующей -запиÑи в raft-журнале. ЕÑли указанного права у Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð½ÐµÑ‚, то +запиÑи в raft-журнале. ЕÑли указанной привилегии у Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð½ÐµÑ‚, то Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð¸Ð³Ð½Ð¾Ñ€Ð¸Ñ€ÑƒÐµÑ‚ÑÑ. ```lua @@ -941,7 +941,7 @@ function revoke_privilege(grantee, privilege, object_type, [object_name], [opts] Параметры: - `grantee` (_string_), Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð»Ð¸ роли -- `privilege` (_string_), название права, варианты: `'read'` | '`write'` +- `privilege` (_string_), название привилегии, варианты: `'read'` | '`write'` `| `'execute'` | `'session' `| `'usage'` | `'create'` | `'drop'` | `'alter'` | `'reference'` | `'trigger'` | `'insert'` | `'update'` | `'delete'` - `object_type` (_string_), тип целевого объекта, варианты: `'universe'` diff --git a/docs/glossary.md b/docs/glossary.md index 22620a53ee668737a2626bdb88cf478075507834..351b4d0be5ba666a4a43579d7e45816e4ff4cef1 100644 --- a/docs/glossary.md +++ b/docs/glossary.md @@ -54,6 +54,35 @@ Библиотека Vshard вÑтроена в Picodata и ÑвлÑетÑÑ Ð½ÐµÐ¾Ñ‚ÑŠÐµÐ¼Ð»ÐµÐ¼Ð¾Ð¹ ее чаÑтью. Ð’ клиентÑких интерфейÑах Vshard желательно прÑтать за фаÑадом, но при оÑтрой необходимоÑти ничто не помешает им воÑпользоватьÑÑ. +## Ð Ð¾Ð»ÐµÐ²Ð°Ñ Ð¼Ð¾Ð´ÐµÐ»ÑŒ {: #access-control } +Ð”Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð¾Ñтупом в Picodata иÑпользуютÑÑ Ð´Ð¸Ñкреционный и ролевой методы. Ðиже приведены оÑновные понÑтиÑ, отноÑÑщиеÑÑ Ðº ролевой модели. + +### Объекты доÑтупа {: #access-objects } +Объектами доÑтупа ÑвлÑÑŽÑ‚ÑÑ: + +- `table` – [таблица](#table), ÑÐ¾Ð´ÐµÑ€Ð¶Ð°Ñ‰Ð°Ñ Ð´Ð°Ð½Ð½Ñ‹Ðµ пользователей (аналог `space` в Tarantool) +- `user` – [пользователь](#user) СУБД +- `role` – [роль](#role), Ñ‚.е. объединение пользовательÑких привилегий +<!-- - `procedure` – Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ð°Ñ Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ð° на Ñзыке SQL --> + +### Пользователь {: #user } +Пользователь ÑвлÑетÑÑ Ñубъектом доÑтупа. Он указывает Ð¸Ð¼Ñ ÑƒÑ‡ÐµÑ‚Ð½Ð¾Ð¹ запиÑи, от имени которой оÑущеÑтвлÑетÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ðµ к [инÑтанÑу](#instance) Picodata. ДейÑтвиÑ, которые пользователь может Ñовершать в ÑиÑтеме, определÑÑŽÑ‚ÑÑ Ð´Ð¾Ñтупными ему [привилегиÑми](#privilege). + +### ÐŸÑ€Ð¸Ð²Ð¸Ð»ÐµÐ³Ð¸Ñ {: #privilege } +ÐŸÑ€Ð¸Ð²Ð¸Ð»ÐµÐ³Ð¸Ñ â€“ Ñто Ñвное разрешение на выполнение указанных дейÑтвий. Ð’ Picodata определены Ñледующие виды привилегий: + +- работа Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñми: `CREATE USER`, `ALTER USER`, `DROP USER`, `SESSION` +- работа Ñ Ñ€Ð¾Ð»Ñми: `CREATE ROLE`, `DROP ROLE` +- работа Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð°Ð¼Ð¸: `CREATE TABLE`, `ALTER TABLE`, `DROP TABLE`, `READ TABLE`, `WRITE TABLE` + +### Роль Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ {: #role } +ПредÑтавлÑет Ñобой именованную группу привилегий, что позволÑет Ñтруктурировать управление доÑтупом. +Picodata Ñодержит Ñледующие вÑтроенные ÑиÑтемные роли пользователей: + +- роль `public`. ÐвтоматичеÑки назначаетÑÑ Ð²Ñем Ñоздаваемым пользователÑм. Ðаделение роли `publiÑ` привилегией автоматичеÑки наделÑет Ñтой привилегией вÑех пользователей; +- роль `super`. Имеет вÑе привилегии, как и пользователь `admin`. + + ## СущноÑти {: #essentials } Ð’ начале идет общее обозначение термина, затем в Ñкобках указан предпочтительный вариант ÑƒÐ¿Ð¾Ñ‚Ñ€ÐµÐ±Ð»ÐµÐ½Ð¸Ñ Ð² коде (без пробелов в “змеином региÑтреâ€). diff --git a/docs/images/role_model.svg b/docs/images/role_model.svg new file mode 100644 index 0000000000000000000000000000000000000000..4e95fe71fa2070e5134dc42ef6e9078f59c05a2b Binary files /dev/null and b/docs/images/role_model.svg differ diff --git a/docs/images/user_priv.svg b/docs/images/user_priv.svg new file mode 100644 index 0000000000000000000000000000000000000000..24a53cae71c7b5628c77954948e64434e0ddea4f Binary files /dev/null and b/docs/images/user_priv.svg differ diff --git a/docs/images/user_roles.svg b/docs/images/user_roles.svg new file mode 100644 index 0000000000000000000000000000000000000000..e0284546e3dcb1c87af20c91246fffd461b9f7b7 Binary files /dev/null and b/docs/images/user_roles.svg differ diff --git a/docs/index.md b/docs/index.md index c8d8960e1bf8be6b4481929720235f8f6b7d7125..070e0739be7a1122b131a1f727a8e8d5ffb30b17 100644 --- a/docs/index.md +++ b/docs/index.md @@ -23,6 +23,7 @@ Picodata — Ñто раÑÐ¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð½Ð°Ñ ÑиÑтема промышле * [Подключение и работа в конÑоли](tutorial_first_steps) * [Работа в веб-интерфейÑе](tutorial_webui) * [ÐÐ²Ñ‚Ð¾Ñ€Ð¸Ð·Ð°Ñ†Ð¸Ñ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ LDAP](auth_ldap) +* [Пользователи, привилегии и роли](tutorial_users) * [Работа Ñ Ð´Ð°Ð½Ð½Ñ‹Ð¼Ð¸ SQL](tutorial_data) ### Справочные материалы {: #references } diff --git a/docs/sql/ebnf/ACL.svg b/docs/sql/ebnf/ACL.svg new file mode 100644 index 0000000000000000000000000000000000000000..9b14c067fa8c9d7745beb8134320a84d42f26f88 Binary files /dev/null and b/docs/sql/ebnf/ACL.svg differ diff --git a/docs/sql/ebnf/Column.svg b/docs/sql/ebnf/Column.svg index ed5acea63df81784de86c3d156787d9647ad7d05..ccb4395d0d632f64fa8f612ef888ffc06ade20b3 100644 Binary files a/docs/sql/ebnf/Column.svg and b/docs/sql/ebnf/Column.svg differ diff --git a/docs/sql/ebnf/CreateRole.svg b/docs/sql/ebnf/CreateRole.svg new file mode 100644 index 0000000000000000000000000000000000000000..0906ffb0f06e4d8bd7c7ffc1c7ca765efbe413d2 Binary files /dev/null and b/docs/sql/ebnf/CreateRole.svg differ diff --git a/docs/sql/ebnf/CreateUser.svg b/docs/sql/ebnf/CreateUser.svg new file mode 100644 index 0000000000000000000000000000000000000000..130ac7fdd318e10f0c03777814b24f169acda8cd Binary files /dev/null and b/docs/sql/ebnf/CreateUser.svg differ diff --git a/docs/sql/ebnf/DropRole.svg b/docs/sql/ebnf/DropRole.svg new file mode 100644 index 0000000000000000000000000000000000000000..97ee19506871175247aff3549ab80f1b4f32b72a Binary files /dev/null and b/docs/sql/ebnf/DropRole.svg differ diff --git a/docs/sql/ebnf/DropUser.svg b/docs/sql/ebnf/DropUser.svg new file mode 100644 index 0000000000000000000000000000000000000000..2ec32aac8a7c5761ab87695e07c63a7f6f6ac59c Binary files /dev/null and b/docs/sql/ebnf/DropUser.svg differ diff --git a/docs/sql/ebnf/STATEMENT.svg b/docs/sql/ebnf/STATEMENT.svg index 054563441f9cd4b6f65f96052d424f2ff8f967af..ce77f51220a4b62bbc96c7460b0e2656f3bf8bf2 100644 Binary files a/docs/sql/ebnf/STATEMENT.svg and b/docs/sql/ebnf/STATEMENT.svg differ diff --git a/docs/sql/queries.md b/docs/sql/queries.md index 9429a5a05c25cfb1d93b67630bcb5e4b51652302..7cc9cbc852af40d903104a71b0aaca8c94fb3eac 100644 --- a/docs/sql/queries.md +++ b/docs/sql/queries.md @@ -12,6 +12,7 @@ Picodata при работе Ñ Ñ€Ð°Ñпределенной СУБД. Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… в таблицы и [`DELETE`](#delete) Ð´Ð»Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ…; - Data Query Language (`DQL`): команда [`SELECT`](#select) Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… из таблиц; +- Access Control Lists (`ACL`): команды Ð´Ð»Ñ [ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñми](#users) и ролÑми; - команда [`EXPLAIN`](#explain) Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð»Ð°Ð½Ð¾Ð² запроÑов `DML` и `DQL`. @@ -89,6 +90,37 @@ pico.sql([[select * from "characters"]], {}) примеров иÑпользуетÑÑ Ñзык конÑоли SQL кроме тех Ñлучаев, когда иÑпользование ввода на Lua предпочтительнее. +## Управление пользователÑми {: #users } +Ðиже показаны Ñхемы Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¸ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÐµÐ¹ и ролей. + +### **Access control lists** {: #ACL } +![ACL](ebnf/ACL.svg) + +### **Create user** {: #CreateUser } +![Create user](ebnf/CreateUser.svg) + +### **Drop user** {: #DropUser } +![Drop user](ebnf/DropUser.svg) + +### **Create role** {: #CreateRole } +![Create role](ebnf/CreateRole.svg) + +### **Drop role** {: #DropRole } +![Drop role](ebnf/DropRole.svg) + +Пример команды Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ: + +```sql +create user andy with password 'P@ssw0rd' using md5 option (timeout = 3.0) +``` + +Удаление пользователÑ: + +```sql +drop user andy +``` +См. [подробнее](../tutorial_users.md) об управлении пользователÑми. + ## Создание таблицы {: #create_table } Схема запроÑа Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÑˆÐ°Ñ€Ð´Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ð¾Ð¹ таблицы показана ниже. diff --git a/docs/tutorial_data.md b/docs/tutorial_data.md index 87e56781aa0e7b9ad0787eeb7ae8844049721564..2d6d028d190355645ac7e5576504a6108ca07b09 100644 --- a/docs/tutorial_data.md +++ b/docs/tutorial_data.md @@ -3,15 +3,17 @@ Picodata Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Ñзыка [SQL-запроÑов](sql/queries.md). ## Создание таблицы {: #creating-table } -ПоÑле [подключениÑ](tutorial_first_steps.md#accessing-console) к -инÑтанÑу клаÑтера, в интерактивной конÑоли Picodata можно выполнÑÑ‚ÑŒ -SQL-запроÑÑ‹. Ð”Ð»Ñ Ñтого можно иÑпользовать как напрÑмую Ñзык SQL, так и -SQL-запроÑÑ‹, обернутые в ÑинтакÑÐ¸Ñ Lua. Переключение Ñзыков ввода и -оÑобенноÑти ÑоÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´ опиÑаны в разделе [Команды -SQL](sql/queries.md#available_langs). ПользователÑм доÑтупны функции Ð´Ð»Ñ -работы как Ñ Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ñ‹Ð¼Ð¸, так и шардированными таблицами (в поÑледнем -Ñлучае реализованы возможноÑти [раÑпределенного -SQL](sql/broadcasted_sql.md)). + +Ð”Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹ в Picodata Ñледует Ñначала +[подключитьÑÑ](tutorial_first_steps.md#accessing-console) к +интерактивной конÑоли инÑтанÑа. Ð”Ð»Ñ Ð²Ð²Ð¾Ð´Ð° команд можно иÑпользовать +как формат Lua, так и Ñзык SQL напрÑмую, в завиÑимоÑти от +[выбранного](sql/queries.md#available_langs) Ñзыка конÑоли. Ð’ примерах +ниже иÑпользован формат Lua. + +ПользователÑм доÑтупны функции Ð´Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ как Ñ Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ñ‹Ð¼Ð¸, так и +шардированными таблицами (в поÑледнем Ñлучае реализованы возможноÑти +[раÑпределенного SQL](sql/broadcasted_sql.md)). Ð”Ð»Ñ Ð¿Ñ€Ð¸Ð¼ÐµÑ€Ð° Ñоздадим шаблон ÑпиÑка друзей Свинки Пеппы, котором будет два полÑ: идентификатор запиÑи и Ð¸Ð¼Ñ Ð´Ñ€ÑƒÐ³Ð°: diff --git a/docs/tutorial_first_steps.md b/docs/tutorial_first_steps.md index 2a6c5f18980b84867cc8e1355d383cc1a31e9fec..1bbd55f9fa71e0b491bb886d40c525d2255157ab 100644 --- a/docs/tutorial_first_steps.md +++ b/docs/tutorial_first_steps.md @@ -3,22 +3,31 @@ запущенному ÑкземплÑру Picodata и начать работу в конÑоли. -## ДоÑтуп к конÑоли при запуÑке Picodata {: #accessing-console } +## Методы Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ {: #connection-methods } +### Подключение при запуÑке Picodata {: #accessing-console } По умолчанию команда `picodata run` запуÑкает инÑтанÑ, но не предоÑтавлÑет доÑтуп к управлению им в конÑоли. Ð”Ð»Ñ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ðº -интерактивной Lua-конÑоли Ñледует либо запуÑкать инÑÑ‚Ð°Ð½Ñ Ñ ÐºÐ»ÑŽÑ‡Ð¾Ð¼ `-i` -(`picodata run -i`), +интерактивной Lua-конÑоли Ñледует запуÑкать инÑÑ‚Ð°Ð½Ñ Ñ ÐºÐ»ÑŽÑ‡Ð¾Ð¼ `-i` +(`picodata run -i`). Ð’ÑÑ‚Ñ€Ð¾ÐµÐ½Ð½Ð°Ñ ÐºÐ¾Ð½Ñоль предоÑтавлÑет привилегии ÑƒÑ€Ð¾Ð²Ð½Ñ +админиÑтратора СУБД (`admin`) и разрешает вÑе дейÑÑ‚Ð²Ð¸Ñ Ð² рамках +локальной конÑоли. При Ñтом, Ð¿Ñ€Ð¸Ð²Ð¸Ð»ÐµÐ³Ð¸Ñ `SESSION`, позволÑÑŽÑ‰Ð°Ñ +подключатьÑÑ Ðº удаленным инÑтанÑам по Ñети, у локального админиÑтратора +отÑутÑтвует. Подробнее Ñм. в разделе [Пользователи, привилегии и +роли](tutorial_users.md). -## Подключение к ранее запущенному ÑкземплÑру -### Подключение Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ адреÑа ÑкземплÑра +## Подключение к ранее запущенному ÑкземплÑру {: #accessing-running-instace } +### Подключение Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ адреÑа ÑкземплÑра {: #picodata-connect } ``` picodata connect localhost:3301 ``` -По умолчанию, подключение производитÑÑ Ð¿Ð¾Ð´ пользователем `guest` без паролÑ. +По умолчанию, [подключение](cli.md#connect-command) производитÑÑ Ð¿Ð¾Ð´ +пользователем `guest` без паролÑ. У такого Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð¼ÐµÐµÑ‚ÑÑ +единÑÑ‚Ð²ÐµÐ½Ð½Ð°Ñ Ð¿Ñ€Ð¸Ð²Ð¸Ð»ÐµÐ³Ð¸Ñ +[`SESSION`](tutorial_users.md#available-privileges). -### Подключение Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Ñокета +### Подключение Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Ñокета {: #picodata-console-sock } Ð”Ð»Ñ Ñтого ÑкземплÑÑ€ должен быть запущен Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð¸ÐµÐ¼ такого Ñокета: ``` picodata run --console-sock /tmp/file.socket @@ -29,12 +38,10 @@ picodata run --console-sock /tmp/file.socket picodata connect --unix /tmp/file.socket ``` -Ð’ данном Ñлучае откроетÑÑ Ð°Ð´Ð¼Ð¸Ð½Ð¸ÑÑ‚Ñ€Ð°Ñ‚Ð¸Ð²Ð½Ð°Ñ ÐºÐ¾Ð½Ñоль (подключение Ñ Ð¿Ñ€Ð°Ð²Ð°Ð¼Ð¸ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ `admin`). +Ð’ данном Ñлучае откроетÑÑ Ð°Ð´Ð¼Ð¸Ð½Ð¸ÑÑ‚Ñ€Ð°Ñ‚Ð¸Ð²Ð½Ð°Ñ ÐºÐ¾Ð½Ñоль (подключение Ñ +правами Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ `admin`). - -`picodata connect` (Ñм. [подробнее](cli.md#connect-command)). - -## Переключение Ñзыка конÑоли +## Переключение Ñзыка конÑоли {: #switching-console-input-lang } По умолчанию иÑпользуетÑÑ ÑинтакÑÐ¸Ñ Lua. Ð”Ð»Ñ Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð½Ð° Ñзык SQL: ``` \set language sql @@ -52,6 +59,7 @@ picodata connect --unix /tmp/file.socket Параметры запуÑка из командной Ñтроки опиÑаны в разделе [Ðргументы командной Ñтроки Picodata](../cli). + --- [ИÑходный код Ñтраницы](https://git.picodata.io/picodata/picodata/docs/-/blob/main/docs/tutorial_first_steps.md) diff --git a/docs/tutorial_users.md b/docs/tutorial_users.md new file mode 100644 index 0000000000000000000000000000000000000000..3774d6eb35183bfbfcc5fbe58cd155591572a6b8 --- /dev/null +++ b/docs/tutorial_users.md @@ -0,0 +1,158 @@ +# Пользователи, привилегии и роли +Ð’ данном разделе опиÑаны [SQL-команды](sql/queries.md) Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ +доÑтупом Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ ролевой модели в Picodata. + +## Ð Ð¾Ð»ÐµÐ²Ð°Ñ Ð¼Ð¾Ð´ÐµÐ»ÑŒ {: #role-model } +Ð Ð¾Ð»ÐµÐ²Ð°Ñ Ð¼Ð¾Ð´ÐµÐ»ÑŒ Picodata позволÑет гибко разграничивать возможноÑти +пользователей раÑпределенной ÑиÑтемы. Разграничение ÑтроитÑÑ Ð½Ð° базе +трех оÑновных понÑтий: [пользователей](glossary.md#user), +[привилегий](glossary.md#privilege) и [ролей](glossary.md#role). +Привилегии можно назначать напрÑмую пользователÑм: + +![Users and privileges](images/user_priv.svg) + +Также, привилегии могут быть назначены роли, котораÑ, в Ñвою очередь, +может быть приÑвоена пользователю: + +![Users and roles](images/user_roles.svg) + +У каждого Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¼Ð¾Ð¶ÐµÑ‚ быть одна или неÑколько ролей. Каждому +пользователю или роли может быть назначена одна или неÑколько +привилегий. Помимо пользователей и ролей, привилегии могут быть +назначены и [другим объектам](#objects). + +## Ðачало работы {: #getting-started } +Ð”Ð»Ñ Ð½Ð°Ñ‡Ð°Ð»Ð° работы Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñми, привилегиÑми и ролÑми иÑледует +[подключитьÑÑ](tutorial_first_steps.md#accessing-console) к +интерактивной конÑоли инÑтанÑа Picodata. Ð”Ð»Ñ Ð²Ð²Ð¾Ð´Ð° команд можно +иÑпользовать как формат Lua, так и Ñзык SQL напрÑмую, в завиÑимоÑти от +[выбранного](sql/queries.md#available_langs) Ñзыка конÑоли. Ð’ примерах +ниже иÑпользован Ñзык SQL. + +## Создание Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ {: #creating-user } +Создание нового Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¿Ñ€Ð¾Ð¸Ñходит Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ SQL-команды `create +user`, функциональноÑÑ‚ÑŒ которой аналогична Lua-функции +[`pico.create_user()`](api.md#picocreate_user). + +Приведем пример ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ пользователÑ: + +```sql +pico.sql([[ + create user peppa + with password 'P@ssw0rd' + using md5 + option (timeout = 3.0) +]]) +``` + +Команда ÑоÑтоит из Ñледующих Ñлементов: + +- обÑзательные `Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ` и `пароль` (без ÑÐºÑ€Ð°Ð½Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñимволов, в одинарных кавычках); +- обÑзательный метод аутентификации (`'chap-sha1'` | `'md5'` | `'ldap'`); +- опциональный таймаут перед возвращением ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŽ. + +При иÑпользовании методов аутентификации `chap-sha1` и `md5` требуетÑÑ Ð¸Ñпользовать пароль не короче 8 +Ñимволов, Ð´Ð»Ñ Ð¼ÐµÑ‚Ð¾Ð´Ð° `ldap` длина Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð½Ðµ проверÑетÑÑ. + +## Удаление Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ {: #dropping-user } +Удаление Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ñ Ð¸Ð·Ð²ÐµÑтным именем: + +```sql +pico.sql([[ + drop user peppa +]]) +``` + +## Создание роли {: #creating-role } + +Создание новой роли проиÑходит Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ SQL-команды `create +role`, функциональноÑÑ‚ÑŒ которой аналогична Lua-функции +[`pico.create_role()`](api.md#picocreate_role). + +Приведем пример ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð¹ роли: + +```sql +pico.sql([[ + create role reader + option (timeout = 3.0) +]]) +``` + +## Удаление роли {: #dropping-role } + +Удаление роли Ñ Ð¸Ð·Ð²ÐµÑтным именем: + +```sql +pico.sql([[ + drop role reader +]]) +``` +## Управление привилегиÑми {: #managing-privileges } +### Ðазначение и ÑнÑтие привилегий {: #grant-and-revoke } +Ð’ Picodata предуÑмотрены две SQL-команды Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸Ð²Ð¸Ð»ÐµÐ³Ð¸Ñми: + +- `GRANT` Ð´Ð»Ñ Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸Ð²Ð¸Ð»ÐµÐ³Ð¸Ð¸ пользователю или роли +- `REVOKE` Ð´Ð»Ñ Ð¸Ð·ÑŠÑÑ‚Ð¸Ñ Ð¿Ñ€Ð¸Ð²Ð¸Ð»ÐµÐ³Ð¸Ð¸ у Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð»Ð¸ роли + +### ДоÑтупные привилегии {: #available-privileges } +ДоÑтупные привилегии можно уÑловно разделить на три группы: + +Работа Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñми: + +- `CREATE` — Ñоздание Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ +- `ALTER` — изменение Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ +- `DROP` — удаление Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ +- `SESSION` — подключение к Picodata по Ñети + +Работа Ñ Ñ€Ð¾Ð»Ñми: + +- `CREATE` — Ñоздание роли +- `DROP` — удаление роли + +Работа Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð°Ð¼Ð¸: + +- `CREATE` — Ñоздание таблицы +- `ALTER` — изменение таблицы +- `DROP` — удаление таблицы +- `READ` — чтение данных из таблицы +- `WRITE` — запиÑÑŒ данных в таблицу + +### Объекты привилегий {: #target-objects } +Привилегии иогут быть применены к Ñледующим целевым ÑущноÑÑ‚Ñм: <a +name="objects"></a> + +- `TABLE` — таблица +- `ROLE` — роль +- `USER` — пользователь + +<!-- +### Примеры команд {: #cli-examples } +Ðаделение Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¿Ñ€Ð°Ð²Ð¾Ð¼ запиÑи в таблицу: +```sql +pico.sql([[ + grant write on "friends_of_peppa" to "peppa" + ]]) +``` + +Создание роли, наделение её правом запиÑи в таблицу, приÑваивание роли пользователю: +```sql +pico.sql([[ + create role "swine_admin" + grant write on "friends_of_peppa" to "swine_admin" + grant "swine_admin" to "peppa" + ]]) +``` + +ИзъÑтие привилегии у роли: +```sql +pico.sql([[ + revoke write on "friends_of_peppa" from "swine_admin" + ]]) +``` --> + + +См. также [`pico.grant_privilege`](api.md#picogrant_privilege) и [`pico.revoke_privilege`](api.md#picorevoke_privilege) + +--- +[ИÑходный код Ñтраницы](https://git.picodata.io/picodata/picodata/docs/-/blob/main/docs/tutorial_users.md) + diff --git a/mkdocs.yml b/mkdocs.yml index 9ad5cb71009fe36c0fc2f475b7dffc78c3c318cd..1920062d66fe3d84f435e9eac522fa5abaf86974 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -16,6 +16,7 @@ nav: - tutorial_first_steps.md - tutorial_webui.md - auth_ldap.md + - tutorial_users.md - tutorial_data.md - Справочные материалы: - cli.md