为什么PostgreSQL中的新用户可以连接到所有数据库?

时间:2011-07-30 15:11:17

标签: postgresql role

我安装了PostgreSQL 9数据库(从Oracle10g迁移),我对用户/角色管理感到困惑。当我使用CREATE USERCREATE ROLE等SQL命令或Na​​vicat工具创建新用户时,创建的用户可以看到所有数据库!他真的可以联系他们!虽然他不能从表中选择任何数据,但他可以看到表对象和序列等。我试图撤销连接特权,但没有效果。我被期待新用户没有特权,也看不到任何东西。我真的不知道为什么他可以。

3 个答案:

答案 0 :(得分:13)

来自http://www.postgresql.org/docs/9.2/static/sql-grant.html#SQL-GRANT-DESCRIPTION-OBJECTS(强调我的):

  

PostgreSQL将某些类型的对象的默认权限授予PUBLIC。默认情况下,对表,列,模式或表空间不授予PUBLIC特权。对于其他类型,授予PUBLIC的默认权限如下: CONNECTCREATE TEMP TABLE用于数据库; EXECUTE职能特权;和USAGE语言特权。当然,对象所有者可以REVOKE默认和明确授予权限。 (为了最大限度地提高安全性,请在创建对象的同一事务中发出REVOKE;然后没有其他用户可以使用该对象的窗口。)此外,可以使用{{}更改这些初始默认权限设置。 3}}命令。

要删除数据库中所有未指定用户的所有权限(包括CONNECT),请使用:

REVOKE ALL PRIVILEGES ON DATABASE <database> FROM public;

另见:

答案 1 :(得分:1)

您可能还需要修改pg_hba.conf文件。默认情况下,本地安装不会进行授权检查。

答案 2 :(得分:0)

您必须使用GRANT和/或REVOKE来定义用户或角色的权限。您还可以使用以下link函数来查看用户是否对表,数据库等具有特定权限...