通过编程方式创建角色参数
问题描述:
我正在寻找一种方法来创建一个函数,该函数需要用户名和密码的两个参数并使用它创建一个只读角色。我已经试过类似:通过编程方式创建角色参数
create or replace function create_user_readonly (
unm varchar,
pwd varchar
)
returns varchar(10) as $$
begin
create role unm login password @pwd;
return 'success';
end;
$$ language plpgsql;
这引发错误:
[42601] ERROR: syntax error at or near "@" Position: 151
我想使用动态SQL构造查询,但遇到了这个位置(https://www.postgresql.org/docs/9.1/static/plpgsql-statements.html):
Another restriction on parameter symbols is that they only work in SELECT, INSERT, UPDATE, and DELETE commands. In other statement types (generically called utility statements), you must insert values textually even if they are just data values.
答
这里是一个例子:
create or replace function create_user_readonly (
unm varchar,
pwd varchar
)
returns varchar(10) as $$
begin
execute format($f$create role %I login password '%s'$f$,unm,pwd);
execute format('alter role %I set transaction_read_only to on',unm);
return 'success';
end;
$$ language plpgsql;
请记住,但您需要更改用户以设置transaction_read_only
也使其成为只读。 也:
CREATE ROLE
does not offer setting RO默认角色。
ALTER ROLE
does
而且记住,克服USET配置transaction_read_only
是运行一个语句一样简单。
并且创建角色将不会授予CONNECT
权限,请使用CREATE USER
代替,如果您需要的话。
谢谢Vao,完全有效!你的名字应该是哇:)是否'''transaction_read_only''不是可以在与'''create role'''相同的语句中完成的事情? – Anand
不是真的,至少我从来没有尝试过,它没有记录:) –
更新了你的笔记,并添加了几个我的nota bene –