关于设置Postgresql,我一定会遗漏一些东西.我想要做的是创建多个彼此隔离的数据库和用户,以便特定用户只能访问我指定的数据库.但是,根据我的判断,任何创建的用户都可以访问所有数据库,而不会给出任何特定的授权.
这是我在Ubuntu Server 12.04上做的事情:
> apt-get install postgresql
> sudo -u postgres createuser -DRSP mike1
(指定新用户的密码)
> sudo -u postgres createdb data1
> psql -h localhost -U mike1 data1
(指定用户mike1登录的密码)
似乎新用户“mike1”没有问题连接到数据库“data1”和创建表等.这没有运行任何GRANT命令(并且“data1”的所有者是“postgres”,因为我没有指定所有者在步骤3).这真的是它应该如何工作吗?
我想做的是授予mike1对data1的完全访问权限,然后对更多用户和数据库重复此操作,确保用户只能访问我选择的一个(或可能是几个)数据库.
在sql级别,每个用户都可以确实连接到新创建的数据库,直到发出以下sql命令:
REVOKE connect ON DATABASE database_name FROM PUBLIC;
完成后,应该能够连接的每个用户或角色必须明确授予连接权限:
GRANT connect ON DATABASE database_name TO rolename;
编辑:
在多租户方案中,将删除不仅仅是连接权限.对于多租户提示和最佳实践,您可能需要阅读postgresql public wiki:Shared Database Hosting和Managing rights in PostgreSQL.