2012-06-13 86 views
2

的PostgreSQL 9.1版,PostgreSQL的特定数据库

我正在登录到数据库,默认用户为用户权限:“Postgres的”和我的数据库中包含默认角色“公共”

数据库的名单上有,

1.database1

2.database2

3.database3

现在,我需要创建一个只有“database2”权限的用户“newuser”,它不应该登录到其他数据库。

我试图用这个语法

create role newuser with login nosuperuser nocreatedb nocreaterole noinherit password 'newpassword'; 
revoke all privileges on database database1, database3 from newuser; 

,但仍然是“NEWUSER”可以登录到其他数据库(数据库1 /数据库3),它可以选择其他模式的表。 (公共架构中的表未列出)

请任何人都解释我创建用户并授予他们权限的正确过程。

我需要谁可以有一个特定的数据库上的所有权限的用户而已,他不应该登录到其他数据库:)

回答

0

好方式我总是这样做,这是通过pg_hba.conf,但我怀疑它应该是尽可能以你想要的方式。

人们会期望撤消所有权限以拒绝任何与列出的实体。所以没有关系,更不用说实际选择。可能有些事情显而易见,我们在这里忘记了。

无论如何,这应该很容易使用配置文件来解决。添加newuser并只列出您想要在那里允许的数据库。它将有效地拒绝任何来自该用户的连接到任何其他数据库。显然,除了您已有的权限设置之外,还可以使用它。

+0

感谢您的回复,这是唯一这样做的选项,这将是难以配置为每个新用户..... – MAHI

+0

我做不知道,我不会指望它是唯一的选择。今晚有空闲时,我会在本地的Postgres服务器上建立一个测试状态。如果我得到它的工作瓦特/ pg_hba.conf改变,我会让你知道:) – pyrocumulus

+0

好的谢谢,我也会搜索一些选项 – MAHI

4

您是否试图将privilege to connect吊销到数据库?这应该不允许对数据库进行任何进一步的操作。

REVOKE CONNECT ON DATABASE your_db FROM user; 

一个小挖之后,很明显,为什么上面是行不通的。也许一个nswer by Tom Lane会给你一个更好的解决方案。

+0

是的,我做了,没有用,仍然我能够连接到数据库.. – MAHI

+0

@MAHI做了一些研究,查看邮件列表中的答案链接。 – DrColossos

+0

我认为这是一个合理的解释@DrColossos。无论如何,这是值得一试的。 – pyrocumulus

3

您可以通过运行删除数据库用户的权限。

REVOKE ALL PRIVILEGES ON DATABASE "database_name" from username;

+0

这是一个超级方便的命令 – bonitzenator

1

默认情况下,所有public scemas将可用于常规(非超级用户)用户。为了防止这种超级用户身份登录,并发出命令:

REVOKE ALL ON DATABASE somedatabase FROM PUBLIC;