Database 拨款用途及;在PostgreSQL中对未来创建的架构的权限

Database 拨款用途及;在PostgreSQL中对未来创建的架构的权限,database,postgresql,privileges,Database,Postgresql,Privileges,我现在集成的应用程序将创建新的模式。(每个客户都有自己的模式,如schema1、schema2、schema3等) 要授予对新创建的架构和架构中特定表的使用权和只读访问权,我执行以下命令: GRANT USAGE ON SCHEMA schema1 TO read_only_user; GRANT SELECT ON schema1.talbe1 TO read_only_user; GRANT SELECT ON schema1.table2 TO read_only_user; GRANT

我现在集成的应用程序将创建新的模式。(每个客户都有自己的模式,如schema1、schema2、schema3等) 要授予对新创建的架构和架构中特定表的使用权和只读访问权,我执行以下命令:

GRANT USAGE ON SCHEMA schema1 TO read_only_user;
GRANT SELECT ON schema1.talbe1 TO read_only_user;
GRANT SELECT ON schema1.table2 TO read_only_user;

GRANT USAGE ON SCHEMA schema2 TO read_only_user;
GRANT SELECT ON schema2.talbe1 TO read_only_user;
GRANT SELECT ON schema2.table2 TO read_only_user;

(......and so on.....)

我只是想知道我是否可以在PostgreSQL中为将来创建的模式授予使用权和特权。只能找到更改将来创建的表的默认权限的方法,但不能更改将来创建的架构。

架构没有默认权限。但是,由于您使用的模型是每个用户都有自己的模式,因此您可以自动化整个过程,包括创建用户和设置密码(如果需要):

CREATE FUNCTION new_user_schema (user text, pwd text) RETURNS void AS $$
DECLARE
  usr name;
  sch name;
BEGIN
  -- Create the user
  usr := quote_identifier(user);
  EXECUTE format('CREATE ROLE %I LOGIN PASSWORD %L', usr, quote_literal(pwd));

  -- Create the schema named after the user and set default privileges
  sch := quote_identifier('sch_' || user);
  EXECUTE format('CREATE SCHEMA %I', sch);
  EXECUTE format('ALTER SCHEMA %I OWNER TO %L', sch, usr);
  EXECUTE format('ALTER DEFAULT PRIVILEGES IN SCHEMA %I
                    GRANT SELECT ON TABLES TO %L', sch, usr);
END; $$ LANGUAGE plpgsql STRICT;
然后,您可以使用一个简单的命令创建用户、创建架构并设置默认权限:

SELECT new_user_schema('new_user', 'secret');

谢谢你的回答。谢谢你的回答。谢谢。然而,我的问题是,当创建新的DB模式时,我没有控制权,并且我授予使用权限的只读用户不是模式所有者(我也没有对原始模式所有者的控制权)。所以我想我需要的是一个自动过程来检测创建的模式,并向只读用户授予使用/选择权限。那么谁来执行
grant
命令呢?因为它显然不是模式所有者,所以它必须是超级用户角色。模式本身是如何创建的?有一个超级用户角色来创建新模式,但我在超级用户创建新模式时,在他们的代码中没有控制权。因此,我认为我需要创建一些自动检测或触发器来检测创建的新模式,然后将usage/select授予另一个只读用户。挑战在于,当超级用户创建新模式时,我无法更改代码:(或者是否有办法在超级用户帐户中添加一些代码,因此每当超级用户创建新模式时,它都会在创建新模式后执行GRANT命令。非常感谢。