diff --git a/docs/architecture/system_tables.md b/docs/architecture/system_tables.md index 12be29acafa4a96b85e9adae324b97585dfe95a6..5a171814951b3fd1d98db6ae28429c84c935c1ad 100644 --- a/docs/architecture/system_tables.md +++ b/docs/architecture/system_tables.md @@ -81,6 +81,37 @@ Picodata 23.06.0-287-ga98dc6919 * `id` (unique), parts: `[table_id, id]` * `name` (unique), parts: `[table_id, name]` +### _pico_routine {: #_pico_routine } + +Содержит информацию о пользовательÑких +[хранимых процедурах](../reference/sql_queries.md#proc) Picodata. + +ПолÑ: + +* `id`: (_unsigned_) — идентификатор (тип `u32`, первичный ключ) +* `name`: (_string_) — Ð¸Ð¼Ñ (уникальный индекÑ) +* `kind`: (_string_) — тип хранимого объекта: Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð¸Ð»Ð¸ процедура +* `params`: (_array_) — таблица Ñ Ñ‚Ð¸Ð¿Ð°Ð¼Ð¸ параметров объекта, в виде `[ + {type: 'int', mode: 'in', default: 42}, {type: 'text'} ]`. +* `returns`: (_array_) — тип возвращаемого результата. Ð”Ð»Ñ Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€ Ñто + пуÑтой маÑÑив `[]`, Ð´Ð»Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¹ — маÑÑив типов в возвращаемом кортеже +* `language`: (_string_) — Ñзык тела процедуры (например, `SQL`) +* `body`: (_string_) — тело оÑновной чаÑти хранимой процедуры +* `security`: (_string_) — режим безопаÑноÑти, определÑющий, от чьего + имени будет иÑполнена процедура (`invoker` — от имени вызывающего, + `definer` — от имени Ñтороннего пользователÑ) +* `operable`: (_boolean_) — признак доÑтупноÑти процедуры (Ð´Ð»Ñ + `prepare` — _false_, Ð´Ð»Ñ `commit` — _true_) +* `schema_version`: (_unsigned_) — верÑÐ¸Ñ Ñхемы данных в Raft на момент + Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ð¾Ð¹ процедуры +* `owner`: (_unsigned_) — идентификатор владельца (ÑоздателÑ) хранимой + процедуры + +ИндекÑÑ‹: + +* `id` (unique), parts: `[id]` +* `name` (unique), parts: `[name]` + ## ОпиÑание ÑвойÑтв клаÑтера {: #cluster_properties } ### _pico_property {: #_pico_property } diff --git a/docs/images/ebnf/body.svg b/docs/images/ebnf/body.svg new file mode 100644 index 0000000000000000000000000000000000000000..132b3b9dafce002c09a665f4a8c6cc5d1b219e58 Binary files /dev/null and b/docs/images/ebnf/body.svg differ diff --git a/docs/images/ebnf/create_procedure.svg b/docs/images/ebnf/create_procedure.svg new file mode 100644 index 0000000000000000000000000000000000000000..bf3779bd46a7b51453381d5d572ddec1d6805030 Binary files /dev/null and b/docs/images/ebnf/create_procedure.svg differ diff --git a/docs/images/ebnf/ddl.svg b/docs/images/ebnf/ddl.svg index 5e9bb2ad81c492b7f1aacddf6a5470d74c5f5cc8..3069cf8472d06dedd49569d24574cdb38042adb3 100644 Binary files a/docs/images/ebnf/ddl.svg and b/docs/images/ebnf/ddl.svg differ diff --git a/docs/images/ebnf/drop_procedure.svg b/docs/images/ebnf/drop_procedure.svg new file mode 100644 index 0000000000000000000000000000000000000000..2e429469ec169061b123f0ebbe0dc035b17ef8c4 Binary files /dev/null and b/docs/images/ebnf/drop_procedure.svg differ diff --git a/docs/overview/glossary.md b/docs/overview/glossary.md index 7a43a0a169ea488f27e810d82815f96472b82368..7e84ffcbab085492fd057341e5b00d8a7de72483 100644 --- a/docs/overview/glossary.md +++ b/docs/overview/glossary.md @@ -384,18 +384,41 @@ sharding_key: Ð’ Ñтом подразделе Ñобраны Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñ‚ÐµÑ€Ð¼Ð¸Ð½Ð¾Ð², вÑтречающихÑÑ Ð¿Ñ€Ð¸ работе Ñ Ñ€Ð°Ñпределенным SQL в Picodata. -**Data Definition Language (DDL)**. Язык опиÑÐ°Ð½Ð¸Ñ Ñхемы данных. Ðабор команд Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð°Ð¼Ð¸ в SQL (Ñоздание/удаление таблиц). +### Data Definition Language (DDL) {: #ddl } -**Data Modification Language (DML)**. Язык модификации данных. Ðабор команд Ð´Ð»Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… в таблицах SQL (вÑтавка/обновление/удаление Ñтрок). +Язык опиÑÐ°Ð½Ð¸Ñ Ñхемы данных. Ðабор команд Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð°Ð¼Ð¸ в SQL (Ñоздание/удаление таблиц). -**Data Query Language (DQL)**. Язык Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… (команда `SELECT` Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… из таблиц). +### Data Modification Language (DML) {: #dml } -**Команда SQL**. Ð—Ð°Ð¿Ñ€Ð¾Ñ (и, опционально, Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿ÐµÑ€ÐµÐ´Ð°Ð²Ð°ÐµÐ¼Ñ‹Ñ… параметров) к базе данных Tarantool на Ñзыке SQL. +Язык модификации данных. Ðабор команд Ð´Ð»Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… в таблицах SQL (вÑтавка/обновление/удаление Ñтрок). -**План запроÑа**. Схема и поÑледовательноÑÑ‚ÑŒ шагов, Ñ‚Ñ€ÐµÐ±ÑƒÐµÐ¼Ð°Ñ Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿Ñ€Ð¾Ñ. План ÑтроитÑÑ Ð½Ð° узле-маршрутизаторе и иÑполнÑетÑÑ Ð²Ð¾ вÑем клаÑтере. +### Data Query Language (DQL) {: #dql } -**ПроекциÑ**. Ð¤Ð¸Ð»ÑŒÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ð¸Ð»Ð¸ Ð¼Ð¾Ð´Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ Ñтолбцов таблицы. +Язык Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… (команда `SELECT` Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… из таблиц). -**Ключ шардированиÑ**. Столбец, по которому таблица раÑпределена в клаÑтере. +### Команда SQL {: #query } -**ÐœÐ°Ñ‚ÐµÑ€Ð¸Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ…**. Один из Ñтапов иÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ñ€Ð°Ñпределенного SQL-запроÑа, при котором на отдельном узле промежуточные данные ÑохранÑÑŽÑ‚ÑÑ Ð² его памÑти. +Ð—Ð°Ð¿Ñ€Ð¾Ñ (и, опционально, Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿ÐµÑ€ÐµÐ´Ð°Ð²Ð°ÐµÐ¼Ñ‹Ñ… параметров) к базе данных Tarantool на Ñзыке SQL. + +### План запроÑа {: #execution_plan } + +Схема и поÑледовательноÑÑ‚ÑŒ шагов, Ñ‚Ñ€ÐµÐ±ÑƒÐµÐ¼Ð°Ñ Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿Ñ€Ð¾Ñ. План ÑтроитÑÑ Ð½Ð° узле-маршрутизаторе и иÑполнÑетÑÑ Ð²Ð¾ вÑем клаÑтере. + +### ÐŸÑ€Ð¾ÐµÐºÑ†Ð¸Ñ {: #projection } + +Ð¤Ð¸Ð»ÑŒÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ð¸Ð»Ð¸ Ð¼Ð¾Ð´Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ Ñтолбцов таблицы. + +### Ключ ÑˆÐ°Ñ€Ð´Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ {: #sharding_key } + +Столбец, по которому таблица раÑпределена в клаÑтере. + +### ÐœÐ°Ñ‚ÐµÑ€Ð¸Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… {: #data_materialization } + +Один из Ñтапов иÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ñ€Ð°Ñпределенного SQL-запроÑа, при котором на отдельном узле промежуточные данные ÑохранÑÑŽÑ‚ÑÑ Ð² его памÑти. + +### Ð¥Ñ€Ð°Ð½Ð¸Ð¼Ð°Ñ Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ð° {: #stored_procedure } + +ПредÑтавлÑет Ñобой набор SQL-инÑтрукций Ð´Ð»Ñ +Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ DML-операций, Ñ‚.е. Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… в таблице. Такой набор +ÑвлÑетÑÑ Ð¾Ñ‚Ð´ÐµÐ»ÑŒÐ½Ñ‹Ð¼ объектом БД и выполнÑетÑÑ ÐºÐ°Ðº единое целое. Ð’ проÑтом +виде он может ÑоÑтоÑÑ‚ÑŒ из нужной пользователю DML-команды. diff --git a/docs/reference/sql_queries.md b/docs/reference/sql_queries.md index c31a8abfe311ee025e82325afcb87bca657b681d..bd4484846f54e870d54af42b43c148047038d752 100644 --- a/docs/reference/sql_queries.md +++ b/docs/reference/sql_queries.md @@ -9,15 +9,16 @@ Picodata при работе Ñ Ñ€Ð°Ñпределенной СУБД. - Data Definition Language (`DDL`): команды Ð´Ð»Ñ [ÑозданиÑ](#create_table) и [удалениÑ](#drop_table) - [таблиц](../overview/glossary.md#table); + [таблиц](../overview/glossary.md#table), а также Ð´Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Ñ + [хранимыми процедурами](../overview/glossary.md#stored_procedure); - Data Modification Language (`DML`): команды [`INSERT`](#query_insert) Ð´Ð»Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… в таблицы, [`UPDATE`](#query_update) Ð´Ð»Ñ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… и [`DELETE`](#query_delete) Ð´Ð»Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ…; - Data Query Language (`DQL`): команда [`SELECT`](#query_select) Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… из таблиц; - Access Control Lists (`ACL`): команды Ð´Ð»Ñ [ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñми](#users) и ролÑми; -- команда [`EXPLAIN`](#query_explain) Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð»Ð°Ð½Ð¾Ð² запроÑов `DML` и - `DQL`. +- команда [`EXPLAIN`](#query_explain) Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ [планов + запроÑов](../overview/glossary.md#execution_plan) `DML` и `DQL`. Схемы Ñтих функций на верхнем уровне показаны ниже: @@ -288,6 +289,89 @@ Cхема запроÑа Ð´Ð»Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹ показана DROP TABLE "characters"; ``` +## Работа Ñ Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ñ‹Ð¼Ð¸ процедурами {: #proc } + +[Хранимые процедуры](../overview/glossary.md#stored_procedure) позволÑÑŽÑ‚ +Ñоздавать шаблоны команд Ð´Ð»Ñ Ð±Ð¾Ð»ÐµÐµ удобного Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ DML-операций. + +### **CREATE PROCEDURE** {: #create_procedure } + + + +#### **Тело процедуры** {: #body } + + + + +Ð”Ð»Ñ Ð¿Ñ€Ð¸Ð¼ÐµÑ€Ð° Ñоздадим процедуру по добавлению новых Ñтрок в таблицу `characters`: + +```sql +CREATE PROCEDURE proc1(int, text, int) +AS $$INSERT INTO "characters" VALUES($1, $2, $3)$$ +``` + +где: + +- `proc1` — название хранимой процедуры +- `int, text, int` — типы колонок +- `$1, $2, $3`— порÑдок колонок + +ПорÑдок колонок может быть произвольным, но важно, чтобы указанный тип +Ñовпадал Ñ Ñ„Ð°ÐºÑ‚Ð¸Ñ‡ÐµÑким типом в целевой таблице. Так, ÑÐ»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° +ÑоздаÑÑ‚ ту же Ñамую процедуру: + +```sql +CREATE PROCEDURE proc1(int, int, text) +AS $$INSERT INTO "characters" VALUES($1, $3, $2)$$ +``` + +NOTE: **Примечание** Пользователь может Ñоздавать и затем управлÑÑ‚ÑŒ +Ñвоими процедурами при наличии [ÑоответÑтвующей +привилегии](../tutorial/access_control.md#proc_access). + +Ð¡Ð¾Ð·Ð´Ð°Ð½Ð½Ð°Ñ Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ð° хранитÑÑ Ð² ÑиÑтемной таблице +[_pico_routine](../architecture/system_tables.md#_pico_routine). +ПоÑмотреть ее Ñтруктуру можно Ñледующей командой: + +```sql +SELECT * FROM "_pico_routine" WHERE "name" = 'PROC1'; +``` + +### Вызов процедуры {: #call_procedure } + +Созданную ранее хранимую процедуру можно иÑпользовать Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ команды +`call`, реализующей RPC-запроÑ. Пример: + +```sql +CALL proc1(11, 'Pez Cat', 2013) +``` + +При уÑловии правильного ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð² процедуры и отÑутÑÑ‚Ð²Ð¸Ñ Ð² +таблице Ñтроки Ñ `id` = 11, Ð´Ð°Ð½Ð½Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° добавит новую Ñтроку. + +<!-- +### Переименование процедуры {: #rename_proc } + +Ранее Ñозданную процедуру можно переименовать, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾Ñти `ALTER`. Пример команды: + +```sql +ALTER PROCEDURE proc1 +RENAME TO proc2 +OPTION ( timeout = 4 ) +``` +--> + +### **DROP PROCEDURE** {: #drop_procedure } + + + + +Пример ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ ÑущеÑтвующей хранимой процедуры: + +```sql +DROP PROCEDURE proc1 +``` + ## Ð—Ð°Ð¿Ñ€Ð¾Ñ SELECT {: #query_select } Ð—Ð°Ð¿Ñ€Ð¾Ñ `SELECT` иÑпользуетÑÑ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ из указанной @@ -1361,15 +1445,15 @@ WHERE "stock" > 1000; вариант Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… между узлами хранениÑ. СущеÑтвуют Ñледующие четыре варианта: -1. **Ð›Ð¾ÐºÐ°Ð»ÑŒÐ½Ð°Ñ Ð²Ñтавка**. ПредÑтавлÑет Ñобой локальную материализацию - данных Ñ Ð¿Ð¾Ð´Ñчетом значений `bucket_id` Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ кортежа - (ÑоответÑтвенно, кортежи будут Ñгруппированы по Ñтим бакетам). - ÐŸÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… на другие узлы Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ñ‡ÐµÑ€ÐµÐ· узел-маршрутизатор - не проиÑходит. Ðа текущем узле Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð±ÑƒÐ´ÐµÑ‚ локально Ñоздана - Ð²Ð¸Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð°Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° из результатов читающего запроÑа или из - переданных `VALUES`, а потом данные из нее будут вÑтавлены локально в - целевую таблицу. Планировщик отобразит значение `motion [policy: - local segment]`. +1. **Ð›Ð¾ÐºÐ°Ð»ÑŒÐ½Ð°Ñ Ð²Ñтавка**. ПредÑтавлÑет Ñобой локальную [материализацию + данных](../overview/glossary.md#data_materialization) Ñ Ð¿Ð¾Ð´Ñчетом + значений `bucket_id` Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ кортежа (ÑоответÑтвенно, кортежи + будут Ñгруппированы по Ñтим бакетам). ÐŸÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… на другие + узлы Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ñ‡ÐµÑ€ÐµÐ· узел-маршрутизатор не проиÑходит. Ðа текущем узле + Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð±ÑƒÐ´ÐµÑ‚ локально Ñоздана Ð²Ð¸Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð°Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° из результатов + читающего запроÑа или из переданных `VALUES`, а потом данные из нее + будут вÑтавлены локально в целевую таблицу. Планировщик отобразит + значение `motion [policy: local segment]`. 1. **Ð›Ð¾ÐºÐ°Ð»ÑŒÐ½Ð°Ñ Ð¼Ð°Ñ‚ÐµÑ€Ð¸Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ**. Данный вариант аналогичен предыдущему Ñ Ñ‚Ð¾Ð¹ разницей, что при материализации данных не проиÑходит вычиÑление `bucket_id`. При таком запроÑе планировщик отобразит значение `motion diff --git a/docs/tutorial/access_control.md b/docs/tutorial/access_control.md index f40db5a68427519932c81e176d0fcc2b64cbfbaa..daaa9636d26b134a8dfe097517df6d3962e854ff 100644 --- a/docs/tutorial/access_control.md +++ b/docs/tutorial/access_control.md @@ -131,6 +131,7 @@ GRANT DROP ROLE TO "admin" GRANT CREATE TABLE TO <grantee> GRANT CREATE USER TO <grantee> GRANT CREATE ROLE TO <grantee> +GRANT CREATE PROCEDURE TO <grantee> ``` Ðто обеÑпечивает наличие у админиÑтратора БД Ñледующих прав: @@ -140,6 +141,7 @@ GRANT CREATE ROLE TO <grantee> - управлÑÑ‚ÑŒ конфигурацией БД - назначать права доÑтупа пользователÑм БД к объектам доÑтупа БД - Ñоздавать резервные копии БД и воÑÑтанавливать БД из резервной копии +- Ñоздавать, модифицировать и удалÑÑ‚ÑŒ хранимые процедуры При Ñоздании объекта пользователь ÑтановитÑÑ ÐµÐ³Ð¾ владельцем и автоматичеÑки получает на него Ñледующие права (в завиÑимоÑти от типа @@ -158,6 +160,10 @@ GRANT DROP ON USER <user name> TO <owner> -- CREATE ROLE <role name> GRANT DROP ON ROLE <role name> TO <owner> + +-- CREATE PROCEDURE <procedure name> +GRANT ALTER ON PROCEDURE <procedure name> TO <owner> +GRANT DROP ON PROCEDURE <procedure name> TO <owner> ``` ### Роли {: #roles } @@ -403,6 +409,34 @@ GRANT <priv> ON TABLE <table name> TO <grantee> REVOKE <priv> ON TABLE <table name> FROM <grantee> ``` +## Управление доÑтупом к хранимым процедурам {: #proc_access } + +Ð”Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы пользователь в Picodata мог Ñоздавать хранимые +процедуры, ему требуетÑÑ ÑоответÑÑ‚Ð²ÑƒÑŽÑ‰Ð°Ñ Ð¿Ñ€Ð¸Ð²Ð¸Ð»ÐµÐ³Ð¸Ñ Ð¾Ñ‚ ÐдминиÑтратора +СУБД: + +```sql +GRANT CREATE PROCEDURE TO <grantee> +``` + +ПоÑле Ñтого <grantee> Ñможет не только Ñоздавать, но и управлÑÑ‚ÑŒ Ñвоими +хранимыми процедурами. При Ñтом, можно выдать привилегии Ð´Ð»Ñ Ð¾Ñ‚Ð´ÐµÐ»ÑŒÐ½Ñ‹Ñ… +дейÑтвий Ñ Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ð°Ð¼Ð¸, например на их иÑполнение и удаление. Ðто может +быть полезно Ð´Ð»Ñ Ð½Ð°Ñтройки доÑтупа к процедурам, Ñозданным другими +пользователÑми: + +```sql +GRANT EXECUTE PROCEDURE TO <grantee> +GRANT DROP PROCEDURE TO <grantee> +``` + +Как и в оÑтальных ÑлучаÑÑ…, отозвать выданные привилегии можно при помощи команды `REVOKE`: + +```sql +REVOKE EXECUTE PROCEDURE FROM <grantee> +REVOKE DROP PROCEDURE FROM <grantee> +``` + ## Дополнительные примеры SQL-запроÑов {: #sql_examples } ```sql @@ -439,6 +473,9 @@ 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 EXECUTE ON PROCEDURE <proc name> TO <grantee> +GRANT DROP ON PROCEDURE <proc name> TO <grantee> + GRANT <role name> TO <grantee> ```