Database 拨款用途及;在PostgreSQL中对未来创建的架构的权限
我现在集成的应用程序将创建新的模式。(每个客户都有自己的模式,如schema1、schema2、schema3等) 要授予对新创建的架构和架构中特定表的使用权和只读访问权,我执行以下命令: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
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命令。非常感谢。