postgresql - 特定数据库的用户权限

时间:2012-06-13 09:56:06

标签: sql postgresql privileges createuser

PostgreSQL版本9.1,

我使用默认用户登录数据库:“postgres”,我的数据库包含默认角色“public”

我拥有的数据库列表,

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”仍然可以登录到其他数据库(database1 / database3),它可以从其他模式中选择表。 (未列出公共模式中的表)

拜托,任何人都可以向我解释创建用户并为其授予权限的正确程序。

我需要一个只能拥有特定数据库所有权限的用户,他不应该登录其他数据库:)

4 个答案:

答案 0 :(得分:5)

您是否尝试将privilege to connect撤消到数据库?这也应该禁止对数据库进行任何进一步的操作。

REVOKE CONNECT ON DATABASE your_db FROM user;

经过一番挖掘,很明显,为什么以上都不起作用。也许a nswer by Tom Lane会给你一个更好的解决方案。

答案 1 :(得分:5)

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

REVOKE ALL PRIVILEGES ON DATABASE "database_name" from username;

答案 2 :(得分:1)

默认情况下,常规(非超级用户)用户可以使用所有public个区域。要以超级用户身份阻止此登录并发出命令:

REVOKE ALL ON DATABASE somedatabase FROM PUBLIC;

答案 3 :(得分:0)

我一直这样做的方式是通过pg_hba.conf,虽然我怀疑它应该以你想要的方式实现。

人们会期望撤销所有权限以拒绝所列实体的任何内容。所以没有连接,更不用说实际选择。我们在这里可能会遗忘一些明显的东西。

无论如何,使用配置文件应该很容易解决。添加newuser并仅列出您要允许的数据库。它将有效地拒绝该用户与任何其他数据库的任何连接。除了你已经拥有的权限设置之外,显然还要使用它。