使用参数以编程方式创建角色

问题描述 投票:0回答:1

我正在寻找一种方法来创建一个函数,该函数接收用户名和密码的两个参数,并创建一个只读的角色。我尝试过类似的东西:

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命令。在其他语句类型(通常称为实用程序语句)中,必须以文本方式插入值,即使它们只是数据值。

sql postgresql plpgsql
1个回答
2
投票

这是一个例子:

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

© www.soinside.com 2019 - 2024. All rights reserved.