我有一个名为funnycode
的数据库。我还有一个名为funnycode_user
的用户。
如何向funnycode_user
授予默认权限,以便用户可以:
- 创建一个名为
funnycode
的数据库 - 用户可以连接到名称为
funnycode
的任何未来数据库,但不能连接到其他数据库 - 用户可以从所有表中进行选择,并可以访问名称为
funnycode
的任何未来数据库上的所有序列,但不能访问其他数据库
这在Postgres中可能吗?如果是,如何?我阅读了这里的文档,但我不明白这是怎么回事:
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT INSERT ON TABLES TO funnycode_user;
是否绑定到特定的数据库,在我的情况下,该数据库将是funnycode
数据库?
创建数据库的用户自动拥有该数据库(除非指定了不同的所有者(,因此自动拥有数据库的所有权限。您不需要任何额外的授权就可以让用户在数据库中创建和使用表。
因此,如果您授予funnycode_user
create 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创建数据库的权限。