gpt4 book ai didi

sql - PostgreSQL - 在*所有模式*中授予对所有表(和 future 表)的选择

转载 作者:行者123 更新时间:2023-11-29 11:29:36 26 4
gpt4 key购买 nike

我的数据库使用模式来分离应用程序的租户特定数据 - 每个客户在注册以保存数据时都会创建一个全新的模式。

这显然意味着我无法提前知道所有模式的名称。

我想创建一个 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;

有没有办法做这样的事情,但对于 future 的所有模式?

最佳答案

你做不到,正如这里所说: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;

关于sql - PostgreSQL - 在*所有模式*中授予对所有表(和 future 表)的选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46631495/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com