database - 授予对 future 在 PostgreSQL 中创建的模式的使用权和特权

标签 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 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.....)

我只是想知道我是否可以授予对 future 在 PostgreSQL 中创建的模式的使用权和特权。只能找到改变 future 创建的表而不是 future 创建的模式的默认权限的方法。

最佳答案

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

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');

关于database - 授予对 future 在 PostgreSQL 中创建的模式的使用权和特权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31635662/

相关文章:

security - MongoDB "userAdminAnyDatabase"用户无法管理 "any database"中的用户。为什么?

database - Django 原子检查和递减

java - 是否可以在 Hibernate 中在 Postgres 中的表和 View 之间创建自定义的一对一关系?

arrays - Postgresql - 数组中对象的 json 更新键

sql - 在表上插入或更新违反外键约束

sql - 您可以在 PostgreSQL 中将表权限从一个表复制到另一个表吗?

c++ - WIN API 用户权限 C++

excel - PowerPivot 计算字段计算到最接近的 10p

mysql - 当一个表为空时,Select 语句不返回任何值

java - 寻求一些了解 simpleCursorAdapter 工作原理的见解