我安装了PostgreSQL 9数据库(从Oracle10g迁移),我对用户/角色管理感到困惑。当我使用CREATE USER
或CREATE ROLE
等SQL命令或Navicat工具创建新用户时,创建的用户可以看到所有数据库!他真的可以联系他们!虽然他不能从表中选择任何数据,但他可以看到表对象和序列等。我试图撤销连接特权,但没有效果。我被期待新用户没有特权,也看不到任何东西。我真的不知道为什么他可以。
答案 0 :(得分:13)
来自http://www.postgresql.org/docs/9.2/static/sql-grant.html#SQL-GRANT-DESCRIPTION-OBJECTS(强调我的):
PostgreSQL将某些类型的对象的默认权限授予
PUBLIC
。默认情况下,对表,列,模式或表空间不授予PUBLIC
特权。对于其他类型,授予PUBLIC
的默认权限如下:CONNECT
和CREATE TEMP TABLE
用于数据库;EXECUTE
职能特权;和USAGE
语言特权。当然,对象所有者可以REVOKE
默认和明确授予权限。 (为了最大限度地提高安全性,请在创建对象的同一事务中发出REVOKE
;然后没有其他用户可以使用该对象的窗口。)此外,可以使用{{}更改这些初始默认权限设置。 3}}命令。
要删除数据库中所有未指定用户的所有权限(包括CONNECT
),请使用:
REVOKE ALL PRIVILEGES ON DATABASE <database> FROM public;
另见:
答案 1 :(得分:1)
您可能还需要修改pg_hba.conf
文件。默认情况下,本地安装不会进行授权检查。
答案 2 :(得分:0)