各位,
我可以利用你的帮助使我的 Postgres 用户访问控制设计更好,更符合最佳实践。我正在帮助推出一个小型生产 Postgres 服务器,但我不是数据库管理员,所以我知道足够危险。
一台服务器安装了一次 Postgres v9.2。此安装托管多个数据库,每个数据库都完全服务于不同的“客户”。换句话说,customer1 不会,也不应该使用 database2,依此类推。在正常操作期间,每个数据库都由一个匹配的 CakePHP 实例访问,所有实例都与 Postgres 位于同一服务器上。虽然此部署可能会有优化,但我最感兴趣的是 Psql 角色。
根据我所读到的,似乎三种类型的角色是有意义的:
实现该设计是我不太自信的地方。DB与表的所有权以及谁应该从谁那里继承有点混乱。下面是我的数据库和我的用户。这些信息足以评估实施吗?
Role name | Attributes | Member of
-----------+------------------------------------------------+-------------------
admin | Create role, Create DB | {user1, user2}
postgres | Superuser, Create role, Create DB | {}
user1 | | {}
user2 | | {}
postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+---------+-------+-----------------------
admin | postgres | UTF8 | en_US | en_US | =Tc/postgres +
| | | | | postgres=CTc/postgres+
| | | | | admin=CTc/postgres
postgres | postgres | UTF8 | en_US | en_US |
template0 | postgres | UTF8 | en_US | en_US | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | en_US | en_US | =c/postgres +
| | | | | postgres=CTc/postgres
user1 | admin | UTF8 | en_US | en_US | =Tc/admin +
| | | | | admin=CTc/admin +
| | | | | user1=CTc/admin
user2 | admin | UTF8 | en_US | en_US | =Tc/admin +
| | | | | admin=CTc/admin +
| | | | | user2=CTc/admin
Run Code Online (Sandbox Code Playgroud)
为了防止外部连接和密码明文,pg_hba.conf 如下:
local all all md5
host all all 127.0.0.1/32 md5
host all all ::1/128 md5
Run Code Online (Sandbox Code Playgroud)
我知道这是一个古老的问题,但即使现在我也会尝试回答它,因为我必须做一些与此相关的研究。
您尝试做的是在数据库级别称为多租户。这可以通过两种方式实现:
在单个数据库集群中,有点像 OP 描述的那样,但是,我个人的选择是这样的:
每个客户都有自己的数据库集群。这是我的首选解决方案,特别是因为我通常使用每个客户都有大型数据库的应用程序。
您也可以结合使用上述方法,并使用 pgBouncer 作为路由器。
| 归档时间: |
|
| 查看次数: |
7449 次 |
| 最近记录: |