postgresql – Postgres CREATEROLE对特定数据库的限制

postgresql – Postgres CREATEROLE对特定数据库的限制,第1张

概述在Postgres中,如何创建具有CREATEROLE权限的用户,但仅限于特定的DB / DB集? 我试过做: CREATE ROLE user WITH LOGIN PASSWORD 'password' NOCREATEDB CREATEROLE; 它是否正确?如何将CREATEROLE授予多个数据库? 似乎这不是一个简单的方法.但您可以使用安全定义器选项创建功能以实现所需的行为: creat 在Postgres中,如何创建具有CREATERolE权限的用户,但仅限于特定的DB / DB集?

我试过做:

CREATE RolE user WITH LOGIN PASSWORD 'password' NOCREATEDB CREATERolE;

它是否正确?如何将CREATERolE授予多个数据库?

解决方法 似乎这不是一个简单的方法.但您可以使用安全定义器选项创建功能以实现所需的行为:

create or replace function fn_create_role(p_name text,p_password text,p_databases text[]) returns voID  language plpgsql  security defineras $$begin  execute format('create role %I with login password %L;',p_name,p_password);  execute format('grant connect on database %s to %I',array_to_string(p_databases,','),p_name);  return;end $$;

以超级用户身份创建此功能.

然后,您可以使用NOCREATERolE选项创建角色,但向其授予此函数的EXECUTE特权,并使用它来创建其他角色.

注意:您需要从特定数据库的公共角色撤消连接选项,以禁止默认情况下角色连接到它们,例如:

revoke connect on database db1,db2 from public;

测试一下:

作为超级用户(在我的情况下,nd也拥有同名的架构)

postgres=# create database db1; create database db2;CREATE DATABASECREATE DATABASEpostgres=# revoke connect on database db1,db2 from public;REVOKEpostgres=# create role foo with login password 'bar' nocreatedb nocreaterole;CREATE RolEpostgres=# set role foo;SETpostgres=> create role win with login password 'amp' nocreatedb nocreaterole;ERROR:  permission denIEd to create rolepostgres=> set role nd;SETpostgres=# grant usage on schema nd to foo;GRANTpostgres=# grant execute on function nd.fn_create_role(text,text,text[]) to foo;GRANTpostgres=# set role foo;SETpostgres=> select nd.fn_create_role('win','amp','{db1}');┌────────────────┐│ fn_create_role │╞════════════════╡│                │└────────────────┘(1 row)

在终端:

$psql -h localhost -d db1 -U winPassword for user win: psql (9.6.3)SSL connection (protocol: TLSv1.2,cipher: ECDHE-RSA-AES256-GCM-SHA384,bits: 256,compression: off)Type "help" for help.win@db1=> \q$psql -h localhost -d db2 -U winPassword for user win: psql: FATAL:  permission denIEd for database "db2"DETAIL:  User does not have CONNECT privilege.
总结

以上是内存溢出为你收集整理的postgresql – Postgres CREATEROLE对特定数据库的限制全部内容,希望文章能够帮你解决postgresql – Postgres CREATEROLE对特定数据库的限制所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1161369.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存