From ae1339a81e224678c60ae99d6f8731619fe997e6 Mon Sep 17 00:00:00 2001 From: Alexander Tolstoy <a.tolstoy@picodata.io> Date: Wed, 13 Mar 2024 11:33:56 +0000 Subject: [PATCH] Add procedure description to SQL Commands and Access Control --- docs/architecture/system_tables.md | 31 ++++++++ docs/images/ebnf/body.svg | Bin 0 -> 11877 bytes docs/images/ebnf/create_procedure.svg | Bin 0 -> 40229 bytes docs/images/ebnf/ddl.svg | Bin 12754 -> 19365 bytes docs/images/ebnf/drop_procedure.svg | Bin 0 -> 24678 bytes docs/overview/glossary.md | 39 ++++++++-- docs/reference/sql_queries.md | 108 +++++++++++++++++++++++--- docs/tutorial/access_control.md | 37 +++++++++ 8 files changed, 195 insertions(+), 20 deletions(-) create mode 100644 docs/images/ebnf/body.svg create mode 100644 docs/images/ebnf/create_procedure.svg create mode 100644 docs/images/ebnf/drop_procedure.svg diff --git a/docs/architecture/system_tables.md b/docs/architecture/system_tables.md index 12be29ac..5a171814 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 GIT binary patch literal 11877 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 aXCM1{Qvc)M&yq2@C4?VdUA*}I(SHE-c~?aM literal 0 HcmV?d00001 diff --git a/docs/images/ebnf/create_procedure.svg b/docs/images/ebnf/create_procedure.svg new file mode 100644 index 0000000000000000000000000000000000000000..bf3779bd46a7b51453381d5d572ddec1d6805030 GIT binary patch literal 40229 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 E0R<LNT>t<8 literal 0 HcmV?d00001 diff --git a/docs/images/ebnf/ddl.svg b/docs/images/ebnf/ddl.svg index 5e9bb2ad81c492b7f1aacddf6a5470d74c5f5cc8..3069cf8472d06dedd49569d24574cdb38042adb3 100644 GIT binary patch delta 1149 zcmb7DziSjh6lN1+_BJ_5G*J+eyj(Deusb(zc6N5wm_#CI6$C{s<+xmOK`xhHUNjcL zN(2$(6jl)}tVOo;2ZC7Gi1-I+t(}%uzS+BI#7gdX`|X==zW2?0v!BXOA3FEX_#(uD z2LRQ|;zD(OvVbDW-W!XRjhXuO$pQxsL;_maULJ7t_C0-+2^i-IRs^ri^LZZx7h!-H zi0JuebR2DZ+P=DiX|zA%wD%7qMyx3eu()(}tz25JoG9OzEGWU0NO)*e`&-)hv;C#x znHT$JDdsySD9(0_Q{3!$LveclJBqnZi$8QG6uaG-oVQvjud}84lIeB(Ox-<B`5kwR z;(PbB<E6d1@1rIi>U-dIy34Eea%Jw?s`)t7Z@}w3vYV)6rzUfAlZ8@TFxYj-^nmLq z^Tj)CiZGf_5UPNofChxZl;D^Xo7-?Xuamv`ZvfpjP>LZ6AGu1;ca62RBTvlq$V~bw z|Jpr}Fpg1@Xg|;_iPMo|TTWgxl}L_$z*!QSox<bRmb2-dk-LtUFsY;;G9IQEyEdHe zn8{cXowG1XpY=U)4w5Jreh{%31zZ9um<|rFI$MYgwWX4>-d!TY0p+=(vse&HSOHsF zNFP}kLLit-$bW{3AhpjeGmgnMXNnj${*94o+nhkssccIaCQxdCWJ+q%=j2vL63Da2 zq`9y-RFs$G!17yAQ1>KNY(B}1;?gRIEY`3IHK5BBWlm7-Y1T})vUiRS8<7C@<&k49 z6nnEd`R3Hnl|SSEQ9QS0Z+4aDSqm^GD^L|2Y8d^70VWo&pe0hEf33+}vCYU5_CfpU z-~<{%?lKyI#hEYx;y3A*-K?;JS$#^hBvd9*wG6GT8;dfFGE<^;%WPyOGrv?LD^4#2 z{;xO*Pgqa?7PmLNRb9}S$xAf|_k0}7rS)oTZsi83ty>s%34uPwK+}-sW^RPOVag7+ WvVl$0<Y;OIC{B4Ni))RADeo6uwG1Ty delta 549 zcmZXRy-UMD7{-Y;ZLF)HAmWii?a&K%mv2iHDi*B>f{SZOLldO7wIzNm;_6hn!Ci22 z5(k$KF7D!=;2^jNU0n4py|@VB@_V26;eC(i?rx+ve^}eXuB+w&0AUcd!hxqcI4R>O zIH`6{Jrw~2m<ObKaNLhNN1lqci7{$=YCmpS*F$Fklu&?86f`a0C<B6s4v`HBet5@{ zWYM{)&ox~mHr7qcNwxqG9Ub=lMmJdX*)G@B%zyfsry58zk&bLaFEjIWKXcE9{bWXR zv4By9j;417<>iW?np_gpk)H*j?2Dl9Y^puwT%nC~RY8WbDd=2T5p=6;Oz81L85iln z_WA|H2G1rW2(&Rf1VU_a?%^ajmK|>=&K?4gRqW%xHe^ZhA|^)ah#}`>FoRywW)AM2 zZ1|fBF<q|9j-E6_Zg3oa15U|RFad3%185i^gnAk(d#i3^5SsM0z9gCSt8UI>$1P(U UIAv(iy_o__mZ=%0(yN`tU$^OpMgRZ+ diff --git a/docs/images/ebnf/drop_procedure.svg b/docs/images/ebnf/drop_procedure.svg new file mode 100644 index 0000000000000000000000000000000000000000..2e429469ec169061b123f0ebbe0dc035b17ef8c4 GIT binary patch literal 24678 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 literal 0 HcmV?d00001 diff --git a/docs/overview/glossary.md b/docs/overview/glossary.md index 7a43a0a1..7e84ffcb 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 c31a8abf..bd448484 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 f40db5a6..daaa9636 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> ``` -- GitLab