9

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

4

2 回答 2

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;

也可以看看:

于 2012-12-25T17:27:37.230 回答
1

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

于 2011-08-02T17:29:58.420 回答