为Postgres中的特定数据库授予默认权限



我有一个名为funnycode的数据库。我还有一个名为funnycode_user的用户。

如何向funnycode_user授予默认权限,以便用户可以:

  1. 创建一个名为funnycode的数据库
  2. 用户可以连接到名称为funnycode的任何未来数据库,但不能连接到其他数据库
  3. 用户可以从所有表中进行选择,并可以访问名称为funnycode的任何未来数据库上的所有序列,但不能访问其他数据库

这在Postgres中可能吗?如果是,如何?我阅读了这里的文档,但我不明白这是怎么回事:

ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT INSERT ON TABLES TO funnycode_user;

是否绑定到特定的数据库,在我的情况下,该数据库将是funnycode数据库?

创建数据库的用户自动拥有该数据库(除非指定了不同的所有者(,因此自动拥有数据库的所有权限。您不需要任何额外的授权就可以让用户在数据库中创建和使用表。

因此,如果您授予funnycode_usercreate database特权,他可以创建他想要的任何数据库,而不仅仅是funnycode。没有办法阻止这种情况的发生。

创建的每个新数据库都会自动向角色public授予connect权限。如果您不希望funnycode_user连接到其他数据库,则需要从每个数据库的公共角色中撤销该权限。

另一种限制特定用户访问特定数据库的方法是通过pg_hba.conf

你需要一个这样的条目:

# TYPE  DATABASE        USER              ADDRESS        METHOD
host    funnycode       funnycode_user    0.0.0.0/0      md5

条目CCD_ 15意味着CCD_。即使funnycode_user创建了其他数据库,他也无法连接到这些数据库。


我认为更好(更干净(的方法是而不是赋予该用户创建数据库的权限。只需创建一次数据库,使funnycode_user成为所有者即可。

例如,当超级用户运行时:

create user funnycode_user password 'VerySecret';
create database funnycode owner = funnycode_user;

您只需要做一次(或者在funnycode_user决定删除数据库之后(,并且不需要授予funnycode_user创建数据库的权限。

最新更新