7

PostgreSQL 版本 9.1,

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

我拥有的数据库列表,

1.数据库1

2.数据库2

3.数据库3

现在,我需要创建一个只有“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

4 回答 4

13

您可以通过运行以下命令删除数据库用户的权限:

REVOKE ALL PRIVILEGES ON DATABASE database_name FROM username;
于 2015-11-05T21:14:08.567 回答
6

您是否尝试过撤销连接到数据库的权限?这也应该禁止对数据库进行任何进一步的操作。

REVOKE CONNECT ON DATABASE your_db FROM user;

经过一番挖掘,很明显,为什么上面不起作用。也许汤姆莱恩的答案会给你一个更好的解决方案。

于 2012-06-13T10:34:51.557 回答
6

默认情况下,所有public模式都可供普通(非超级用户)用户使用。为防止这种情况,请以超级用户身份登录并发出命令:

REVOKE ALL ON DATABASE somedatabase FROM PUBLIC;

这将撤销所有用户对给定数据库的所有权限。

于 2017-03-12T14:58:07.660 回答
0

好吧,我总是这样做的方式是通过pg_hba.conf,尽管我怀疑它也应该以您尝试的方式成为可能。

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

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

于 2012-06-13T10:06:27.030 回答