使用参数以编程方式创建角色
Posted
技术标签:
【中文标题】使用参数以编程方式创建角色【英文标题】:Create role programmatically with parameters 【发布时间】:2017-04-20 18:43:16 【问题描述】:我正在寻找一种方法来创建一个函数,该函数接受用户名和密码的两个参数并使用它创建一个只读角色。我尝试过类似的方法:
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] 错误:“@”位置或附近的语法错误:151
我曾想过使用动态 SQL 来构造查询,但在这里遇到了这个问题 (https://www.postgresql.org/docs/9.1/static/plpgsql-statements.html):
参数符号的另一个限制是它们只能在 SELECT、INSERT、UPDATE 和 DELETE 命令。在其他语句类型中 (通常称为实用程序语句),您必须以文本方式插入值 即使它们只是数据值。
【问题讨论】:
【参考方案1】:这是一个例子:
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,这完全有效!你的名字应该是 Wow :)transaction_read_only
不是可以在与 create role
相同的语句中完成的吗?
不是真的,至少我从未尝试过,也没有记录 :)
更新了你的笔记并添加了几个我的作为 nota bene
非常感谢!我很欣赏 nota benes :)以上是关于使用参数以编程方式创建角色的主要内容,如果未能解决你的问题,请参考以下文章