我需要一個新用戶,但應該授予其他現有用戶/角色具有的所有特權。如何在postgres中創建用戶的重複角色
例如
- 用戶A在表1的SELECT權限
- 用戶A在表2
- 執行權限...
如果創建一個新用戶B,我需要相同的特權,
- 用戶B對錶1 SELECT權限
- 用戶B具有EXECUTE對錶2的權限
- ...
不要問爲什麼:/
其實用戶A在不同的表,模式和功能定製特權;所以手動授予新用戶權限的過程非常冗長冗長。任何幫助都會很好。
我需要一個新用戶,但應該授予其他現有用戶/角色具有的所有特權。如何在postgres中創建用戶的重複角色
例如
如果創建一個新用戶B,我需要相同的特權,
不要問爲什麼:/
其實用戶A在不同的表,模式和功能定製特權;所以手動授予新用戶權限的過程非常冗長冗長。任何幫助都會很好。
我不得不編寫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();
**你必須去適應它爲你的表型模式和表名。希望它可以幫助任何人
首先明白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;
你並不需要指定'爲角色A. INHERIT'僅限於角色B(誰將會繼承權)。 + INHERIT是默認值,所以不需要明確寫入。 –
好一點,我當時是明確的,但它可能只是討厭... *更新* –
如果我不想繼承角色權限,而是授予所有的權限從A到B,也能夠改變A的特權不會影響B – Saad
不足。如果A是超級用戶,則還需要:使用SUPERUSER更改用戶B; –
注意:這將使角色B「繼承」角色A的所有特權。角色將以某種繼承關係進行耦合。這實際上不會重複權限。 –
我用下面的方法來創建一個新的用戶使用Ubuntu的現有用戶。
使用以下命令提取您想要克隆的用戶的每一行。
貓/路徑/到/ db_dump_file | grep的「existing_user_name」 >> /path/to/extract.sql
用文本編輯器打開extract.sql,並與新的用戶名替換現有的用戶名。
這爲我工作就好了。希望這會幫助某人。
什麼是列,函數,視圖權限? – ArunaFromLK