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),它可以从其他模式中选择表。 (未列出公共模式中的表)
拜托,任何人都可以向我解释创建用户并为其授予权限的正确程序。
我需要一个只能拥有特定数据库所有权限的用户,他不应该登录其他数据库:)
答案 0 :(得分:5)
您是否尝试将privilege to connect撤消到数据库?这也应该禁止对数据库进行任何进一步的操作。
REVOKE CONNECT ON DATABASE your_db FROM user;
答案 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
并仅列出您要允许的数据库。它将有效地拒绝该用户与任何其他数据库的任何连接。除了你已经拥有的权限设置之外,显然还要使用它。