在 AUTHORIZATION 中使用多用户在 db 中创建 postgres 模式

tym*_*mik 5 schema postgresql authorization users postgresql-9.3

是否可以在同一个数据库中创建一个由多个用户拥有或访问的模式?

我正在阅读postgres create schema文档和postgres alter schema文档,并且没有提供多个用户的语法。

我也在谷歌上搜索这样的解决方案,无论是简单的还是困难的,但一无所获,甚至没有找到任何解决方法。

请问您能否指出解决方案或可能的解决方法,或者让我确定这种事情无论如何都不可能?

a_h*_*ame 7

由多个用户拥有:否
由多个用户访问:是

要授予用户(或角色)访问模式中的表的权限,您可以使用以下内容:

grant all on schema foobar to role_name;
grant all on all tables in schema foobar to role_name;
grant all on all sequences in schema foobar to role_name;
grant all on all functions in schema foobar to role_name;
Run Code Online (Sandbox Code Playgroud)

grant all on schema授予两个权限usage,并create在该模式。引用手册:“允许访问包含在指定模式中的对象(假设对象自己的权限要求也得到满足)。本质上,这允许被授权者在模式中查找”对象“。但这并不授予从架构的表中选择数据的特权。所以以上四个语句都是必要的。如果您不希望用户创建新对象,则可以使用grant usage on schema ....

如果您需要为多个用户执行此操作,则将其授予一个角色然后将该角色授予单个用户可能更容易。

如果要将授权扩展到任何新创建的表(或其他对象),则需要更改架构的默认权限:

alter default privileges in schema foobar grant all on tables to role_name;
alter default privileges in schema foobar grant all on sequences to role_name;
alter default privileges in schema foobar grant all on functions to to role_name;
alter default privileges in schema foobar grant all on types to role_name;
Run Code Online (Sandbox Code Playgroud)

如果您不是在自动提交模式下运行,请不要忘记提交这些语句。

当然,如果您只希望这些用户访问对象,请将ALL关键字替换为SELECTSELECT,INSERT,UPDATE取决于对象类型,要允许他们什么。

您可能还想为这些用户设置默认 search_path(如果他们只需要访问该单一架构)以避免完全限定对象名称