我的数据库使用模式为应用程序分离特定于租户的数据 - 每个客户在注册保存数据时都会创建一个全新的模式。
这显然意味着我不知道所有模式的名称。
我想创建一个readonly
角色,该角色具有对这些模式的所有的读取权限,以及将来创建的模式。
我发现的所有问题都需要知道模式的名称,例如:
-- Create a group
CREATE ROLE readaccess;
-- Grant access to existing tables
GRANT USAGE ON SCHEMA a_given_schema TO readaccess;
GRANT SELECT ON ALL TABLES IN SCHEMA a_given_schema TO readaccess;
-- Grant access to future tables
ALTER DEFAULT PRIVILEGES IN SCHEMA a_given_schema GRANT SELECT ON TABLES TO readaccess;
-- Create user with password
CREATE USER readonly WITH PASSWORD 'a_secret';
GRANT readaccess TO readonly;
有没有办法做这样的事情,但是对于未来的所有模式?
答案 0 :(得分:2)
你不能这样做,如下所述:grant usage & privileges on future created schema in 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;