SET ROLE
SET ROLE â ÑÑÑановиÑÑ Ð¸Ð´ÐµÐ½ÑиÑикаÑÐ¾Ñ ÑекÑÑего полÑзоваÑÐµÐ»Ñ Ð² ÑÐ°Ð¼ÐºÐ°Ñ ÑеанÑа
СинÑакÑиÑ
SET [ SESSION | LOCAL ] ROLE имÑ_Ñоли
SET [ SESSION | LOCAL ] ROLE NONE
RESET ROLEÐпиÑание
ÐÑа команда менÑÐµÑ Ð¸Ð´ÐµÐ½ÑиÑикаÑÐ¾Ñ ÑекÑÑего полÑзоваÑÐµÐ»Ñ Ð² акÑивном ÑеанÑе SQL на имÑ_Ñоли. ÐÐ¼Ñ Ñоли Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð·Ð°Ð¿Ð¸Ñано в виде иденÑиÑикаÑоÑа или ÑÑÑоковой конÑÑанÑÑ. ÐоÑле SET ROLE, пÑава доÑÑÑпа Ð´Ð»Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´ SQL пÑовеÑÑÑÑÑÑ Ñак, как еÑли Ð±Ñ ÑÐµÐ°Ð½Ñ Ð¸Ð·Ð½Ð°ÑалÑно бÑл ÑÑÑановлен Ñ ÑÑим именем Ñоли.
УказÑÐ²Ð°Ñ Ð¾Ð¿ÑеделÑнное имÑ_Ñоли, ÑекÑÑий полÑзоваÑÐµÐ»Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ ÑвлÑÑÑÑÑ Ñленом ÑÑой Ñоли. (ÐÑли полÑзоваÑÐµÐ»Ñ ÑеанÑа ÑвлÑеÑÑÑ ÑÑпеÑполÑзоваÑелем, он Ð¼Ð¾Ð¶ÐµÑ Ð²ÑбÑаÑÑ Ð»ÑбÑÑ ÑолÑ.)
Ð£ÐºÐ°Ð·Ð°Ð½Ð¸Ñ SESSION и LOCAL дейÑÑвÑÑÑ Ð½Ð° ÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ñак же, как и на обÑÑнÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ SET.
SET ROLE NONE ÑÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð² каÑеÑÑве иденÑиÑикаÑоÑа ÑекÑÑего полÑзоваÑÐµÐ»Ñ Ð¸Ð´ÐµÐ½ÑиÑикаÑÐ¾Ñ ÑекÑÑего полÑзоваÑÐµÐ»Ñ ÑеанÑа, вÑдаваемÑй ÑÑнкÑией session_user. RESET ROLE ÑÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð² каÑеÑÑве иденÑиÑикаÑоÑа ÑекÑÑего полÑзоваÑÐµÐ»Ñ Ð·Ð½Ð°Ñение, заданное во вÑÐµÐ¼Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑÐµÐ½Ð¸Ñ Ð¿Ð°ÑамеÑÑами командной ÑÑÑоки либо командой ALTER ROLE или ALTER DATABASE. ÐÑли же Ñакое знаÑение не задано, в каÑеÑÑве иденÑиÑикаÑоÑа ÑекÑÑего полÑзоваÑÐµÐ»Ñ Ñак же ÑÑÑанавливаеÑÑÑ Ð¸Ð´ÐµÐ½ÑиÑикаÑÐ¾Ñ ÑекÑÑего полÑзоваÑÐµÐ»Ñ ÑеанÑа. ÐÑи ÑоÑÐ¼Ñ Ð¼Ð¾Ð³ÑÑ Ð²ÑполнÑÑÑÑÑ Ð»ÑбÑми полÑзоваÑелÑми.
ÐÑимеÑаниÑ
С помоÑÑÑ ÑÑой ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð¼Ð¾Ð¶Ð½Ð¾ как добавиÑÑ Ð¿Ñава, Ñак и огÑаниÑиÑÑ Ð¸Ñ
. ÐÑли ÑÐ¾Ð»Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ ÑеанÑа Ð¸Ð¼ÐµÐµÑ Ð°ÑÑибÑÑ INHERIT, она авÑомаÑиÑеÑки полÑÑÐ°ÐµÑ Ð¿Ñава вÑеÑ
Ñолей, на коÑоÑÑе Ð¼Ð¾Ð¶ÐµÑ Ð¿ÐµÑеклÑÑиÑÑÑÑ (Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ SET ROLE); в ÑÑом ÑлÑÑае SET ROLE ÑбиÑÐ°ÐµÑ Ð²Ñе пÑава, назнаÑеннÑе непоÑÑедÑÑвенно полÑзоваÑÐµÐ»Ñ ÑеанÑа и дÑÑгим ÑолÑм, в коÑоÑÑе он вклÑÑÑн, и оÑÑавлÑÐµÑ ÑолÑко пÑава, назнаÑеннÑе Ñказанной Ñоли. ÐÑли же ÑÐ¾Ð»Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ ÑеанÑа Ð¸Ð¼ÐµÐµÑ Ð°ÑÑибÑÑ NOINHERIT, SET ROLE ÑбиÑÐ°ÐµÑ Ð¿Ñава, назнаÑеннÑе непоÑÑедÑÑвенно полÑзоваÑÐµÐ»Ñ ÑеанÑа, и вмеÑÑо ниÑ
назнаÑÐ°ÐµÑ Ð¿Ñава, коÑоÑÑе Ð¸Ð¼ÐµÐµÑ ÑÐºÐ°Ð·Ð°Ð½Ð½Ð°Ñ ÑолÑ.
Ð ÑаÑÑноÑÑи, когда ÑÑпеÑполÑзоваÑÐµÐ»Ñ Ð¿ÐµÑеклÑÑаеÑÑÑ Ð½Ð° ÑÐ¾Ð»Ñ Ð½Ðµ ÑÑпеÑполÑзоваÑÐµÐ»Ñ (иÑполÑзÑÑ SET ROLE), он ÑеÑÑÐµÑ Ñвои пÑава ÑÑпеÑполÑзоваÑелÑ.
SET ROLE оказÑÐ²Ð°ÐµÑ Ð´ÐµÐ¹ÑÑвие, ÑÑавнимое Ñ SET SESSION AUTHORIZATION, но пÑовеÑка пÑав вÑполнÑеÑÑÑ Ð¿Ð¾-дÑÑгомÑ. Также SET SESSION AUTHORIZATION опÑеделÑеÑ, какие Ñоли ÑазÑеÑÐµÐ½Ñ Ð´Ð»Ñ Ð¿Ð¾ÑледÑÑÑей SET ROLE, Ñогда как пÑи Ñмене Ñолей командой SET ROLE Ð½Ð°Ð±Ð¾Ñ Ñолей, допÑÑÑимÑÑ
Ð´Ð»Ñ Ð¿Ð¾ÑледÑÑÑей ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ SET ROLE, не менÑеÑÑÑ.
SET ROLE не обÑабаÑÑÐ²Ð°ÐµÑ ÑеанÑовÑе пеÑеменнÑе, ÑказаннÑе в ÑвойÑÑваÑ
Ñоли (ALTER ROLE); они ÑÑÑанавливаÑÑÑÑ ÑолÑко пÑи подклÑÑении.
SET ROLE нелÑÐ·Ñ Ð¸ÑполÑзоваÑÑ Ð²Ð½ÑÑÑи ÑÑнкÑии Ñ Ñ
аÑакÑеÑиÑÑикой SECURITY DEFINER.
ÐÑимеÑÑ
SELECT SESSION_USER, CURRENT_USER; session_user | current_user --------------+-------------- peter | peter SET ROLE 'paul'; SELECT SESSION_USER, CURRENT_USER; session_user | current_user --------------+-------------- peter | paul
СовмеÑÑимоÑÑÑ
PostgreSQL пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð¸Ð´ÐµÐ½ÑиÑикаÑоÑÑ ("), Ñогда как ÑÑандаÑÑ SQL ÑÑебÑеÑ, ÑÑÐ¾Ð±Ñ Ð¸Ð¼Ñ Ñоли запиÑÑвалоÑÑ Ð² виде ÑÑÑоковой конÑÑанÑÑ. СÑандаÑÑ Ð½Ðµ позволÑÐµÑ Ð²ÑполнÑÑÑ ÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð² ÑÑанзакÑии; в PostgreSQL Ñакого огÑаниÑÐµÐ½Ð¸Ñ Ð½ÐµÑ, Ñак как Ð´Ð»Ñ Ð½ÐµÐ³Ð¾ Ð½ÐµÑ Ð¿ÑиÑинÑ. Ð£ÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð¸Ð¼Ñ_Ñоли"SESSION и LOCAL оÑноÑÑÑÑÑ Ðº ÑаÑÑиÑениÑм PostgreSQL, Ñак же, как и ÑинÑакÑÐ¸Ñ RESET.