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

ves*_*lej 7 postgresql role

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

Lek*_*eyn 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在创建对象的同一事务中发出;然后没有其他用户可以使用该对象的窗口.)此外,可以使用ALTER DEFAULT PRIVILEGES命令更改这些初始默认权限设置.

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

REVOKE ALL PRIVILEGES ON DATABASE <database> FROM public;
Run Code Online (Sandbox Code Playgroud)

也可以看看:


Dan*_*ons 1

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