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

MAH*_*AHI 2 sql postgresql privileges createuser

PostgreSQL版本9.1,

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

我拥有的数据库列表,

1.database1

2.database2

3.database3

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

我尝试使用这种语法

create role newuser with login nosuperuser nocreatedb nocreaterole noinherit password 'newpassword';
revoke all privileges on database database1, database3 from newuser;
Run Code Online (Sandbox Code Playgroud)

但仍然"newuser"可以登录到其他数据库(database1/database3),它可以从其他模式中选择表.(未列出公共模式中的表)

请任何人向我解释创建用户并为其授予权限的正确程序.

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

Jon*_*aar 7

您可以通过运行从数据库上的用户中删除特权。

REVOKE ALL PRIVILEGES ON DATABASE "database_name" from username;


DrC*_*sos 5

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

REVOKE CONNECT ON DATABASE your_db FROM user;
Run Code Online (Sandbox Code Playgroud)

经过一番挖掘,很明显,为什么以上都不起作用.也许Tom Lanenswer将为您提供更好的解决方案.


Tra*_*oud 5

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

REVOKE ALL ON DATABASE somedatabase FROM PUBLIC;
Run Code Online (Sandbox Code Playgroud)

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


pyr*_*lus 1

好吧,我总是通过 来做到这一点pg_hba.conf,尽管我怀疑它也应该可以按照您尝试的方式实现。

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

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