20.2. ÐÑÑибÑÑÑ Ñолей #
Ð Ð¾Ð»Ñ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ Ð¼Ð¾Ð¶ÐµÑ Ð¸Ð¼ÐµÑÑ Ð°ÑÑибÑÑÑ, опÑеделÑÑÑие ÐµÑ Ð¿Ð¾Ð»Ð½Ð¾Ð¼Ð¾ÑÐ¸Ñ Ð¸ взаимодейÑÑвие Ñ ÑиÑÑемой аÑÑенÑиÑикаÑии клиенÑов.
- ÐÑаво подклÑÑениÑ
ТолÑко Ñоли Ñ Ð°ÑÑибÑÑом
LOGINмогÑÑ Ð¸ÑполÑзоваÑÑÑÑ Ð´Ð»Ñ Ð½Ð°ÑалÑного подклÑÑÐµÐ½Ð¸Ñ Ðº базе даннÑÑ . Ð Ð¾Ð»Ñ Ñ Ð°ÑÑибÑÑомLOGINможно ÑаÑÑмаÑÑиваÑÑ ÐºÐ°Ðº полÑзоваÑÐµÐ»Ñ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ . ÐÐ»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñакой Ñоли можно иÑполÑзоваÑÑ Ð»Ñбой из ваÑианÑов:CREATE ROLE
имÑLOGIN; CREATE USERимÑ;(Ðоманда
CREATE USERÑквиваленÑнаCREATE ROLEза иÑклÑÑением Ñого, ÑÑоCREATE USERпо ÑмолÑÐ°Ð½Ð¸Ñ Ð²ÐºÐ»ÑÑÐ°ÐµÑ Ð°ÑÑибÑÑLOGIN, в Ñо вÑÐµÐ¼Ñ ÐºÐ°ÐºCREATE ROLEâ неÑ.)- СÑаÑÑÑ ÑÑпеÑполÑзоваÑелÑ
СÑпеÑполÑзоваÑÐµÐ»Ñ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ Ð¾Ð±Ñ Ð¾Ð´Ð¸Ñ Ð²Ñе пÑовеÑки пÑав доÑÑÑпа, за иÑклÑÑением пÑава на Ð²Ñ Ð¾Ð´ в ÑиÑÑемÑ. ÐÑо опаÑÐ½Ð°Ñ Ð¿ÑÐ¸Ð²Ð¸Ð»ÐµÐ³Ð¸Ñ Ð¸ она не должна иÑполÑзоваÑÑÑÑ Ð½ÐµÐ±Ñежно. ÐÑÑÑе вÑего вÑполнÑÑÑ Ð±Ð¾Ð»ÑÑÑÑ ÑаÑÑÑ ÑабоÑÑ Ð½Ðµ как ÑÑпеÑполÑзоваÑелÑ. ÐÐ»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ ÑÑпеÑполÑзоваÑÐµÐ»Ñ Ð¸ÑполÑзÑеÑÑÑ
CREATE ROLE. ÐÑо нÑжно вÑполниÑÑ Ð¸Ð· под Ñоли, коÑоÑÐ°Ñ Ñакже ÑвлÑеÑÑÑ ÑÑпеÑполÑзоваÑелем.имÑSUPERUSER- Создание Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
Ð Ð¾Ð»Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° Ñвно имеÑÑ ÑазÑеÑение на Ñоздание Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ (за иÑклÑÑением ÑÑпеÑполÑзоваÑелей, коÑоÑÑе пÑопÑÑкаÑÑ Ð²Ñе пÑовеÑки). ÐÐ»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñакой Ñоли иÑполÑзÑеÑÑÑ
CREATE ROLE.имÑCREATEDB- Создание Ñоли
Ð Ð¾Ð»Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° Ñвно имеÑÑ ÑазÑеÑение на Ñоздание дÑÑÐ³Ð¸Ñ Ñолей (за иÑклÑÑением ÑÑпеÑполÑзоваÑелей, коÑоÑÑе пÑопÑÑкаÑÑ Ð²Ñе пÑовеÑки). ÐÐ»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñакой Ñоли иÑполÑзÑеÑÑÑ
CREATE ROLE. Ð Ð¾Ð»Ñ Ñ Ð¿ÑавомимÑCREATEROLECREATEROLEÐ¼Ð¾Ð¶ÐµÑ Ð¸Ð·Ð¼ÐµÐ½ÑÑÑ Ð¸ ÑдалÑÑÑ Ñоли, коÑоÑÑе бÑли назнаÑÐµÐ½Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ñ Ð¿ÑавамиCREATEROLEиADMIN OPTION. Такое назнаÑение Ñолей пÑоиÑÑ Ð¾Ð´Ð¸Ñ Ð°Ð²ÑомаÑиÑеÑки, когда полÑзоваÑÐµÐ»Ñ Ñ Ð¿ÑавомCREATEROLE, не ÑвлÑÑÑийÑÑ ÑÑпеÑполÑзоваÑелем, ÑоздаÑÑ Ð½Ð¾Ð²ÑÑ ÑолÑ. ÐоÑÑÐ¾Ð¼Ñ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ñ Ð¿ÑавомCREATEROLEÐ¼Ð¾Ð¶ÐµÑ Ð¸Ð·Ð¼ÐµÐ½ÑÑÑ Ð¸ ÑдалÑÑÑ ÑозданнÑе им Ñоли. Ðзменение Ñоли вклÑÑÐ°ÐµÑ Ð±Ð¾Ð»ÑÑинÑÑво дейÑÑвий командÑALTER ROLE, напÑÐ¸Ð¼ÐµÑ ÑÐ¼ÐµÐ½Ñ Ð¿Ð°ÑолÑ, а Ñакже дейÑÑÐ²Ð¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´COMMENTиSECURITY LABELв оÑноÑении Ñолей.Ðднако, Ð¸Ð¼ÐµÑ Ð¿Ñаво
CREATEROLE, нелÑÐ·Ñ Ð½Ð¸ ÑоздаваÑÑ, ни каким-либо обÑазом влиÑÑÑ Ð½Ð° ÑолиSUPERUSER. ÐÑоме Ñого, Ñ Ð¿ÑавомCREATEROLEнелÑÐ·Ñ Ð½Ð¸ ÑоздаваÑÑ Ð¿Ð¾Ð»ÑзоваÑелейREPLICATION, ни пÑедоÑÑавлÑÑÑ Ð¸Ð»Ð¸ оÑзÑваÑÑ Ð¿ÑавоREPLICATION, ни изменÑÑÑ ÑвойÑÑва Ñолей ÑÐ°ÐºÐ¸Ñ Ð¿Ð¾Ð»ÑзоваÑелей. Тем не менее, ÑÑо пÑаво позволÑÐµÑ Ð¸ÑполÑзоваÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´ÑALTER ROLE ... SETиALTER ROLE ... RENAMEв оÑноÑении ÑолейREPLICATION, а ÑакжеCOMMENT ON ROLE,SECURITY LABEL ON ROLEиDROP ROLE. ÐаконеÑ, пÑавоCREATEROLEне даÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑи пÑедоÑÑавлÑÑÑ Ð¸Ð»Ð¸ оÑзÑваÑÑ Ð¿ÑавоBYPASSRLS.- ÐапÑÑк ÑепликаÑии
Ð Ð¾Ð»Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° имеÑÑ Ñвное ÑазÑеÑение на запÑÑк поÑоковой ÑепликаÑии (за иÑклÑÑением ÑÑпеÑполÑзоваÑелей, коÑоÑÑе пÑопÑÑкаÑÑ Ð²Ñе пÑовеÑки). РолÑ, иÑполÑзÑÐµÐ¼Ð°Ñ Ð´Ð»Ñ Ð¿Ð¾Ñоковой ÑепликаÑии, Ñакже должна имеÑÑ Ð°ÑÑибÑÑ
LOGIN. ÐÐ»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñакой Ñоли иÑполÑзÑеÑÑÑCREATE ROLE.имÑREPLICATION LOGIN- ÐаÑолÑ
ÐаÑÐ¾Ð»Ñ Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение, еÑли меÑод аÑÑенÑиÑикаÑии клиенÑов ÑÑебÑеÑ, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑзоваÑели пÑедоÑÑавлÑли паÑÐ¾Ð»Ñ Ð¿Ñи подклÑÑении к базе даннÑÑ . ÐеÑÐ¾Ð´Ñ Ð°ÑÑенÑиÑикаÑии
passwordиmd5иÑполÑзÑÑÑ Ð¿Ð°Ñоли. Ðаза даннÑÑ Ð¸ опеÑаÑÐ¸Ð¾Ð½Ð½Ð°Ñ ÑиÑÑема иÑполÑзÑÑÑ ÑазделÑнÑе паÑоли. ÐаÑÐ¾Ð»Ñ ÑказÑваеÑÑÑ Ð¿Ñи Ñоздании Ñоли:CREATE ROLE.имÑPASSWORD 'ÑÑÑока'- ÐаÑледование пÑав
Ðо ÑмолÑÐ°Ð½Ð¸Ñ ÑÐ¾Ð»Ñ Ð½Ð°ÑледÑÐµÑ Ð¿Ñава Ñолей, Ñленом коÑоÑÑÑ Ð¾Ð½Ð° ÑвлÑеÑÑÑ. Ðднако можно ÑоздаÑÑ ÑолÑ, коÑоÑÐ°Ñ Ð½Ðµ бÑÐ´ÐµÑ Ð½Ð°ÑледоваÑÑ Ð¿Ñава по ÑмолÑаниÑ. ÐÐ»Ñ ÑÑого вÑполниÑе
CREATE ROLE. Ðак ваÑианÑ, аÑÑибÑÑÑ Ð½Ð°ÑÐ»ÐµÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¾ÑделÑнÑÑ Ð¿Ñав можно пеÑеопÑеделиÑÑ, ÑказавимÑNOINHERITWITH INHERIT TRUEилиWITH INHERIT FALSE.- ÐгноÑиÑование заÑиÑÑ Ð½Ð° ÑÑовне ÑÑÑок
РазÑеÑение Ð¾Ð±Ñ Ð¾Ð´Ð¸ÑÑ Ð²Ñе полиÑики заÑиÑÑ Ð½Ð° ÑÑовне ÑÑÑок (RLS) нÑжно даваÑÑ Ñоли Ñвно. СоздаÑÑ ÑÐ¾Ð»Ñ Ñ Ñаким ÑазÑеÑением можно, вÑполнив
CREATE ROLEÐ¾Ñ Ð¸Ð¼ÐµÐ½Ð¸ ÑÑпеÑполÑзоваÑелÑ.имÑBYPASSRLS- ÐгÑаниÑение Ñоединений
ÐÐ»Ñ Ñоли можно огÑаниÑиÑÑ ÑиÑло одновÑеменнÑÑ Ñоединений. -1 (по ÑмолÑаниÑ) ознаÑÐ°ÐµÑ Ð¾ÑÑÑÑÑÑвие огÑаниÑениÑ. ÐÐ»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñоли Ñ Ð¾Ð³ÑаниÑением иÑполÑзÑеÑÑÑ
CREATE ROLE.nameCONNECTION LIMIT 'ÑиÑло'
ÐÑÑибÑÑÑ Ñолей могÑÑ Ð±ÑÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ñ Ð¿Ð¾Ñле ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹ ALTER ROLE. Ðолее деÑалÑÐ½Ð°Ñ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð² ÑпÑавке по командам CREATE ROLE и ALTER ROLE.
Ðа ÑÑовне Ñолей можно ÑÑÑанавливаÑÑ Ð¼Ð½Ð¾Ð³Ð¸Ðµ конÑигÑÑаÑионнÑе паÑамеÑÑÑ Ð²Ñемени вÑполнениÑ, опиÑаннÑе в Ðлаве 18. ÐапÑимеÑ, еÑли по некоÑоÑÑм пÑиÑинам вÑÑкий Ñаз пÑи подклÑÑении к базе даннÑÑ ÑÑебÑеÑÑÑ Ð¾ÑклÑÑиÑÑ Ð¸ÑполÑзование индекÑов (подÑказка: Ð¿Ð»Ð¾Ñ Ð°Ñ Ð¸Ð´ÐµÑ), можно вÑполниÑÑ:
ALTER ROLE myname SET enable_indexscan TO off;
УÑÑановленное знаÑение паÑамеÑÑа бÑÐ´ÐµÑ ÑоÑ
Ñанено (но не бÑÐ´ÐµÑ Ð¿Ñименено ÑÑазÑ). ÐÐ»Ñ Ð¿Ð¾ÑледÑÑÑиÑ
подклÑÑений Ñ ÑÑой ÑолÑÑ ÑÑо бÑÐ´ÐµÑ Ð²ÑглÑдеÑÑ ÐºÐ°Ðº вÑполнение ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ SET enable_indexscan TO off пеÑед наÑалом ÑеанÑа. Ðо ÑÑо ÑолÑко знаÑение по ÑмолÑаниÑ; в ÑеÑение ÑеанÑа ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ измениÑÑ. ÐÐ»Ñ ÑÐ´Ð°Ð»ÐµÐ½Ð¸Ñ ÑÑÑановок на ÑÑовне Ñолей Ð´Ð»Ñ Ð¿Ð°ÑамеÑÑов конÑигÑÑаÑии иÑполÑзÑеÑÑÑ ALTER ROLE . ÐбÑаÑиÑе внимание, ÑÑо ÑÑÑановка паÑамеÑÑов конÑигÑÑаÑии на ÑÑовне Ñоли без пÑава имÑ_Ñоли RESET имÑ_пеÑеменнойLOGIN лиÑено ÑмÑÑла, Ñ. к. они никогда не бÑдÑÑ Ð¿ÑимененÑ.
Ðогда не ÑÑпеÑполÑзоваÑÐµÐ»Ñ Ñ Ð¿Ñавом CREATEROLE ÑоздаÑÑ ÑолÑ, ÑоздаÑÑÐ°Ñ ÑÐ¾Ð»Ñ Ð°Ð²ÑомаÑиÑеÑки полÑÑÐ°ÐµÑ ÑленÑÑво в Ñоздаваемой, как еÑли Ð±Ñ Ð½Ð°ÑалÑнÑй ÑÑпеÑполÑзоваÑÐµÐ»Ñ Ð²Ñполнил ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ GRANT created_user TO creating_user WITH ADMIN TRUE, SET FALSE, INHERIT FALSE. ÐоÑколÑÐºÑ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ñ Ð¿Ñавом CREATEROLE Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð»ÑзоваÑÑÑÑ ÑпеÑиалÑнÑми пÑавами в оÑноÑении ÑÑÑеÑÑвÑÑÑей Ñоли ÑолÑко пÑи налиÑии аÑÑибÑÑа ADMIN OPTION, Ñакого пÑава вполне доÑÑаÑоÑно Ð´Ð»Ñ Ñого, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ñ Ð¿Ñавом CREATEROLE мог админиÑÑÑиÑоваÑÑ ÑозданнÑÑ Ð¸Ð¼ ÑолÑ. Тем не менее, поÑколÑÐºÑ ÑÐ¾Ð»Ñ ÑоздаÑÑÑÑ Ñ Ð°ÑÑибÑÑами INHERIT FALSE, SET FALSE, полÑзоваÑÐµÐ»Ñ Ñ Ð¿Ñавом CREATEROLE не бÑÐ´ÐµÑ Ð½Ð°ÑледоваÑÑ Ð¿Ñава Ñозданной Ñоли и не ÑÐ¼Ð¾Ð¶ÐµÑ Ð¿ÐµÑеклÑÑиÑÑÑÑ Ð½Ð° Ð½ÐµÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ SET ROLE. Ðднако поÑколÑÐºÑ Ð»Ñбой полÑзоваÑÐµÐ»Ñ Ñ Ð¿Ñавом ADMIN OPTION Ð´Ð»Ñ Ñоли Ð¼Ð¾Ð¶ÐµÑ ÑазÑеÑаÑÑ ÑленÑÑво в ÑÑой Ñоли лÑбÑм полÑзоваÑелÑм, полÑзоваÑÐµÐ»Ñ Ñ Ð¿Ñавом CREATEROLE Ð¼Ð¾Ð¶ÐµÑ ÑÑаÑÑ Ñленом Ñозданной им Ñоли, пÑоÑÑо назнаÑив ÑÑÑ ÑÐ¾Ð»Ñ Ð½Ð° ÑÐµÐ±Ñ Ð¿Ñи помоÑи INHERIT и/или SET. ÐоÑÑÐ¾Ð¼Ñ ÑÐ°ÐºÑ Ñого, ÑÑо пÑава не наÑледÑÑÑÑÑ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ Ð¸ ÑÑо пÑаво не назнаÑаеÑÑÑ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹ SET ROLE, â ÑÑо ÑпоÑоб огÑадиÑÑÑÑ Ð¾Ñ ÑлÑÑайнÑÑ
оÑибок, а не ÑÑедÑÑво заÑиÑÑ. ÐÑоме Ñого, обÑаÑиÑе внимание, ÑÑо ÑÑо пÑаво авÑомаÑиÑеÑки вÑдаÑÑÑÑ Ð¾Ñ Ð¸Ð¼ÐµÐ½Ð¸ наÑалÑного ÑÑпеÑполÑзоваÑелÑ, поÑÑÐ¾Ð¼Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ñ Ð¿Ñавом CREATEROLE не ÑÐ¼Ð¾Ð¶ÐµÑ ÑдалиÑÑ Ð¸Ð»Ð¸ измениÑÑ ÐµÐ³Ð¾. Тем не менее лÑбой ÑÑпеÑполÑзоваÑÐµÐ»Ñ Ð¼Ð¾Ð¶ÐµÑ Ð¾ÑозваÑÑ, модиÑиÑиÑоваÑÑ Ð¸/или вÑдаÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑно Ñакие пÑава дÑÑгим полÑзоваÑелÑм Ñ Ð¿Ñавом CREATEROLE. ÐÑбой полÑзоваÑÐµÐ»Ñ Ñ Ð¿Ñавами CREATEROLE и ADMIN OPTION в ÑÑой Ñоли Ð¼Ð¾Ð¶ÐµÑ ÐµÑ Ð°Ð´Ð¼Ð¸Ð½Ð¸ÑÑÑиÑоваÑÑ.