PostgreSQL - 授予所有模式下的所有表(包括未来表)的选择权限

7
我的数据库使用模式来分离应用程序专属数据,每个客户在注册时都会创建一个全新的模式以保存他们的数据。
显然,这意味着我事先不知道所有模式的名称。
我想创建一个“只读”角色,该角色可以读取所有这些模式及将来创建的模式。
我找到的所有类似问题都需要知道模式的名称,例如:
-- 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;

有没有一种方法可以像这样做,但是针对将来的所有模式?

1个回答

5

您无法这样做,正如在此处所说:在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;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接