我需要一个新用户,但应该授予其他现有用户/角色所具有的所有权限。
e.g。
如果创建了新用户B,我需要与
相同的权限不要问为什么:/
实际上,用户A对不同的表,模式和功能具有自定义权限;所以手动授予新用户权限是一个非常繁琐冗长的过程。任何帮助都会很好。
答案 0 :(得分:6)
答案 1 :(得分:4)
首先要了解roles
和users
是一回事。事实上,确实没有一个名为user
的东西,它只是一个ROLE
选项LOGIN
。
第二个roles
可以授予其他roles
。
角色的第三个特权可以继承。
假设您已创建用户a
,例如:
CREATE ROLE A LOGIN;
GRANT SELECT ON table1 TO a;
GRANT EXECUTE ON FUNCTION xxx TO a;
您应该能够创建第二个角色,以反映第一个角色,如:
CREATE ROLE b LOGIN;
GRANT a TO b;
答案 2 :(得分:1)
我必须编写pgpsql代码来循环访问用户A的权限并将其授予用户B.这样做没有任何问题。
create or replace function update_user_privileges() returns text as
$$
declare
info record;
str text;
begin
/*Grant privileges to user B the same as with user A for a given table schema*/
str:='';
FOR info IN
select * from information_schema.table_privileges where table_schema='public' and grantee = 'A'
LOOP
/*append the tables' name, for which we are assigning privileges from user A to B*/
str:= str ||info.table_name || ',';
/*this is the main statement to grant any privilege*/
execute 'GRANT '|| info.privilege_type ||' on table public.'|| info.table_name || ' to B';
END LOOP;
return str;
end
$$ language 'plpgsql';
用法:复制/粘贴此代码以创建此函数,然后执行
select update_user_privileges();
**您必须根据表模式和表名对其进行调整。希望它可以帮助任何人
答案 3 :(得分:0)
我使用以下方法创建一个与使用Ubuntu的现有用户相同的新用户。
使用以下命令从要克隆的用户中提取每一行。
cat / path / to / db_dump_file | grep" existing_user_name" >> /path/to/extract.sql
使用文本编辑器打开extract.sql,并用新用户名替换现有用户名。
这对我很有用。希望这会对某人有所帮助。
答案 4 :(得分:0)
通过将数据库newuser
上的所有授予复制到受让人mydb
,这是为myuser
创建授予语句的快速方法。
pg_dump mydb -s | egrep '^(GRANT|REVOKE).+TO "myuser"' | sed -E "s/\"myuser\"/\"newuser\"/g"
注意:-s
标志使pg_dump
快速执行,因为它只是转储模式信息。
GRANT SELECT,INSERT,UPDATE ON TABLE tabl1e TO "newuser";
GRANT SELECT,INSERT,DELETE,UPDATE ON TABLE table2 TO "newuser";
GRANT ALL ON PROCEDURE myprocedure(ids bigint[]) TO "newuser";
只需运行输出SQL授权,或将它们通过管道传递到psql
,就一切就绪。