我安装了 PostgreSQL 9 数据库(从 Oracle10g 迁移),我对用户/角色管理感到非常困惑。当我使用 or 之类的 SQL 命令或通过 Navicat 工具创建新用户时CREATE USER
,CREATE ROLE
创建的用户可以看到所有数据库!他真的可以把他们联系起来!虽然他不能从表格中选择任何数据,但他可以看到表格对象和序列等。我试图撤销连接特权,但没有效果。我预计新用户没有特权,也看不到任何东西。我真的不知道他为什么可以。
问问题
16958 次
2 回答
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
在创建对象的同一事务中发出;这样就没有其他用户可以使用该对象的窗口。)此外,可以使用ALTER DEFAULT PRIVILEGES命令更改这些初始默认权限设置。
要删除CONNECT
数据库上所有未指定用户的所有权限(包括 ),请使用:
REVOKE ALL PRIVILEGES ON DATABASE <database> FROM public;
也可以看看:
于 2012-12-25T17:27:37.230 回答
1
您可能还需要修改pg_hba.conf
文件。默认情况下,本地安装不进行授权检查。
于 2011-08-02T17:29:58.420 回答