CREATE ROLE
CREATE ROLE â ÑоздаÑÑ ÑÐ¾Ð»Ñ Ð² базе даннÑÑ
СинÑакÑиÑ
CREATE ROLEимÑ[ [ WITH ]паÑамеÑÑ[ ... ] ] ÐдеÑÑпаÑамеÑÑ: SUPERUSER | NOSUPERUSER | CREATEDB | NOCREATEDB | CREATEROLE | NOCREATEROLE | INHERIT | NOINHERIT | LOGIN | NOLOGIN | REPLICATION | NOREPLICATION | BYPASSRLS | NOBYPASSRLS | CONNECTION LIMITпÑедел_подклÑÑений| [ ENCRYPTED ] PASSWORD 'паÑолÑ' | PASSWORD NULL | VALID UNTIL 'даÑа_вÑемÑ' | IN ROLEимÑ_Ñоли[, ...] | ROLEимÑ_Ñоли[, ...] | ADMINимÑ_Ñоли[, ...] | SYSIDuid
ÐпиÑание
CREATE ROLE добавлÑÐµÑ Ð½Ð¾Ð²ÑÑ ÑÐ¾Ð»Ñ Ð² клаÑÑÐµÑ Ð±Ð°Ð· даннÑÑ
PostgreSQL. Ð Ð¾Ð»Ñ â ÑÑо ÑÑÑноÑÑÑ, коÑоÑÐ°Ñ Ð¼Ð¾Ð¶ÐµÑ Ð²Ð»Ð°Ð´ÐµÑÑ Ð¾Ð±ÑекÑами и имеÑÑ Ð¾Ð¿ÑеделÑннÑе пÑава в базе; ÑÐ¾Ð»Ñ Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑедÑÑавлÑÑÑ Â«Ð¿Ð¾Ð»ÑзоваÑелÑ», «гÑÑппÑ» или и Ñо, и дÑÑгое, в завиÑимоÑÑи Ð¾Ñ Ð²Ð°ÑианÑа иÑполÑзованиÑ. Ðа инÑоÑмаÑией об ÑпÑавлении полÑзоваÑелÑми и пÑовеÑке подлинноÑÑи обÑаÑиÑеÑÑ Ðº Ðлаве 21 и Ðлаве 20. ЧÑÐ¾Ð±Ñ Ð²ÑполниÑÑ ÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ, необÑ
одимо бÑÑÑ ÑÑпеÑполÑзоваÑелем или имеÑÑ Ð¿Ñаво CREATEROLE.
УÑÑиÑе, ÑÑо Ñоли опÑеделÑÑÑÑÑ Ð½Ð° ÑÑовне клаÑÑеÑа баз даннÑÑ , Ñак ÑÑо они дейÑÑвÑÑÑ Ð²Ð¾ вÑÐµÑ Ð±Ð°Ð·Ð°Ñ Ð² клаÑÑеÑе.
Ðо вÑÐµÐ¼Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñоли можно ÑÑÐ°Ð·Ñ Ð½Ð°Ð·Ð½Ð°ÑиÑÑ ÑоздаваемÑÑ ÑÐ¾Ð»Ñ Ñленом ÑÑÑеÑÑвÑÑÑей Ñоли, а Ñакже назнаÑиÑÑ ÑÑÑеÑÑвÑÑÑие Ñоли Ñленами Ñоздаваемой Ñоли. ÐÑавила, по коÑоÑÑм вклÑÑаÑÑÑÑ Ð½Ð°ÑалÑнÑе паÑамеÑÑÑ ÑленÑÑва в Ñоли, опиÑÐ°Ð½Ñ Ð½Ð¸Ð¶Ðµ в пÑедложениÑÑ
IN ROLE, ROLE и ADMIN. Ðоманда GRANT позволÑÐµÑ ÑпÑавлÑÑÑ Ð½Ð°Ð·Ð½Ð°Ñением Ñленов Ñолей и даÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð¸Ð·Ð¼ÐµÐ½ÑÑÑ ÑÑи паÑамеÑÑÑ Ð¿Ð¾Ñле ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð¹ Ñоли.
ÐаÑамеÑÑÑ
имÑÐÐ¼Ñ Ñоздаваемой Ñоли.
SUPERUSERNOSUPERUSERÐÑи пÑÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¾Ð¿ÑеделÑÑÑ, бÑÐ´ÐµÑ Ð»Ð¸ ÑÑа ÑÐ¾Ð»Ñ Â«ÑÑпеÑполÑзоваÑелем», коÑоÑÑй Ð¼Ð¾Ð¶ÐµÑ Ð¿ÐµÑеопÑеделиÑÑ Ð²Ñе огÑаниÑÐµÐ½Ð¸Ñ Ð´Ð¾ÑÑÑпа в базе даннÑÑ . СÑаÑÑÑ ÑÑпеÑполÑзоваÑÐµÐ»Ñ Ð½ÐµÑÑÑ Ð¾Ð¿Ð°ÑноÑÑÑ Ð¸ назнаÑаÑÑ ÐµÐ³Ð¾ ÑледÑÐµÑ ÑолÑко в ÑлÑÑае Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ÑÑи. СоздаÑÑ Ð½Ð¾Ð²Ð¾Ð³Ð¾ ÑÑпеÑполÑзоваÑÐµÐ»Ñ Ð¼Ð¾Ð¶ÐµÑ ÑолÑко ÑÑпеÑполÑзоваÑелÑ. РоÑÑÑÑÑÑвие ÑÑÐ¸Ñ Ð¿Ñедложений по ÑмолÑÐ°Ð½Ð¸Ñ Ð¿Ð¾Ð´ÑазÑмеваеÑÑÑ
NOSUPERUSER.CREATEDBNOCREATEDBÐÑи пÑÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¾Ð¿ÑеделÑÑÑ, ÑÐ¼Ð¾Ð¶ÐµÑ Ð»Ð¸ ÑÐ¾Ð»Ñ ÑоздаваÑÑ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ . Указание
CREATEDBдаÑÑ Ð½Ð¾Ð²Ð¾Ð¹ Ñоли ÑÑо пÑаво, аNOCREATEDBзапÑеÑÐ°ÐµÑ Ñоли ÑоздаваÑÑ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ . Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¿Ð¾Ð´ÑазÑмеваеÑÑÑNOCREATEDB. ТолÑко ÑÑпеÑполÑзоваÑели или Ñоли Ñ Ð¿ÑавомCREATEDBмогÑÑ ÑказÑваÑÑCREATEDB.CREATEROLENOCREATEROLEÐÑи пÑÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¾Ð¿ÑеделÑÑÑ, ÑÐ¼Ð¾Ð¶ÐµÑ Ð»Ð¸ ÑÐ¾Ð»Ñ ÑоздаваÑÑ, изменÑÑÑ Ð¸ ÑдалÑÑÑ Ð´ÑÑгие Ñоли, добавлÑÑÑ Ð´Ð»Ñ Ð½Ð¸Ñ ÐºÐ¾Ð¼Ð¼ÐµÐ½ÑаÑии и изменÑÑÑ Ð¼ÐµÑÐºÑ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи в лÑбÑÑ ÑолÑÑ . ÐодÑобнее возможноÑÑи, пÑедоÑÑавлÑемÑе ÑÑим пÑавом, опиÑÐ°Ð½Ñ Ð² Создание Ñоли. ÐÑли пÑедложение не Ñказано, по ÑмолÑÐ°Ð½Ð¸Ñ Ð¸ÑполÑзÑеÑÑÑ
NOCREATEROLE.INHERITNOINHERITÐÑи пÑÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð²Ð»Ð¸ÑÑÑ Ð½Ð° ÑÑаÑÑÑ Ð½Ð°ÑÐ»ÐµÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ ÑленÑÑва, когда Ð´Ð°Ð½Ð½Ð°Ñ ÑÐ¾Ð»Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÑеÑÑÑ ÐºÐ°Ðº Ñлен дÑÑгой Ñоли, как в ÑекÑÑей, Ñак и в бÑдÑÑÐ¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð°Ñ . Ð ÑаÑÑноÑÑи, они конÑÑолиÑÑÑÑ ÑÑаÑÑÑ Ð½Ð°ÑÐ»ÐµÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ ÑленÑÑва, добавленного ÑÑой командой Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¿ÑедложениÑ
IN ROLE, а в более Ð¿Ð¾Ð·Ð´Ð½Ð¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð°Ñ â Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¿ÑедложениÑROLE. Ðни Ñакже иÑполÑзÑÑÑÑÑ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ Ð´Ð»Ñ ÑÑаÑÑÑа наÑÐ»ÐµÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ñи добавлении данной Ñоли в каÑеÑÑве Ñлена Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´ÑGRANT. ÐÑли пÑедложение не Ñказано, по ÑмолÑÐ°Ð½Ð¸Ñ Ð¸ÑполÑзÑеÑÑÑINHERIT.РвеÑÑиÑÑ PostgreSQL до 16 наÑледование бÑло аÑÑибÑÑом на ÑÑовне Ñоли, коÑоÑÑй ÑпÑавлÑл Ð´Ð»Ñ ÑÑой Ñоли вÑеми пÑовеÑками ÑленÑÑва во вÑÐµÐ¼Ñ Ð²ÑполнениÑ.
LOGINNOLOGINÐÑи пÑÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¾Ð¿ÑеделÑÑÑ, ÑазÑеÑаеÑÑÑ Ð»Ð¸ новой Ñоли Ð²Ñ Ð¾Ð´ на ÑеÑвеÑ; Ñо еÑÑÑ, Ð¼Ð¾Ð¶ÐµÑ Ð»Ð¸ ÑÑа ÑÐ¾Ð»Ñ ÑÑаÑÑ Ð½Ð°ÑалÑнÑм авÑоÑизованнÑм именем пÑи подклÑÑении клиенÑа. Ðожно ÑÑиÑаÑÑ, ÑÑо ÑÐ¾Ð»Ñ Ñ Ð°ÑÑибÑÑом
LOGINÑооÑвеÑÑÑвÑÐµÑ Ð¿Ð¾Ð»ÑзоваÑелÑ. Роли без ÑÑого аÑÑибÑÑа бÑваÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ñ Ð´Ð»Ñ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð¾ÑÑÑпом в базе даннÑÑ , но ÑÑо не полÑзоваÑели в обÑÑном понимании. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¿Ð¾Ð´ÑазÑмеваеÑÑÑ Ð²Ð°ÑианÑNOLOGIN, за иÑклÑÑением вÑзоваCREATE ROLEв видеCREATE USER.REPLICATIONNOREPLICATIONÐÑи пÑÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¾Ð¿ÑеделÑÑÑ, бÑÐ´ÐµÑ Ð»Ð¸ ÑÐ¾Ð»Ñ ÑолÑÑ ÑепликаÑии. ЧÑÐ¾Ð±Ñ ÑÐ¾Ð»Ñ Ð¼Ð¾Ð³Ð»Ð° подклÑÑаÑÑÑÑ Ðº ÑеÑвеÑÑ Ð² Ñежиме ÑепликаÑии (в Ñежиме ÑизиÑеÑкой или логиÑеÑкой ÑепликаÑии) и ÑоздаваÑÑ/ÑдалÑÑÑ ÑлоÑÑ ÑепликаÑии, Ñ Ð½ÐµÑ Ð´Ð¾Ð»Ð¶ÐµÐ½ бÑÑÑ ÑÑÐ¾Ñ Ð°ÑÑибÑÑ (либо ÑÑо должна бÑÑÑ ÑÐ¾Ð»Ñ ÑÑпеÑполÑзоваÑелÑ). РолÑ, имеÑÑÐ°Ñ Ð°ÑÑибÑÑ
REPLICATION, Ð¾Ð±Ð»Ð°Ð´Ð°ÐµÑ Ð¾ÑÐµÐ½Ñ Ð±Ð¾Ð»ÑÑими пÑивилегиÑми и поÑÑÐ¾Ð¼Ñ ÑÑÐ¾Ñ Ð°ÑÑибÑÑ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¸Ð¼ÐµÑÑ ÑолÑко Ñоли, ÑакÑиÑеÑки иÑполÑзÑемÑе Ð´Ð»Ñ ÑепликаÑии. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¿Ð¾Ð´ÑазÑмеваеÑÑÑ Ð²Ð°ÑианÑNOREPLICATION. ÐÑдаваÑÑ Ð°ÑÑибÑÑREPLICATIONмогÑÑ ÑолÑко ÑÑпеÑполÑзоваÑели или Ñоли ÑREPLICATION.BYPASSRLSNOBYPASSRLSÐÑи пÑÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¾Ð¿ÑеделÑÑÑ, бÑдÑÑ Ð»Ð¸ Ð´Ð»Ñ Ñоли игноÑиÑоваÑÑÑÑ Ð²Ñе полиÑики заÑиÑÑ Ð½Ð° ÑÑовне ÑÑÑок (RLS). Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¿Ð¾Ð´ÑазÑмеваеÑÑÑ Ð²Ð°ÑианÑ
NOBYPASSRLS. ÐÑдаваÑÑ Ð°ÑÑибÑÑBYPASSRLSмогÑÑ ÑолÑко ÑÑпеÑполÑзоваÑели или Ñоли ÑBYPASSRLS.ÐамеÑÑÑе, ÑÑо pg_dump по ÑмолÑÐ°Ð½Ð¸Ñ Ð¾ÑклÑÑаеÑ
row_security(ÑÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð·Ð½Ð°ÑениеOFF), ÑÑÐ¾Ð±Ñ Ð³Ð°ÑанÑиÑованно бÑло вÑгÑÑжено вÑÑ ÑодеÑжимое ÑаблиÑÑ. ÐÑли полÑзоваÑелÑ, запÑÑкаÑÑий pg_dump, не бÑÐ´ÐµÑ Ð¸Ð¼ÐµÑÑ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼ÑÑ Ð¿Ñав, он полÑÑÐ¸Ñ Ð¾ÑибкÑ. Ðднако ÑÑпеÑполÑзоваÑели и Ð²Ð»Ð°Ð´ÐµÐ»ÐµÑ Ð²ÑгÑÑжаемой ÑаблиÑÑ Ð²Ñегда Ð¾Ð±Ñ Ð¾Ð´ÑÑ Ð·Ð°ÑиÑÑ RLS.CONNECTION LIMITпÑедел_подклÑÑенийÐÑли Ñоли ÑазÑеÑÑн Ð²Ñ Ð¾Ð´, ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¾Ð¿ÑеделÑеÑ, ÑколÑко паÑаллелÑнÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑений Ð¼Ð¾Ð¶ÐµÑ ÑÑÑановиÑÑ ÑолÑ. ÐнаÑение -1 (по ÑмолÑаниÑ) ÑÐ½Ð¸Ð¼Ð°ÐµÑ Ð¾Ð³ÑаниÑение. ÐамеÑÑÑе, ÑÑо под ÑÑо огÑаниÑение подпадаÑÑ ÑолÑко обÑÑнÑе подклÑÑениÑ. Ðи подгоÑовленнÑе ÑÑанзакÑии, ни ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ ÑоновÑÑ ÑабоÑÐ¸Ñ Ð¿ÑоÑеÑÑов в ÑаÑÑÑÑ Ð½Ðµ беÑÑÑÑÑ.
- [
ENCRYPTED]PASSWORD'паÑолÑ'PASSWORD NULL ÐадаÑÑ Ð¿Ð°ÑÐ¾Ð»Ñ Ñоли. (ÐаÑÐ¾Ð»Ñ Ð¿Ð¾Ð»ÐµÐ·ÐµÐ½ ÑолÑко Ð´Ð»Ñ Ñолей Ñ Ð°ÑÑибÑÑом
LOGIN, но задаÑÑ ÐµÐ³Ð¾ можно и Ð´Ð»Ñ Ñолей без Ñакого аÑÑибÑÑа.) ÐÑли пÑовеÑка подлинноÑÑи по паÑÐ¾Ð»Ñ Ð½Ðµ бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ, ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ опÑÑÑиÑÑ. ÐÑи Ñказании пÑÑÑого знаÑÐµÐ½Ð¸Ñ Ð±ÑÐ´ÐµÑ Ð·Ð°Ð´Ð°Ð½ паÑÐ¾Ð»Ñ NULL, ÑÑо не Ð¿Ð¾Ð·Ð²Ð¾Ð»Ð¸Ñ Ð´Ð°Ð½Ð½Ð¾Ð¼Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ð¿ÑойÑи пÑовеÑÐºÑ Ð¿Ð¾Ð´Ð»Ð¸Ð½Ð½Ð¾ÑÑи по паÑолÑ. ÐÑи желании паÑÐ¾Ð»Ñ NULL можно ÑÑÑановиÑÑ Ñвно, ÑказавPASSWORD NULL.ÐÑимеÑание
ÐÑли задана пÑÑÑÐ°Ñ ÑÑÑока, паÑÐ¾Ð»Ñ Ñакже бÑÐ´ÐµÑ ÑбÑоÑен в NULL, но в PostgreSQL до веÑÑии 10 бÑло не Ñак. Ð ÑÐ°Ð½Ð½Ð¸Ñ Ð²ÐµÑÑиÑÑ Ð¿ÑÑÑÐ°Ñ ÑÑÑока могла пÑинимаÑÑÑÑ Ð¸Ð»Ð¸ неÑ, в завиÑимоÑÑи Ð¾Ñ Ð¼ÐµÑода аÑÑенÑиÑикаÑии и веÑÑии ÑеÑвеÑа, а libpq не давала иÑполÑзоваÑÑ Ñакой паÑÐ¾Ð»Ñ Ð² лÑбом ÑлÑÑае. Ðо избежание неоднознаÑноÑÑи ÑказÑваÑÑ Ð¿ÑÑÑÑÑ ÑÑÑÐ¾ÐºÑ Ð² каÑеÑÑве паÑÐ¾Ð»Ñ Ð½Ðµ ÑледÑеÑ.
ÐаÑÐ¾Ð»Ñ Ð²Ñегда Ñ ÑаниÑÑÑ Ð² ÑиÑÑемнÑÑ ÐºÐ°ÑÐ°Ð»Ð¾Ð³Ð°Ñ Ð² заÑиÑÑованном виде. ÐлÑÑевое Ñлово
ENCRYPTEDне Ð¸Ð¼ÐµÐµÑ ÑÑÑекÑа, но пÑинимаеÑÑÑ Ð´Ð»Ñ Ð¾Ð±ÑаÑной ÑовмеÑÑимоÑÑи. ÐеÑод ÑиÑÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¾Ð¿ÑеделÑеÑÑÑ Ð¿Ð°ÑамеÑÑом конÑигÑÑаÑии password_encryption. ÐÑли пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð½Ð°Ñ ÑÑÑока паÑÐ¾Ð»Ñ Ñже заÑиÑÑована Ñ Ð¿Ñименением MD5 или SCRAM, она ÑÐ¾Ñ ÑанÑеÑÑÑ ÐºÐ°Ðº еÑÑÑ Ð²Ð½Ðµ завиÑимоÑÑи Ð¾Ñ Ð·Ð½Ð°ÑениÑpassword_encryption(Ñак как ÑиÑÑема не Ð¼Ð¾Ð¶ÐµÑ ÑаÑÑиÑÑоваÑÑ Ð¿ÐµÑеданнÑй заÑиÑÑованной паÑолÑ, ÑÑÐ¾Ð±Ñ Ð·Ð°ÑиÑÑоваÑÑ ÐµÐ³Ð¾ по дÑÑÐ³Ð¾Ð¼Ñ Ð°Ð»Ð³Ð¾ÑиÑмÑ). ÐÑо позволÑÐµÑ Ð¿ÐµÑеÑÐ¾Ñ ÑанÑÑÑ Ð·Ð°ÑиÑÑованнÑе паÑоли пÑи вÑгÑÑзке/воÑÑÑановлении.ÐÑедÑпÑеждение
ШиÑÑование паÑолей алгоÑиÑмом MD5 ÑÑиÑаеÑÑÑ ÑÑÑаÑевÑим и пеÑеÑÑÐ°Ð½ÐµÑ Ð¿Ð¾Ð´Ð´ÐµÑживаÑÑÑÑ Ð² одном из бÑдÑÑÐ¸Ñ Ð²ÑпÑÑков PostgreSQL. ÐбÑаÑиÑеÑÑ Ðº РазделÑ 20.5 за подÑобной инÑоÑмаÑией о Ñмене Ñипа паÑолей.
VALID UNTIL'даÑа_вÑемÑ'ÐÑедложение
VALID UNTILÑÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð´Ð°ÑÑ Ð¸ вÑемÑ, поÑле коÑоÑого паÑÐ¾Ð»Ñ Ñоли пеÑеÑÑаÑÑ Ð´ÐµÐ¹ÑÑвоваÑÑ. ÐÑли ÑÑо пÑедложение оÑÑÑÑÑÑвÑеÑ, ÑÑок дейÑÑÐ²Ð¸Ñ Ð¿Ð°ÑÐ¾Ð»Ñ Ð±ÑÐ´ÐµÑ Ð½ÐµÐ¾Ð³ÑаниÑеннÑм.IN ROLEимÑ_ÑолиС пÑедложением
IN ROLEÐ½Ð¾Ð²Ð°Ñ ÑÐ¾Ð»Ñ Ð°Ð²ÑомаÑиÑеÑки ÑÑановиÑÑÑ Ñленом ÑказаннÑÑ ÑÑÑеÑÑвÑÑÑÐ¸Ñ Ñолей. ÐÐ»Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ Ñлена бÑÐ´ÐµÑ Ð²ÐºÐ»ÑÑÑн аÑÑибÑÑSETи оÑклÑÑÑн аÑÑибÑÑADMIN. ÐÑÑибÑÑINHERITбÑÐ´ÐµÑ Ð²ÐºÐ»ÑÑÑн, еÑли не Ñказан аÑÑибÑÑNOINHERIT.ROLEимÑ_ÑолиС пÑедложением
ROLEодна или неÑколÑÐºÐ¸Ñ ÑказаннÑÑ ÑÑÑеÑÑвÑÑÑÐ¸Ñ Ñолей авÑомаÑиÑеÑки добавлÑÑÑÑÑ ÐºÐ°Ðº ÑÐ»ÐµÐ½Ñ Ð½Ð¾Ð²Ð¾Ð¹ Ñоли Ñ Ð²ÐºÐ»ÑÑÑннÑм аÑÑибÑÑомSET. ФакÑиÑеÑки ÑÑо Ð´ÐµÐ»Ð°ÐµÑ Ð½Ð¾Ð²ÑÑ ÑÐ¾Ð»Ñ Â«Ð³ÑÑппой». ÐÐ»Ñ Ñолей, ÑказаннÑÑ Ð² ÑÑом пÑедложении Ñ Ð°ÑÑибÑÑомINHERIT, бÑÐ´ÐµÑ Ð²ÐºÐ»ÑÑÑн аÑÑибÑÑINHERITв новом ÑленÑÑве. ÐÐ»Ñ Ð½Ð¾Ð²ÑÑ ÑÑаÑÑников аÑÑибÑÑADMINбÑÐ´ÐµÑ Ð¾ÑклÑÑÑн.ADMINимÑ_ÑолиÐÑедложение
ADMINÑабоÑÐ°ÐµÑ Ð¿Ð¾Ð´Ð¾Ð±Ð½Ð¾ROLE, но пеÑеÑиÑленнÑе в нÑм Ñоли добавлÑÑÑÑÑ ÐºÐ°Ðº ÑÐ»ÐµÐ½Ñ Ð½Ð¾Ð²Ð¾Ð¹ Ñоли Ñ Ð²ÐºÐ»ÑÑÑннÑм аÑÑибÑÑомADMIN, ÑÑо даÑÑ Ð¸Ð¼ пÑаво вклÑÑаÑÑ Ð² Ð½Ð¾Ð²Ð¾Ñ ÑÐ¾Ð»Ñ Ð´ÑÑгие Ñоли.SYSIDuidÐÑедложение
SYSIDигноÑиÑÑеÑÑÑ, но пÑинимаеÑÑÑ Ð´Ð»Ñ Ð¾Ð±ÑаÑной ÑовмеÑÑимоÑÑи.
ÐÑимеÑаниÑ
ÐÐ»Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð°ÑÑибÑÑов Ñоли пÑименÑеÑÑÑ ALTER ROLE, а Ð´Ð»Ñ ÑÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ñоли â DROP ROLE. ÐÑе аÑÑибÑÑÑ, заданнÑе в CREATE ROLE, могÑÑ Ð±ÑÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ñ Ð¿Ð¾Ð·Ð´Ð½ÐµÐµ командами ALTER ROLE.
ÐÐ»Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸ ÑÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ñленов Ñолей, иÑполÑзÑемÑÑ
в каÑеÑÑве гÑÑпп, ÑекомендÑеÑÑÑ Ð¸ÑполÑзоваÑÑ GRANT и REVOKE.
ÐÑедложение VALID UNTIL опÑеделÑÐµÑ ÑÑок дейÑÑÐ²Ð¸Ñ ÑолÑко паÑолÑ, но не Ñоли как Ñаковой. Ð ÑаÑÑноÑÑи, огÑаниÑение ÑÑока паÑÐ¾Ð»Ñ Ð½Ðµ дейÑÑвÑÐµÑ Ð¿Ñи вÑ
оде полÑзоваÑÐµÐ»Ñ Ð±ÐµÐ· пÑовеÑки подлинноÑÑи по паÑолÑ.
ÐпÑеделÑннÑе здеÑÑ Ð°ÑÑибÑÑÑ Ñоли не наÑледÑÑÑÑÑ, Ñ. е. ÑленÑÑво в Ñоли, напÑимеÑ, Ñ Ð¿Ñавом CREATEDB, не Ð¿Ð¾Ð·Ð²Ð¾Ð»Ð¸Ñ ÐµÑ ÑÑаÑÑÐ½Ð¸ÐºÑ ÑоздаваÑÑ Ð½Ð¾Ð²Ñе Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
, даже еÑли ÑленÑÑво бÑло вÑдано Ñ Ð°ÑÑибÑÑом INHERIT. РазÑмееÑÑÑ, еÑли в вÑдаÑе ÑленÑÑва еÑÑÑ Ð°ÑÑибÑÑ SET, ÑÐ¾Ð»Ñ ÑÑаÑÑника ÑÐ¼Ð¾Ð¶ÐµÑ Ð²ÑполниÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ SET ROLE Ð´Ð»Ñ Ñоли createdb, а заÑем ÑоздаÑÑ Ð½Ð¾Ð²ÑÑ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
.
ÐÑи вÑдаÑе ÑленÑÑва Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¿Ñедложений IN ROLE, ROLE и ADMIN пÑаводаÑелем ÑвлÑеÑÑÑ ÑолÑ, вÑполнÑÑÑÐ°Ñ ÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ.
ÐÑÑибÑÑ INHERIT ÑÑÑанавливаеÑÑÑ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ Ð² ÑелÑÑ
обÑаÑной ÑовмеÑÑимоÑÑи: в пÑедÑдÑÑиÑ
вÑпÑÑкаÑ
PostgreSQL полÑзоваÑели вÑегда обладали вÑеми пÑавами гÑÑпп, в коÑоÑÑе они бÑли вклÑÑенÑ. Ðднако NOINHERIT по ÑмÑÑÐ»Ñ Ð±Ð»Ð¸Ð¶Ðµ к ÑомÑ, ÑÑо опиÑано в ÑÑандаÑÑе SQL.
PostgreSQL вклÑÑÐ°ÐµÑ Ð¿ÑогÑÐ°Ð¼Ð¼Ñ createuser, коÑоÑÐ°Ñ Ð¿ÑедоÑÑавлÑÐµÑ ÑÑ Ð¶Ðµ ÑÑнкÑионалÑноÑÑÑ, ÑÑо и команда CREATE ROLE (на Ñамом деле она вÑзÑÐ²Ð°ÐµÑ ÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ), но Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð¿ÑÑкаÑÑÑÑ Ð² командной оболоÑке.
ÐгÑаниÑение CONNECTION LIMIT дейÑÑвÑÐµÑ ÑолÑко пÑиблизиÑелÑно; еÑли одновÑеменно запÑÑкаÑÑÑÑ Ð´Ð²Ð° ÑеанÑа, Ñогда как Ð´Ð»Ñ ÑÑой Ñоли оÑÑаÑÑÑÑ ÑолÑко одно «Ñвободное меÑÑо», Ð¼Ð¾Ð¶ÐµÑ Ñак ÑлÑÑиÑÑÑÑ, ÑÑо бÑдÑÑ Ð¾ÑÐºÐ»Ð¾Ð½ÐµÐ½Ñ Ð¾Ð±Ð° подклÑÑениÑ. ÐÑоме Ñого, ÑÑо огÑаниÑение не ÑаÑпÑоÑÑÑанÑеÑÑÑ Ð½Ð° ÑÑпеÑполÑзоваÑелей.
УказÑÐ²Ð°Ñ Ð² ÑÑой команде незаÑиÑÑованнÑй паÑолÑ, ÑледÑÐµÑ Ð¿ÑоÑвлÑÑÑ Ð¾ÑÑоÑожноÑÑÑ. ÐаÑÐ¾Ð»Ñ Ð±ÑÐ´ÐµÑ Ð¿ÐµÑедаваÑÑÑÑ Ð½Ð° ÑеÑÐ²ÐµÑ Ð¾ÑкÑÑÑÑм ÑекÑÑом и Ð¼Ð¾Ð¶ÐµÑ Ñакже запиÑÑваÑÑÑÑ Ð² иÑÑоÑÐ¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´ клиенÑа или в пÑоÑокол ÑабоÑÑ ÑеÑвеÑа. Ðоманда createuser, однако, пеÑедаÑÑ Ð¿Ð°ÑÐ¾Ð»Ñ Ð·Ð°ÑиÑÑованнÑм. ÐÑоме Ñого, в psql еÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° \password, Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ¾ÑоÑой можно безопаÑно ÑмениÑÑ Ð¿Ð°ÑÐ¾Ð»Ñ Ð¿Ð¾Ð·Ð¶Ðµ.
ÐÑимеÑÑ
Создание Ñоли, Ð´Ð»Ñ ÐºÐ¾ÑоÑой ÑазÑеÑÑн Ð²Ñ Ð¾Ð´, но не задан паÑолÑ:
CREATE ROLE jonathan LOGIN;
Создание Ñоли Ñ Ð¿Ð°Ñолем:
CREATE USER davide WITH PASSWORD 'jw8s0F4';
(CREATE USER дейÑÑвÑÐµÑ Ñак же, как CREATE ROLE, но подÑазÑÐ¼ÐµÐ²Ð°ÐµÑ ÐµÑÑ Ð¸ аÑÑибÑÑ LOGIN.)
Создание Ñоли Ñ Ð¿Ð°Ñолем, дейÑÑвÑÑÑим до конÑа 2004 г., Ñо еÑÑÑ Ð¿Ð°ÑÐ¾Ð»Ñ Ð¿ÐµÑеÑÑаÑÑ Ð´ÐµÐ¹ÑÑвоваÑÑ Ð² пеÑвÑÑ Ð¶Ðµ ÑекÑÐ½Ð´Ñ 2005 г.
CREATE ROLE miriam WITH LOGIN PASSWORD 'jw8s0F4' VALID UNTIL '2005-01-01';
Создание Ñоли, коÑоÑÐ°Ñ Ð¼Ð¾Ð¶ÐµÑ ÑоздаваÑÑ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ Ð¸ ÑпÑавлÑÑÑ ÑолÑми:
CREATE ROLE admin WITH CREATEDB CREATEROLE;
СовмеÑÑимоÑÑÑ
ÐпеÑаÑÐ¾Ñ CREATE ROLE опиÑан в ÑÑандаÑÑе SQL, но ÑÑандаÑÑ ÑÑебÑÐµÑ Ð¿Ð¾Ð´Ð´ÐµÑжки ÑолÑко ÑледÑÑÑего ÑинÑакÑиÑа:
CREATE ROLEимÑ[ WITH ADMINимÑ_Ñоли]
ÐозможноÑÑÑ ÑоздаваÑÑ Ð¼Ð½Ð¾Ð¶ÐµÑÑво наÑалÑнÑÑ
админиÑÑÑаÑоÑов и вÑе дÑÑгие паÑамеÑÑÑ CREATE ROLE оÑноÑÑÑÑÑ Ðº ÑаÑÑиÑениÑм PostgreSQL.
Ð ÑÑандаÑÑе SQL опÑеделÑÑÑÑÑ ÐºÐ¾Ð½ÑепÑии полÑзоваÑелей и Ñолей, но в нÑм они ÑаÑÑмаÑÑиваÑÑÑÑ ÐºÐ°Ðº оÑделÑнÑе ÑÑÑноÑÑи, а вÑе ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð»ÑзоваÑелей ÑÑиÑаÑÑÑÑ Ð²Ð½ÑÑÑенней ÑпеÑиÑикой СУÐÐ. Ð PostgreSQL Ð¼Ñ ÑеÑили обÑединиÑÑ Ð¿Ð¾Ð»ÑзоваÑелей и Ñоли в единÑÑ ÑÑÑноÑÑÑ, Ñак ÑÑо Ñоли полÑÑили дополниÑелÑнÑе аÑÑибÑÑÑ, не опиÑаннÑе в ÑÑандаÑÑе.
Ðаиболее близкое к опиÑÐ°Ð½Ð½Ð¾Ð¼Ñ Ð² ÑÑандаÑÑе SQL поведение можно полÑÑиÑÑ, еÑли ÑоздаваÑÑ Ð¿Ð¾Ð»ÑзоваÑелей по ÑÑандаÑÑÑ SQL как Ñоли PostgreSQL Ñ Ð°ÑÑибÑÑом NOINHERIT, а Ñоли по ÑÑандаÑÑÑ SQL как Ñоли PostgreSQL Ñ Ð°ÑÑибÑÑом INHERIT.
ÐÑедложение USER ÑвлÑеÑÑÑ ÑÑÑаÑевÑим аналогом пÑÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ ROLE:
USER имÑ_Ñоли [, ...]
ÐÑедложение IN GROUP ÑвлÑеÑÑÑ ÑÑÑаÑевÑим аналогом пÑÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ IN ROLE:
IN GROUP имÑ_Ñоли [, ...]