我刚刚设置了Postgres供我网络上的不同用户使用。每个用户都有自己的用户名/密码/数据库,但是当我连接到Pg时,我也可以看到'postgres'数据库(甚至创建表等)。我试图从公共场所REVOKE访问该数据库但是它不会让我连接。什么是postgres数据库,为什么需要它?我可以禁用它,以便用户只能看到我为他们创建的数据库吗?
答案 0 :(得分:3)
运行initdb
时默认情况下会创建postgres数据库。
创建数据库集群包括创建数据库数据将存在的目录(...),以创建template1和postgres数据库。稍后创建新数据库时,将复制template1数据库中的所有内容。 (...)postgres数据库是一个默认数据库,供用户,实用程序和第三方应用程序使用。
没有什么特别之处,如果你不需要它,你可以放弃它:
drop database postgres;
当然,您需要以超级用户身份执行此操作。唯一的缺点是,当您以postgres操作系统用户身份运行psql
时,您需要明确提供数据库名称以连接到
答案 1 :(得分:1)
如果您放弃postgres
数据库,您会发现一些令人困惑的事情。一方面,大多数工具默认使用它作为连接的默认数据库。此外,在postgres
用户下运行的任何内容都默认为连接到postgres
数据库。
而不是删除它,REVOKE
默认连接权限。
REVOKE connect ON DATABASE postgres FROM public;
超级用户(通常为postgres
),以及您明确授予访问数据库权限的任何用户仍可以将其用作连接的便捷数据库。但其他人不能。
要向用户授予连接权限,只需:
GRANT connect ON DATABASE postgres TO myuser;