创建的用户可以在没有任何授权的情况下访问PostgreSQL中的所有数据库

关于设置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 HostingManaging rights in PostgreSQL.

相关文章

来源:http://www.postgres.cn/docs/11/ 4.1.1. 标识符和关键词 SQL标识符和关键词必须以一个...
来源:http://www.postgres.cn/docs/11/ 8.1. 数字类型 数字类型由2、4或8字节的整数以及4或8...
来源:http://www.postgres.cn/docs/11/ 5.1. 表基础 SQL并不保证表中行的顺序。当一个表被读...
来源:http://www.postgres.cn/docs/11/ 6.4. 从修改的行中返回数据 有时在修改行的操作过程中...
来源:http://www.postgres.cn/docs/11/ 13.2.1. 读已提交隔离级别 读已提交是PostgreSQL中的...
来源:http://www.postgres.cn/docs/11/ 9.7. 模式匹配 PostgreSQL提供了三种独立的实现模式匹...