mik*_*ate 55 postgresql permissions
我一定在设置 PostgreSQL 方面遗漏了一些东西。我想做的是创建多个相互隔离的数据库和用户,以便特定用户只能访问我指定的数据库。但是,据我所知,任何创建的用户都可以访问所有数据库,而无需获得任何特定授权。
这是我在 Ubuntu Server 12.04 上所做的:
似乎新用户“mike1”连接到数据库“data1”并创建表等没有问题。这根本没有运行任何 GRANT 命令(“data1”的所有者是“postgres”,因为我没有指定所有者在第 3 步)。这真的是它应该如何工作吗?
我想要做的是授予 mike1 对 data1 的完全访问权限,然后对更多用户和数据库重复此操作,确保用户只能访问我选择的一个(或可能几个)数据库。
Dan*_*ité 60
在 SQL 级别,每个用户确实可以连接到新创建的数据库,直到发出以下 SQL 命令:
REVOKE connect ON DATABASE database_name FROM PUBLIC;
Run Code Online (Sandbox Code Playgroud)
完成后,每个应该能够连接的用户或角色都必须明确授予连接权限:
GRANT connect ON DATABASE database_name TO rolename;
Run Code Online (Sandbox Code Playgroud)
编辑:在多租户场景中,不仅仅是connect特权会被删除。有关多租户提示和最佳实践,您可能需要阅读 postgresql 公共 wiki: PostgreSQL 中的共享数据库托管和管理权限。
Fra*_*ens 30
PUBLIC 默认可以访问数据库,但是不能访问数据。您可以撤销公众:
REVOKE CONNECT ON DATABASE your_database FROM PUBLIC;
Run Code Online (Sandbox Code Playgroud)
如果您希望此设置用于所有未来的数据库,请撤销 template1 数据库(用于创建新数据库的默认模板数据库)上的 CONNECT:
REVOKE CONNECT ON DATABASE template1 FROM PUBLIC;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
58609 次 |
| 最近记录: |