2016-02-26 309 views
0

我需要授予数据库用户权限。我需要使用FUNCTION来执行此操作。如何在PostgreSQL中使用FUNCTION授予权限9.4.5

select nspname from pg_namespace; 

schema1 
schema2 
schema3 

select usename from pg_user; 

user1 
user2 
user3 

可能有人帮助我如何写一个函数来实现这一目标:

grant all on schema schema1 to user1; 
grant all on schema schema1 to user2; 
grant all on schema schema1 to user3; 

模式名称和用户名应该从这些SQL查询的输出有所回升?我使用Postgresql 9.4.5。

非常感谢,

回答

0

这可能是这样的:

CREATE OR REPLACE FUNCTION grant_all() 
RETURNS VOID AS 
$$ 
DECLARE 
    user TEXT; 
    schema TEXT; 
BEGIN 
    FOR user IN (SELECT usename FROM pg_user) 
    LOOP 
     FOR schema IN (SELECT nspname FROM pg_namespace) 
     LOOP 
      EXECUTE format('GRANT ALL ON SCHEMA %s to %s', schema, user); 
      RAISE NOTICE 'Granted all on % to %', schema, user; 
     END LOOP; 
    END LOOP; 
END 
$$ 
LANGUAGE plpgsql;