20.1. Роли Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
Роли Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
конÑепÑÑалÑно полноÑÑÑÑ Ð¾ÑлиÑаÑÑÑÑ Ð¾Ñ Ð¿Ð¾Ð»ÑзоваÑелей опеÑаÑионной ÑиÑÑемÑ. Ðа пÑакÑике поддеÑжание ÑооÑвеÑÑÑÐ²Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñ Ð½Ð¸Ð¼Ð¸ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑдобнÑм, но не ÑвлÑеÑÑÑ Ð¾Ð±ÑзаÑелÑнÑм. Роли Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
ÑвлÑÑÑÑÑ Ð³Ð»Ð¾Ð±Ð°Ð»ÑнÑми Ð´Ð»Ñ Ð²Ñей ÑÑÑановки клаÑÑеÑа Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
(не Ð´Ð»Ñ Ð¾ÑделÑной Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
). ÐÐ»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñоли иÑполÑзÑеÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° SQL CREATE ROLE:
CREATE ROLE имÑ;
ÐдеÑÑ Ð¸Ð¼Ñ ÑооÑвеÑÑÑвÑÐµÑ Ð¿Ñавилам Ð¸Ð¼ÐµÐ½Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð´ÐµÐ½ÑиÑикаÑоÑов SQL: либо обÑÑное, без ÑпеÑиалÑнÑÑ
Ñимволов, либо в двойнÑÑ
кавÑÑкаÑ
. (Ðа пÑакÑике, к команде обÑÑно добавлÑÑÑÑÑ Ð´ÑÑгие ÑказаниÑ, Ñакие как LOGIN. ÐодÑобнее об ÑÑом ниже.) ÐÐ»Ñ ÑÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ñоли иÑполÑзÑеÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° DROP ROLE:
DROP ROLE имÑ;
ÐÐ»Ñ ÑдобÑÑва поÑÑавлÑÑÑÑÑ Ð¿ÑогÑÐ°Ð¼Ð¼Ñ createuser и dropuser, коÑоÑÑе ÑвлÑÑÑÑÑ Ð¾Ð±ÑÑÑками Ð´Ð»Ñ ÑÑÐ¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´ SQL и вÑзÑваÑÑÑÑ Ð¸Ð· командной ÑÑÑоки оболоÑки ÐС:
createuserимÑdropuserимÑ
ЧÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ ÑпиÑок ÑÑÑеÑÑвÑÑÑиÑ
Ñолей, обÑаÑиÑеÑÑ Ðº пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ pg_roles, напÑимеÑ:
SELECT rolname FROM pg_roles;
ÐеÑакоманда \du пÑогÑÐ°Ð¼Ð¼Ñ psql Ñакже полезна Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ ÑпиÑка ÑÑÑеÑÑвÑÑÑиÑ
Ñолей.
ÐÐ»Ñ Ð½Ð°ÑалÑной наÑÑÑойки клаÑÑеÑа Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
, ÑиÑÑема ÑÑÐ°Ð·Ñ Ð¿Ð¾Ñле иниÑиализаÑии вÑегда ÑодеÑÐ¶Ð¸Ñ Ð¾Ð´Ð½Ñ Ð¿ÑедопÑеделÑннÑÑ ÑолÑ. ÐÑа ÑÐ¾Ð»Ñ ÑвлÑеÑÑÑ ÑÑпеÑполÑзоваÑелем («superuser») и по ÑмолÑÐ°Ð½Ð¸Ñ (еÑли не изменено пÑи запÑÑке initdb) Ð¸Ð¼ÐµÐµÑ Ñакое же имÑ, как и полÑзоваÑÐµÐ»Ñ Ð¾Ð¿ÐµÑаÑионной ÑиÑÑемÑ, иниÑиализиÑÑÑÑий клаÑÑÐµÑ Ð±Ð°Ð· даннÑÑ
. ÐбÑÑно ÑÑа ÑÐ¾Ð»Ñ Ð½Ð°Ð·ÑваеÑÑÑ postgres. ÐÐ»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð´ÑÑгиÑ
Ñолей, внаÑале нÑжно подклÑÑиÑÑÑÑ Ñ ÑÑой ÑолÑÑ.
Ðаждое подклÑÑение к ÑеÑвеÑÑ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
вÑполнÑеÑÑÑ Ð¿Ð¾Ð´ именем конкÑеÑной Ñоли, и ÑÑа ÑÐ¾Ð»Ñ Ð¾Ð¿ÑеделÑÐµÑ Ð½Ð°ÑалÑнÑе пÑава доÑÑÑпа Ð´Ð»Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´, вÑполнÑемÑÑ
в ÑÑом Ñоединении. ÐÐ¼Ñ Ñоли Ð´Ð»Ñ ÐºÐ¾Ð½ÐºÑеÑного подклÑÑÐµÐ½Ð¸Ñ Ðº базе даннÑÑ
ÑказÑваеÑÑÑ ÐºÐ»Ð¸ÐµÐ½ÑÑкой пÑогÑаммой Ñ
аÑакÑеÑнÑм Ð´Ð»Ñ Ð½ÐµÑ ÑпоÑобом, Ñаким обÑазом иниÑииÑÑÑ Ð·Ð°Ð¿ÑÐ¾Ñ Ð½Ð° подклÑÑение. ÐапÑимеÑ, пÑогÑамма psql Ð´Ð»Ñ ÑÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ñоли иÑполÑзÑÐµÑ Ð°ÑгÑÐ¼ÐµÐ½Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ ÑÑÑоки -U. Ðногие пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¿ÑедполагаÑÑ, ÑÑо по ÑмолÑÐ°Ð½Ð¸Ñ Ð½Ñжно иÑполÑзоваÑÑ Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ð¾Ð¿ÐµÑаÑионной ÑиÑÑÐµÐ¼Ñ (вклÑÑÐ°Ñ createuser и psql). ÐоÑÑÐ¾Ð¼Ñ ÑаÑÑо бÑÐ²Ð°ÐµÑ ÑдобнÑм поддеÑживаÑÑ ÑооÑвеÑÑÑвие Ð¼ÐµÐ¶Ð´Ñ Ð¸Ð¼ÐµÐ½Ð°Ð¼Ð¸ Ñолей и именами полÑзоваÑелей опеÑаÑионной ÑиÑÑемÑ.
СпиÑок доÑÑÑпнÑÑ Ð´Ð»Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑÐµÐ½Ð¸Ñ Ñолей, коÑоÑÑй могÑÑ Ð¸ÑполÑзоваÑÑ ÐºÐ»Ð¸ÐµÐ½ÑÑ, опÑеделÑеÑÑÑ ÐºÐ¾Ð½ÑигÑÑаÑией аÑÑенÑиÑикаÑии, как опиÑÑвалоÑÑ Ð² Ðлаве 19. (ÐоÑÑÐ¾Ð¼Ñ ÐºÐ»Ð¸ÐµÐ½Ñ Ð½Ðµ огÑаниÑен ÑолÑко ÑолÑÑ, ÑооÑвеÑÑÑвÑÑÑей имени полÑзоваÑÐµÐ»Ñ Ð¾Ð¿ÐµÑаÑионной ÑиÑÑемÑ, Ñак же как и Ð¸Ð¼Ñ Ð´Ð»Ñ Ð²Ñ Ð¾Ð´Ð° Ð¼Ð¾Ð¶ÐµÑ Ð½Ðµ ÑооÑвеÑÑÑвоваÑÑ ÑеалÑÐ½Ð¾Ð¼Ñ Ð¸Ð¼ÐµÐ½Ð¸.) Так как Ñ ÑолÑÑ ÑвÑзан Ð½Ð°Ð±Ð¾Ñ Ð¿Ñав, доÑÑÑпнÑÑ Ð´Ð»Ñ ÐºÐ»Ð¸ÐµÐ½Ñа, в многополÑзоваÑелÑÑкой ÑÑеде ÑаÑпÑеделÑÑÑ Ð¿Ñава ÑледÑÐµÑ Ñ Ð¾ÑÑоÑожноÑÑÑÑ.