GRANT
GRANT â опÑеделиÑÑ Ð¿Ñава доÑÑÑпа
СинÑакÑиÑ
GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }
[, ...] | ALL [ PRIVILEGES ] }
ON { [ TABLE ] имÑ_ÑаблиÑÑ [, ...]
| ALL TABLES IN SCHEMA имÑ_ÑÑ
ÐµÐ¼Ñ [, ...] }
TO Ñказание_Ñоли [, ...] [ WITH GRANT OPTION ]
[ GRANTED BY Ñказание_Ñоли ]
GRANT { { SELECT | INSERT | UPDATE | REFERENCES } ( имÑ_ÑÑолбÑа [, ...] )
[, ...] | ALL [ PRIVILEGES ] ( имÑ_ÑÑолбÑа [, ...] ) }
ON [ TABLE ] имÑ_ÑаблиÑÑ [, ...]
TO Ñказание_Ñоли [, ...] [ WITH GRANT OPTION ]
[ GRANTED BY Ñказание_Ñоли ]
GRANT { { USAGE | SELECT | UPDATE }
[, ...] | ALL [ PRIVILEGES ] }
ON { SEQUENCE имÑ_поÑледоваÑелÑноÑÑи [, ...]
| ALL SEQUENCES IN SCHEMA имÑ_ÑÑ
ÐµÐ¼Ñ [, ...] }
TO Ñказание_Ñоли [, ...] [ WITH GRANT OPTION ]
[ GRANTED BY Ñказание_Ñоли ]
GRANT { { CREATE | CONNECT | TEMPORARY | TEMP } [, ...] | ALL [ PRIVILEGES ] }
ON DATABASE имÑ_бд [, ...]
TO Ñказание_Ñоли [, ...] [ WITH GRANT OPTION ]
[ GRANTED BY Ñказание_Ñоли ]
GRANT { USAGE | ALL [ PRIVILEGES ] }
ON DOMAIN имÑ_домена [, ...]
TO Ñказание_Ñоли [, ...] [ WITH GRANT OPTION ]
[ GRANTED BY Ñказание_Ñоли ]
GRANT { USAGE | ALL [ PRIVILEGES ] }
ON FOREIGN DATA WRAPPER имÑ_обÑÑÑки_ÑÑоÑонниÑ
_даннÑÑ
[, ...]
TO Ñказание_Ñоли [, ...] [ WITH GRANT OPTION ]
[ GRANTED BY Ñказание_Ñоли ]
GRANT { USAGE | ALL [ PRIVILEGES ] }
ON FOREIGN SERVER имÑ_ÑеÑвеÑа [, ...]
TO Ñказание_Ñоли [, ...] [ WITH GRANT OPTION ]
[ GRANTED BY Ñказание_Ñоли ]
GRANT { EXECUTE | ALL [ PRIVILEGES ] }
ON { { FUNCTION | PROCEDURE | ROUTINE } имÑ_подпÑогÑÐ°Ð¼Ð¼Ñ [ ( [ [ Ñежим_аÑгÑменÑа ] [ имÑ_аÑгÑменÑа ] Ñип_аÑгÑменÑа [, ...] ] ) ] [, ...]
| ALL { FUNCTIONS | PROCEDURES | ROUTINES } IN SCHEMA имÑ_ÑÑ
ÐµÐ¼Ñ [, ...] }
TO Ñказание_Ñоли [, ...] [ WITH GRANT OPTION ]
[ GRANTED BY Ñказание_Ñоли ]
GRANT { USAGE | ALL [ PRIVILEGES ] }
ON LANGUAGE имÑ_ÑзÑка [, ...]
TO Ñказание_Ñоли [, ...] [ WITH GRANT OPTION ]
[ GRANTED BY Ñказание_Ñоли ]
GRANT { { SELECT | UPDATE } [, ...] | ALL [ PRIVILEGES ] }
ON LARGE OBJECT oid_ÐÐ [, ...]
TO Ñказание_Ñоли [, ...] [ WITH GRANT OPTION ]
[ GRANTED BY Ñказание_Ñоли ]
GRANT { { SET | ALTER SYSTEM } [, ... ] | ALL [ PRIVILEGES ] }
ON PARAMETER паÑамеÑÑ_конÑигÑÑаÑии [, ...]
TO Ñказание_Ñоли [, ...] [ WITH GRANT OPTION ]
[ GRANTED BY Ñказание_Ñоли ]
GRANT { { CREATE | USAGE } [, ...] | ALL [ PRIVILEGES ] }
ON SCHEMA имÑ_ÑÑ
ÐµÐ¼Ñ [, ...]
TO Ñказание_Ñоли [, ...] [ WITH GRANT OPTION ]
[ GRANTED BY Ñказание_Ñоли ]
GRANT { CREATE | ALL [ PRIVILEGES ] }
ON TABLESPACE Ñабл_пÑоÑÑÑанÑÑво [, ...]
TO Ñказание_Ñоли [, ...] [ WITH GRANT OPTION ]
[ GRANTED BY Ñказание_Ñоли ]
GRANT { USAGE | ALL [ PRIVILEGES ] }
ON TYPE имÑ_Ñипа [, ...]
TO Ñказание_Ñоли [, ...] [ WITH GRANT OPTION ]
[ GRANTED BY Ñказание_Ñоли ]
GRANT имÑ_Ñоли [, ...] TO Ñказание_Ñоли [, ...]
[ WITH { ADMIN | INHERIT | SET } { OPTION | TRUE | FALSE } ]
[ GRANTED BY Ñказание_Ñоли ]
ÐдеÑÑ Ñказание_Ñоли:
[ GROUP ] имÑ_Ñоли
| PUBLIC
| CURRENT_ROLE
| CURRENT_USER
| SESSION_USERÐпиÑание #
Ðоманда GRANT Ð¸Ð¼ÐµÐµÑ Ð´Ð²Ðµ оÑновнÑе ÑазновидноÑÑи: пеÑÐ²Ð°Ñ Ð½Ð°Ð·Ð½Ð°ÑÐ°ÐµÑ Ð¿Ñава Ð´Ð»Ñ Ð´Ð¾ÑÑÑпа к обÑекÑам баз даннÑÑ
(ÑаблиÑам, ÑÑолбÑам, пÑедÑÑавлениÑм, ÑÑоÑонним ÑаблиÑам, поÑледоваÑелÑноÑÑÑм, базам даннÑÑ
, обÑÑÑкам ÑÑоÑонниÑ
даннÑÑ
, ÑÑоÑонним ÑеÑвеÑам, ÑÑнкÑиÑм, пÑоÑедÑÑам, пÑоÑедÑÑнÑм ÑзÑкам, болÑÑим обÑекÑам, паÑамеÑÑам конÑигÑÑаÑии, ÑÑ
емам, ÑаблиÑнÑм пÑоÑÑÑанÑÑвам или Ñипам), а вÑоÑÐ°Ñ Ð½Ð°Ð·Ð½Ð°ÑÐ°ÐµÑ Ð¾Ð´Ð½Ð¸ Ñоли Ñленами дÑÑгиÑ
. ÐÑи ÑазновидноÑÑи во многом поÑ
ожи, но имеÑÑ Ð´Ð¾ÑÑаÑоÑно оÑлиÑий, ÑÑÐ¾Ð±Ñ ÑаÑÑмаÑÑиваÑÑ Ð¸Ñ
оÑделÑно.
GRANT Ð´Ð»Ñ Ð¾Ð±ÑекÑов баз даннÑÑ #
ÐÑа ÑазновидноÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ GRANT даÑÑ Ð¾Ð´Ð½Ð¾Ð¹ или неÑколÑким ÑолÑм опÑеделÑннÑе пÑава Ð´Ð»Ñ Ð´Ð¾ÑÑÑпа к обÑекÑÑ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
. ÐÑи пÑава добавлÑÑÑÑÑ Ðº ÑпиÑÐºÑ Ð¸Ð¼ÐµÑÑиÑ
ÑÑ, еÑли ÑÐ¾Ð»Ñ Ñже наделена какими-Ñо пÑавами.
ÐлÑÑевое Ñлово PUBLIC ознаÑаеÑ, ÑÑо пÑава даÑÑÑÑ Ð²Ñем ÑолÑм, вклÑÑÐ°Ñ Ñе, ÑÑо могÑÑ Ð±ÑÑÑ ÑÐ¾Ð·Ð´Ð°Ð½Ñ Ð¿Ð¾Ð·Ð¶Ðµ. PUBLIC можно воÑпÑинимаÑÑ ÐºÐ°Ðº неÑвно опÑеделÑннÑÑ Ð³ÑÑппÑ, в коÑоÑÑÑ Ð²Ñ
одÑÑ Ð²Ñе Ñоли. ÐÑÐ±Ð°Ñ ÐºÐ¾Ð½ÐºÑеÑÐ½Ð°Ñ ÑÐ¾Ð»Ñ Ð¿Ð¾Ð»ÑÑÐ¸Ñ Ð² ÑÑмме вÑе пÑава, даннÑе непоÑÑедÑÑвенно ей и ÑолÑм, Ñленом коÑоÑÑÑ
она ÑвлÑеÑÑÑ, а Ñакже пÑава, даннÑе Ñоли PUBLIC.
ÐÑли Ñказано WITH GRANT OPTION, полÑÑаÑÐµÐ»Ñ Ð¿Ñава, в ÑÐ²Ð¾Ñ Ð¾ÑеÑедÑ, Ð¼Ð¾Ð¶ÐµÑ Ð´Ð°Ð²Ð°ÑÑ ÐµÐ³Ð¾ дÑÑгим. Ðез ÑÑого ÑÐºÐ°Ð·Ð°Ð½Ð¸Ñ ÑаÑпоÑÑжаÑÑÑÑ Ñвоим пÑавом он не ÑможеÑ. ÐÑÑппе PUBLIC пÑаво пеÑедаÑи пÑава даÑÑ Ð½ÐµÐ»ÑзÑ.
ÐÑли Ñказано GRANTED BY, заданнÑм пÑаводаÑелем должен бÑÑÑ ÑекÑÑий полÑзоваÑелÑ. РнаÑÑоÑÑее вÑÐµÐ¼Ñ ÑÑо пÑедложение Ñеализовано ÑолÑко Ñади ÑовмеÑÑимоÑÑи Ñо ÑÑандаÑÑом SQL.
ÐÐµÑ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ÑÑи Ñвно даваÑÑ Ð¿Ñава Ð´Ð»Ñ Ð´Ð¾ÑÑÑпа к обÑекÑÑ ÐµÐ³Ð¾ владелÑÑÑ (обÑÑно ÑÑо полÑзоваÑелÑ, ÑоздавÑий обÑекÑ), Ñак как по ÑмолÑÐ°Ð½Ð¸Ñ Ð¾Ð½ Ð¸Ð¼ÐµÐµÑ Ð²Ñе пÑава. (Ðднако Ð²Ð»Ð°Ð´ÐµÐ»ÐµÑ Ð¼Ð¾Ð¶ÐµÑ Ð»Ð¸ÑиÑÑ ÑÐµÐ±Ñ Ð¿Ñав в ÑелÑÑ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи.)
ÐÑаво ÑдалÑÑÑ Ð¾Ð±ÑÐµÐºÑ Ð¸Ð»Ð¸ изменÑÑÑ ÐµÐ³Ð¾ опÑеделение пÑоизволÑнÑм обÑазом не ÑÑиÑаеÑÑÑ Ð½Ð°Ð·Ð½Ð°ÑаемÑм; оно неоÑÑемлемо ÑвÑзано Ñ Ð²Ð»Ð°Ð´ÐµÐ»ÑÑем, Ñак ÑÑо оÑозваÑÑ ÑÑо пÑаво или даÑÑ ÐµÐ³Ð¾ комÑ-Ñо дÑÑÐ³Ð¾Ð¼Ñ Ð½ÐµÐ»ÑзÑ. (Ðднако Ð¿Ð¾Ñ Ð¾Ð¶Ð¸Ð¹ ÑÑÑÐµÐºÑ Ð¼Ð¾Ð¶Ð½Ð¾ полÑÑиÑÑ, ÑпÑавлÑÑ ÑленÑÑвом в Ñоли, владеÑÑей обÑекÑом; Ñм. ниже.) ÐÐ»Ð°Ð´ÐµÐ»ÐµÑ Ñакже неÑвно полÑÑÐ°ÐµÑ Ð¿Ñаво ÑаÑпоÑÑÐ¶ÐµÐ½Ð¸Ñ Ð²Ñеми пÑавами Ð´Ð»Ñ Ñвоего обÑекÑа.
ÐозможнÑе пÑава:
SELECTINSERTUPDATEDELETETRUNCATEREFERENCESTRIGGERCREATECONNECTTEMPORARYEXECUTEUSAGESETALTER SYSTEMÐпÑеделÑннÑе ÑÐ¸Ð¿Ñ Ð¿Ñав, опиÑаннÑе в Разделе 5.7.
TEMPÐлÑÑеÑнаÑивное напиÑание
TEMPORARY.ALL PRIVILEGESÐаÑÑ Ñелевой Ñоли вÑе пÑава, пÑименимÑе к Ð´Ð°Ð½Ð½Ð¾Ð¼Ñ Ð¾Ð±ÑекÑÑ. ÐлÑÑевое Ñлово
PRIVILEGESÑвлÑеÑÑÑ Ð½ÐµÐ¾Ð±ÑзаÑелÑнÑм вPostgres Pro, Ñ Ð¾ÑÑ Ð² ÑÑандаÑÑе SQL оно ÑÑебÑеÑÑÑ.
СинÑакÑÐ¸Ñ FUNCTION ÑаÑпÑоÑÑÑанÑеÑÑÑ Ð½Ð° обÑÑнÑе, агÑегаÑнÑе и оконнÑе ÑÑнкÑии, но не на пÑоÑедÑÑÑ; Ð´Ð»Ñ Ð¿Ð¾ÑледниÑ
пÑедназнаÑен ÑинÑакÑÐ¸Ñ PROCEDURE. Также можно иÑполÑзоваÑÑ Ð²Ð°ÑÐ¸Ð°Ð½Ñ Ñ ROUTINE, оÑ
ваÑÑваÑÑий обÑÑнÑе, агÑегаÑнÑе и оконнÑе ÑÑнкÑии, а Ñакже пÑоÑедÑÑÑ, вне завиÑимоÑÑи Ð¾Ñ ÑоÑного Ñипа обÑекÑа.
Также можно даÑÑ Ñоли некоÑоÑое пÑаво Ð´Ð»Ñ Ð²ÑеÑ
обÑекÑов одного Ñипа в одной или неÑколÑкиÑ
ÑÑ
емаÑ
. ÐÑа ÑÑнкÑионалÑноÑÑÑ Ð² наÑÑоÑÑее вÑÐµÐ¼Ñ Ð¿Ð¾Ð´Ð´ÐµÑживаеÑÑÑ ÑолÑко Ð´Ð»Ñ ÑаблиÑ, поÑледоваÑелÑноÑÑей, ÑÑнкÑий и пÑоÑедÑÑ. ALL TABLES ÑаÑпÑоÑÑÑанÑеÑÑÑ Ð¸ на пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ñо ÑÑоÑонними ÑаблиÑами Ñак же, как и ваÑÐ¸Ð°Ð½Ñ GRANT Ð´Ð»Ñ ÐºÐ¾Ð½ÐºÑеÑного обÑекÑа. ALL FUNCTIONS ÑаÑпÑоÑÑÑанÑеÑÑÑ Ñакже на агÑегаÑнÑе и оконнÑе ÑÑнкÑии, но не на пÑоÑедÑÑÑ, Ñоже подобно ваÑианÑÑ GRANT Ð´Ð»Ñ ÐºÐ¾Ð½ÐºÑеÑного обÑекÑа. ЧÑÐ¾Ð±Ñ Ð¾Ñ
ваÑиÑÑ Ð¸ пÑоÑедÑÑÑ, воÑполÑзÑйÑеÑÑ ÑоÑмой ALL ROUTINES.
GRANT Ð´Ð»Ñ Ñолей #
ÐÑа ÑазновидноÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ GRANT вклÑÑÐ°ÐµÑ ÑÐ¾Ð»Ñ Ð² ÑÐ»ÐµÐ½Ñ Ð¾Ð´Ð½Ð¾Ð¹ или неÑколÑкиÑ
дÑÑгиÑ
Ñолей, а Ñакже изменÑÐµÑ Ð¿Ð°ÑамеÑÑÑ ÑленÑÑва SET, INHERIT и ADMIN. Ðа более подÑобнÑм опиÑанием ÑÑиÑ
паÑамеÑÑов обÑаÑиÑеÑÑ Ðº РазделÑ 20.3. ЧленÑÑво в ÑолÑÑ
игÑÐ°ÐµÑ Ð²Ð°Ð¶Ð½ÑÑ ÑолÑ, Ñак как позволÑÐµÑ Ð¿ÑедоÑÑавиÑÑ Ð²Ñем ÐµÑ Ñленам пÑава, даннÑе Ñоли, и поÑенÑиалÑнÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð¸Ð·Ð¼ÐµÐ½ÑÑÑ ÑÐ°Ð¼Ñ ÑолÑ. Ðднако ÑакÑиÑеÑкое пÑедоÑÑавление пÑав завиÑÐ¸Ñ Ð¾Ñ ÑÑÑановленнÑÑ
паÑамеÑÑов, ÑвÑзаннÑÑ
Ñ Ð¸Ñ
вÑдаÑей. ЧÑÐ¾Ð±Ñ Ð¸Ð·Ð¼ÐµÐ½Ð¸ÑÑ Ð¿Ð°ÑамеÑÑÑ ÑÑÑеÑÑвÑÑÑего ÑленÑÑва, вÑдайÑе ÑленÑÑво Ñ Ð¾Ð±Ð½Ð¾Ð²Ð»ÑннÑми знаÑениÑми паÑамеÑÑов.
ÐаждÑй из паÑамеÑÑов, опиÑаннÑÑ
ниже, Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑинимаÑÑ Ð·Ð½Ð°Ñение TRUE или FALSE. ÐлÑÑевое Ñлово OPTION пÑинимаеÑÑÑ Ð² каÑеÑÑве Ñинонима TRUE, Ñо еÑÑÑ WITH ADMIN OPTION и WITH ADMIN TRUE ÑвлÑÑÑÑÑ Ñинонимами. ÐÑи изменении ÑÑÑеÑÑвÑÑÑего ÑленÑÑва оÑÑÑÑÑÑвие паÑамеÑÑа пÑÐ¸Ð²Ð¾Ð´Ð¸Ñ Ðº ÑоÑ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ ÑекÑÑего знаÑениÑ.
ÐолÑÑивÑий ÑленÑÑво в Ñоли Ñ Ñказанием ADMIN ÑможеÑ, в ÑÐ²Ð¾Ñ Ð¾ÑеÑедÑ, вклÑÑаÑÑ Ð² ÑÐ»ÐµÐ½Ñ ÑÑой Ñоли, а Ñакже иÑклÑÑаÑÑ Ð¸Ð· Ð½ÐµÑ Ð´ÑÑгие Ñоли. Ðез ÑÑого ÑÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð¾Ð±ÑÑнÑе полÑзоваÑели не могÑÑ ÑÑо делаÑÑ. СÑиÑаеÑÑÑ, ÑÑо ÑÐ¾Ð»Ñ Ð½Ðµ Ð¸Ð¼ÐµÐµÑ Ð¿Ñава WITH ADMIN OPTION Ð´Ð»Ñ Ñамой ÑебÑ. СÑпеÑполÑзоваÑели баз даннÑÑ
могÑÑ Ð²ÐºÐ»ÑÑаÑÑ Ð¸Ð»Ð¸ иÑклÑÑаÑÑ Ð»ÑбÑе Ñоли из лÑбÑÑ
Ñолей. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ â FALSE.
ÐаÑамеÑÑ INHERIT ÑпÑавлÑÐµÑ ÑÑаÑÑÑом наÑÐ»ÐµÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ ÑленÑÑва (за подÑобноÑÑÑми о наÑледовании обÑаÑиÑеÑÑ Ðº РазделÑ 20.3). ÐÑли Ð´Ð»Ñ ÑÑого паÑамеÑÑа ÑÑÑановлено знаÑение TRUE, новÑй Ñлен наÑледÑÐµÑ Ð¾Ñ Ð²Ñданной Ñоли. ÐÑли ÑÑÑановлено знаÑение FALSE, новÑй Ñлен не наÑледÑÐµÑ Ð¾Ñ Ð²Ñданной Ñоли. ÐÑли пÑи Ñоздании нового ÑленÑÑва в Ñоли ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð½Ðµ Ñказан, по ÑмолÑÐ°Ð½Ð¸Ñ Ð¸ÑполÑзÑеÑÑÑ Ð°ÑÑибÑÑ Ð½Ð°ÑÐ»ÐµÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð¾Ð±Ð°Ð²Ð»Ñемого Ñлена Ñоли.
ÐÑли Ð´Ð»Ñ SET ÑказаÑÑ TRUE, Ñлен Ñоли ÑÐ¼Ð¾Ð¶ÐµÑ Ð¼ÐµÐ½ÑÑÑ Ð½Ð°Ð·Ð½Ð°ÑеннÑÑ ÐµÐ¼Ñ ÑолÑ, иÑполÑзÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ SET ROLE. ÐÑли ÑÐ¾Ð»Ñ ÑвлÑеÑÑÑ Ð¾Ð¿Ð¾ÑÑедованнÑм Ñленом дÑÑгой Ñоли, Ñо она ÑÐ¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑ SET ROLE, ÑÑÐ¾Ð±Ñ ÑÑаÑÑ ÑÑой ÑолÑÑ ÑолÑко пÑи ÑÑловии, ÑÑо ÑÑÑеÑÑвÑÐµÑ ÑепоÑка ÑленÑÑва в ÑолÑÑ
, ÐºÐ°Ð¶Ð´Ð°Ñ Ð¸Ð· коÑоÑÑÑ
Ð¸Ð¼ÐµÐµÑ Ð°ÑÑибÑÑ SET TRUE. Ðо ÑмолÑÐ°Ð½Ð¸Ñ â TRUE.
ЧÑÐ¾Ð±Ñ ÑоздаÑÑ Ð¾Ð±ÑекÑ, владелÑÑем коÑоÑого бÑÐ´ÐµÑ Ð´ÑÑÐ³Ð°Ñ ÑолÑ, или назнаÑиÑÑ Ð´ÑÑгой Ñоли пÑава Ð²Ð»Ð°Ð´ÐµÐ½Ð¸Ñ ÑÑÑеÑÑвÑÑÑим обÑекÑом, необÑ
одимо имеÑÑ Ð¿Ñаво SET ROLE Ð´Ð»Ñ ÑÑой Ñоли, в пÑоÑивном ÑлÑÑае ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ ALTER ... OWNER TO или CREATE DATABASE ... OWNER вÑдадÑÑ Ð¾ÑибкÑ. Ðднако полÑзоваÑелÑ, наÑледÑÑÑий пÑава Ñоли, но не имеÑÑий пÑаво SET ROLE Ð´Ð»Ñ ÑÑой Ñоли, Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð»ÑÑиÑÑ Ð¿Ð¾Ð»Ð½Ñй доÑÑÑп к Ñоли пÑÑÑм манипÑлÑÑий Ñ Ð¾Ð±ÑекÑами, коÑоÑÑми Ð²Ð»Ð°Ð´ÐµÐµÑ ÑÑа ÑÐ¾Ð»Ñ (напÑимеÑ, пеÑеопÑеделиÑÑ ÑÑÑеÑÑвÑÑÑÑÑ ÑÑнкÑÐ¸Ñ Ñ Ð¸ÑполÑзованием «ÑÑоÑнÑкого кода»). Таким обÑазом, еÑли пÑава Ñоли Ð´Ð¾Ð»Ð¶Ð½Ñ Ð½Ð°ÑледоваÑÑÑÑ, но доÑÑÑп к Ñоли ÑеÑез SET ROLE пÑедоÑÑавлÑÑÑÑÑ Ð½Ðµ должен, не ÑледÑÐµÑ Ð²ÑдаваÑÑ ÐµÐ¹ пÑава Ð²Ð»Ð°Ð´ÐµÐ½Ð¸Ñ SQL-обÑекÑами.
С Ñказанием GRANTED BY пÑава вÑдаÑÑÑÑ Ð¾Ñ Ð¸Ð¼ÐµÐ½Ð¸ Ñказанной Ñоли. ÐÑо можно ÑделаÑÑ, ÑолÑко еÑли Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ ÐµÑÑÑ Ð¿Ñава Ð´Ð»Ñ ÑÑой Ñоли. РолÑ, назнаÑÐ°ÐµÐ¼Ð°Ñ Ð¿ÑаводаÑелем, должна имеÑÑ Ð¿Ñаво ADMIN OPTION Ð´Ð»Ñ Ñелевой Ñоли (еÑли ÑолÑко ÑÑо не наÑалÑнÑй ÑÑпеÑполÑзоваÑелÑ). ÐÑли пÑаво вÑдаÑÑÑÑ Ð½Ðµ Ð¾Ñ Ð¸Ð¼ÐµÐ½Ð¸ наÑалÑного ÑÑпеÑполÑзоваÑелÑ, а Ð¾Ñ Ð´ÑÑгого пÑаводаÑелÑ, оно бÑÐ´ÐµÑ Ð·Ð°Ð²Ð¸ÑеÑÑ Ð¾Ñ Ð¿ÑаводаÑÐµÐ»Ñ Ñ Ð¿Ñавом ADMIN OPTION Ð´Ð»Ñ ÑÑой Ñоли, Ñак ÑÑо пÑи оÑзÑве пÑава ADMIN OPTION поÑÑебÑеÑÑÑ Ð¾ÑозваÑÑ Ð¸ завиÑимÑе пÑава.
РоÑлиÑие Ð¾Ñ Ð¿Ñав, ÑленÑÑво в ÑолÑÑ
нелÑÐ·Ñ Ð½Ð°Ð·Ð½Ð°ÑиÑÑ Ð³ÑÑппе PUBLIC. ÐамеÑÑÑе Ñакже, ÑÑо ÑÑа ÑоÑма ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð½Ðµ пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð¸Ð·Ð±ÑÑоÑное Ñлово GROUP в Ñказании_Ñоли.
ÐÑимеÑÐ°Ð½Ð¸Ñ #
ÐÐ»Ñ Ð»Ð¸ÑÐµÐ½Ð¸Ñ ÑÑбÑекÑов пÑав доÑÑÑпа пÑименÑеÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° REVOKE.
ÐаÑÐ¸Ð½Ð°Ñ Ñ PostgreSQL веÑÑии 8.1, конÑепÑии полÑзоваÑелей и гÑÑпп обÑÐµÐ´Ð¸Ð½ÐµÐ½Ñ Ð² единÑÑ ÑÑÑноÑÑÑ, названнÑÑ ÑолÑÑ. Таким обÑазом, ÑепеÑÑ Ð½ÐµÑ Ð½ÐµÐ¾Ð±Ñ
одимоÑÑи добавлÑÑÑ ÐºÐ»ÑÑевое Ñлово GROUP, ÑÑÐ¾Ð±Ñ Ð¿Ð¾ÐºÐ°Ð·Ð°ÑÑ, ÑÑо ÑÑбÑÐµÐºÑ ÑвлÑеÑÑÑ Ð³ÑÑппой, а не полÑзоваÑелем. Слово GROUP вÑÑ ÐµÑÑ Ð¿ÑинимаеÑÑÑ ÑÑой командой, но оно лиÑено ÑмÑÑловой нагÑÑзки.
ÐолÑзоваÑÐµÐ»Ñ Ð¼Ð¾Ð¶ÐµÑ Ð²ÑполнÑÑÑ SELECT, INSERT и подобнÑе ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ñо ÑÑолбÑом ÑаблиÑÑ, еÑли он Ð¸Ð¼ÐµÐµÑ Ñакое пÑаво Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ ÑÑолбÑа или Ð´Ð»Ñ Ð²Ñей ÑаблиÑÑ. ÐÑли назнаÑиÑÑ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ ÑÑебÑемое пÑаво на ÑÑовне ÑаблиÑÑ, а заÑем оÑозваÑÑ ÐµÐ³Ð¾ Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ из ÑÑолбÑов, ÑÑо не даÑÑ ÑÑÑекÑа, коÑоÑого можно бÑло Ð±Ñ Ð¾Ð¶Ð¸Ð´Ð°ÑÑ: опеÑаÑÐ¸Ñ Ñ Ð¿Ñавами на ÑÑовне ÑÑолбÑов не заÑÑÐ¾Ð½ÐµÑ Ð¿Ñаво на ÑÑовне ÑаблиÑÑ.
ÐÑли назнаÑиÑÑ Ð¿Ñаво доÑÑÑпа к обÑекÑÑ (Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ GRANT) попÑÑаеÑÑÑ Ð½Ðµ Ð²Ð»Ð°Ð´ÐµÐ»ÐµÑ Ð¾Ð±ÑекÑа, команда завеÑÑиÑÑÑ Ð¾Ñибкой, еÑли полÑзоваÑÐµÐ»Ñ Ð½Ðµ Ð¸Ð¼ÐµÐµÑ Ð½Ð¸ÐºÐ°ÐºÐ¸Ñ
пÑав Ð´Ð»Ñ ÑÑого обÑекÑа. ÐÑли же полÑзоваÑÐµÐ»Ñ Ð¸Ð¼ÐµÐµÑ ÐºÐ°ÐºÐ¸Ðµ-Ñо пÑава, команда бÑÐ´ÐµÑ Ð²ÑполнÑÑÑÑÑ, но полÑзоваÑÐµÐ»Ñ ÑÐ¼Ð¾Ð¶ÐµÑ Ð´Ð°Ð²Ð°ÑÑ Ð´ÑÑгим ÑолÑко Ñе пÑава, коÑоÑÑе Ð´Ð°Ð½Ñ ÐµÐ¼Ñ Ñ Ð¿Ñавом пеÑедаÑи. ФоÑÐ¼Ñ GRANT ALL PRIVILEGES бÑдÑÑ Ð²ÑдаваÑÑ Ð¿ÑедÑпÑеждение, еÑли Ñ Ð½ÐµÐ³Ð¾ вовÑе Ð½ÐµÑ ÑакиÑ
пÑав, Ñогда как дÑÑгие ÑоÑÐ¼Ñ Ð±ÑдÑÑ Ð²ÑдаваÑÑ Ð¿ÑедÑпÑеждениÑ, еÑли полÑзоваÑÐµÐ»Ñ Ð½Ðµ Ð¸Ð¼ÐµÐµÑ Ð¿Ñав ÑаÑпоÑÑжаÑÑÑÑ Ð¸Ð¼ÐµÐ½Ð½Ð¾ пÑавами, ÑказаннÑми в команде. (РпÑинÑипе, ÑÑи ÑÑвеÑÐ¶Ð´ÐµÐ½Ð¸Ñ Ð¿ÑÐ¸Ð¼ÐµÐ½Ð¸Ð¼Ñ Ð¸ к владелÑÑÑ Ð¾Ð±ÑекÑа, но ÐµÐ¼Ñ ÑазÑеÑено ÑаÑпоÑÑжаÑÑÑÑ Ð²Ñеми пÑавами, поÑÑÐ¾Ð¼Ñ Ñакие ÑиÑÑаÑии невозможнÑ.)
СледÑÐµÑ Ð¾ÑмеÑиÑÑ, ÑÑо ÑÑпеÑполÑзоваÑели баз даннÑÑ
могÑÑ Ð¾Ð±ÑаÑаÑÑÑÑ Ðº лÑбÑм обÑекÑам, вне завиÑимоÑÑи Ð¾Ñ Ð½Ð°Ð»Ð¸ÑÐ¸Ñ ÐºÐ°ÐºÐ¸Ñ
-либо пÑав. ÐÑо ÑÑавнимо Ñ Ð¿ÑивилегиÑми полÑзоваÑÐµÐ»Ñ root в ÑиÑÑеме Unix. Ð Ñак же, как root, ÑÐ¾Ð»Ñ ÑÑпеÑполÑзоваÑÐµÐ»Ñ ÑледÑÐµÑ Ð¸ÑполÑзоваÑÑ ÑолÑко когда ÑÑо абÑолÑÑно необÑ
одимо.
ÐÑли ÑÑпеÑполÑзоваÑÐµÐ»Ñ ÑеÑÐ¸Ñ Ð²ÑполниÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ GRANT или REVOKE, она бÑÐ´ÐµÑ Ð²Ñполнена, как еÑли Ð±Ñ ÐµÑ Ð²ÑполнÑл Ð²Ð»Ð°Ð´ÐµÐ»ÐµÑ Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ обÑекÑа. Ð ÑаÑÑноÑÑи, пÑава, назнаÑеннÑе Ñакой командой, бÑдÑÑ Ð¿ÑедÑÑÐ°Ð²Ð»ÐµÐ½Ñ ÐºÐ°Ðº пÑава, назнаÑеннÑе владелÑÑем обÑекÑа. (ÐÑли Ñак же ÑÑÑановиÑÑ ÑленÑÑво в Ñоли, оно бÑÐ´ÐµÑ Ð¿ÑедÑÑавлено как назнаÑенное наÑалÑнÑм ÑÑпеÑполÑзоваÑелем.)
GRANT и REVOKE Ñакже могÑÑ Ð±ÑÑÑ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ñ ÑолÑÑ, коÑоÑÐ°Ñ Ð½Ðµ ÑвлÑеÑÑÑ Ð²Ð»Ð°Ð´ÐµÐ»ÑÑем заданного обÑекÑа, но ÑвлÑеÑÑÑ Ñленом Ñоли-владелÑÑа, либо Ñленом Ñоли, имеÑÑей пÑава WITH GRANT OPTION Ð´Ð»Ñ ÑÑого обÑекÑа. Ð ÑÑом ÑлÑÑае пÑава бÑдÑÑ Ð·Ð°Ð¿Ð¸ÑÐ°Ð½Ñ ÐºÐ°Ðº назнаÑеннÑе ÑолÑÑ, коÑоÑÐ°Ñ Ð´ÐµÐ¹ÑÑвиÑелÑно Ð²Ð»Ð°Ð´ÐµÐµÑ Ð¾Ð±ÑекÑом, либо Ð¸Ð¼ÐµÐµÑ Ð¿Ñаво WITH GRANT OPTION. ÐапÑимеÑ, еÑли ÑаблиÑа t1 пÑÐ¸Ð½Ð°Ð´Ð»ÐµÐ¶Ð¸Ñ Ñоли g1, Ñленом коÑоÑой ÑвлÑеÑÑÑ u1, Ñо u1 Ð¼Ð¾Ð¶ÐµÑ Ð´Ð°ÑÑ Ð¿Ñава на иÑполÑзование t1 Ñоли u2, но ÑÑи пÑава бÑдÑÑ Ð¿ÑедÑÑавленÑ, как назнаÑеннÑе непоÑÑедÑÑвенно ÑолÑÑ g1. ÐÑозваÑÑ ÑÑи пÑава позже ÑÐ¼Ð¾Ð¶ÐµÑ Ð»Ñбой Ñлен Ñоли g1.
ÐÑли ÑолÑ, вÑполнÑÑÑÐ°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ GRANT, полÑÑÐ°ÐµÑ ÑÑебÑемое пÑаво по неÑколÑким пÑÑÑм ÑленÑÑва, ÐºÐ°ÐºÐ°Ñ Ð¸Ð¼ÐµÐ½Ð½Ð¾ ÑÐ¾Ð»Ñ Ð±ÑÐ´ÐµÑ Ð²ÑбÑана в каÑеÑÑве назнаÑаÑÑей пÑаво, не опÑеделено. ÐÑли ÑÑо важно, в ÑакиÑ
ÑлÑÑаÑÑ
ÑекомендÑеÑÑÑ Ð²Ð¾ÑполÑзоваÑÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹ SET ROLE и пеÑеклÑÑиÑÑÑÑ Ð½Ð° ÑолÑ, коÑоÑÑÑ Ñ
оÑеÑÑÑ Ð²Ð¸Ð´ÐµÑÑ Ð² каÑеÑÑве вÑполнÑÑÑей GRANT.
ÐÑи назнаÑении пÑав Ð´Ð»Ñ Ð´Ð¾ÑÑÑпа к ÑаблиÑе они авÑомаÑиÑеÑки не ÑаÑпÑоÑÑÑанÑÑÑÑÑ Ð½Ð° поÑледоваÑелÑноÑÑи, иÑполÑзÑемÑе ÑÑой ÑаблиÑей, в Ñом ÑиÑле, на поÑледоваÑелÑноÑÑи, ÑвÑзаннÑе Ñо ÑÑолбÑами SERIAL. ÐÑава доÑÑÑпа к поÑледоваÑелÑноÑÑÑм нÑжно назнаÑаÑÑ Ð¾ÑделÑно.
ÐодÑобнее о конкÑеÑнÑÑ ÑÐ¸Ð¿Ð°Ñ Ð¿Ñав, а Ñакже о Ñом, как пÑоÑмоÑÑеÑÑ Ð¿Ñава, назнаÑеннÑе Ð´Ð»Ñ Ð¾Ð±ÑекÑов, ÑаÑÑказÑваеÑÑÑ Ð² Разделе 5.7.
ÐÑимеÑÑ #
СледÑÑÑÐ°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° ÑазÑеÑÐ°ÐµÑ Ð²Ñем добавлÑÑÑ Ð·Ð°Ð¿Ð¸Ñи в ÑаблиÑÑ films:
GRANT INSERT ON films TO PUBLIC;
ÐÑа команда даÑÑ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ manuel вÑе пÑава Ð´Ð»Ñ Ð¿ÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ kinds:
GRANT ALL PRIVILEGES ON kinds TO manuel;
УÑÑиÑе, ÑÑо еÑли ÐµÑ Ð²ÑÐ¿Ð¾Ð»Ð½Ð¸Ñ ÑÑпеÑполÑзоваÑÐµÐ»Ñ Ð¸Ð»Ð¸ Ð²Ð»Ð°Ð´ÐµÐ»ÐµÑ Ð¿ÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ kinds, ÑÑа команда дейÑÑвиÑелÑно даÑÑ ÑÑбÑекÑÑ Ð²Ñе пÑава, но еÑли ÐµÑ Ð²ÑÐ¿Ð¾Ð»Ð½Ð¸Ñ Ð¾Ð±ÑÑнÑй полÑзоваÑелÑ, ÑÑбÑÐµÐºÑ Ð¿Ð¾Ð»ÑÑÐ¸Ñ ÑолÑко Ñе пÑава, коÑоÑÑе Ð´Ð°Ð½Ñ ÑÑÐ¾Ð¼Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ñ Ð¿Ñавом пеÑедаÑи.
ÐклÑÑение в ÑÐ¾Ð»Ñ admins полÑзоваÑÐµÐ»Ñ joe:
GRANT admins TO joe;
СовмеÑÑимоÑÑÑ #
СоглаÑно ÑÑандаÑÑÑ SQL, Ñлово PRIVILEGES в Ñказании ALL PRIVILEGES ÑвлÑеÑÑÑ Ð¾Ð±ÑзаÑелÑнÑм. СÑандаÑÑ SQL не позволÑÐµÑ Ð½Ð°Ð·Ð½Ð°ÑаÑÑ Ð¿Ñава ÑÑÐ°Ð·Ñ Ð´Ð»Ñ Ð½ÐµÑколÑкиÑ
обÑекÑов одной командой.
Postgres Pro позволÑÐµÑ Ð²Ð»Ð°Ð´ÐµÐ»ÑÑÑ Ð¾Ð±ÑекÑа лиÑиÑÑ ÑÐµÐ±Ñ ÑвоиÑ
обÑÑнÑÑ
пÑав: напÑимеÑ, Ð²Ð»Ð°Ð´ÐµÐ»ÐµÑ ÑаблиÑÑ Ð¼Ð¾Ð¶ÐµÑ ÑазÑеÑиÑÑ Ñебе ÑолÑко ÑÑение ÑаблиÑÑ, оÑозвав ÑобÑÑвеннÑе пÑава INSERT, UPDATE, DELETE и TRUNCATE. Ð ÑÑандаÑÑе SQL ÑÑо невозможно. ÐÑо обÑÑÑнÑеÑÑÑ Ñем, ÑÑо Postgres Pro воÑпÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð¿Ñава владелÑÑа как назнаÑеннÑе им же Ñебе; поÑÑÐ¾Ð¼Ñ Ð¸Ñ
можно и оÑозваÑÑ. Ð ÑÑандаÑÑе SQL пÑава владелÑÑа даÑÑÑÑ ÐµÐ¼Ñ Ð¿Ñедполагаемой ÑÑÑноÑÑÑÑ Â«_SYSTEM». Так как Ð²Ð»Ð°Ð´ÐµÐ»ÐµÑ Ð¾Ð±ÑекÑа оÑлиÑаеÑÑÑ Ð¾Ñ Â«_SYSTEM», лиÑиÑÑ ÑÐµÐ±Ñ ÑÑиÑ
пÑав он не можеÑ.
СоглаÑно ÑÑандаÑÑÑ SQL, пÑаво Ñ Ð¿Ñавом пеÑедаÑи можно даÑÑ ÑÑбÑекÑÑ PUBLIC; однако Postgres Pro Ð¼Ð¾Ð¶ÐµÑ Ð´Ð°Ð²Ð°ÑÑ Ð¿Ñаво Ñ Ð¿Ñавом пеÑедаÑи ÑолÑко ÑолÑм.
СÑандаÑÑ SQL допÑÑÐºÐ°ÐµÑ Ð² пÑедложении GRANTED BY ÑолÑко Ñказание CURRENT_USER или CURRENT_ROLE. ÐÑÑгие ваÑианÑÑ Ð¾ÑноÑÑÑÑÑ Ðº ÑаÑÑиÑениÑм Postgres Pro.
Ð ÑÑандаÑÑе SQL пÑаво USAGE ÑаÑпÑоÑÑÑанÑеÑÑÑ Ð¸ на дÑÑгие ÑÐ¸Ð¿Ñ Ð¾Ð±ÑекÑов: набоÑÑ Ñимволов, пÑавила ÑоÑÑиÑовки и пÑеобÑазованиÑ.
Ð ÑÑандаÑÑе SQL пÑаво USAGE Ð´Ð»Ñ Ð¿Ð¾ÑледоваÑелÑноÑÑей ÑпÑавлÑÐµÑ Ð¸ÑполÑзованием вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ NEXT VALUE FOR, коÑоÑое ÑавнознаÑно ÑÑнкÑии nextval в Postgres Pro. ÐÑава SELECT и UPDATE Ð´Ð»Ñ Ð¿Ð¾ÑледоваÑелÑноÑÑей ÑвлÑÑÑÑÑ ÑаÑÑиÑениÑми Postgres Pro. То, ÑÑо пÑаво USAGE Ð´Ð»Ñ Ð¿Ð¾ÑледоваÑелÑноÑÑей ÑпÑавлÑÐµÑ Ð¸ÑполÑзованием ÑÑнкÑии currval, Ñак же оÑноÑиÑÑÑ Ðº ÑаÑÑиÑениÑм Postgres Pro (как и Ñама ÑÑнкÑиÑ).
ÐÑава Ð´Ð»Ñ Ð±Ð°Ð· даннÑÑ , ÑаблиÑнÑÑ Ð¿ÑоÑÑÑанÑÑв, ÑÑ ÐµÐ¼, ÑзÑков и паÑамеÑÑов конÑигÑÑаÑии оÑноÑÑÑÑÑ Ðº ÑаÑÑиÑениÑм Postgres Pro.