为什么在 postgres 9.6 中,每个用户都是在默认"PUBLIC"组角色下创建的?



我想知道为什么在postgresql中创建的每个角色或用户都是在postgres的默认PUBLIC角色组下创建的?如何将用户的默认组从 PUBLIC 更改为任何其他组?

原因是当我想撤销特定角色的创建权限时,我需要运行以下命令。

REVOKE CREATE ON SCHEMA public FROM PUBLIC;

撤销从每个用户创建权限,因为默认情况下所有用户都是在 PUBLIC 中创建的。

我已经在特定用户上尝试了以下命令,但它不会影响权限。

REVOKE CREATE ON SCHEMA public FROM someuser;

非常感谢您的帮助。

谢谢

"公共"角色是一个特殊的角色 - 它只是意味着每个人。

要限制某些用户的访问,您需要像以前一样撤销角色"public"的权限,然后将权限添加到某些不同的角色。然后添加需要为此不同角色添加访问权限的所有角色。

例如:

-- create a user (role with login privilege)
create role myapp login;
-- set the myapp user's password
password myapp
-- create the database
create database myapp owner myapp;
-- remove default connection privileges from everyone
revoke connect on database myapp from public;
-- connect to database myapp
c myapp
-- remove default priviledges from default public schema
revoke all on schema public from public;
-- set the public schema owner, so myapp user can do anything there
alter schema public owner to myapp;

然后,如果您需要其他用户访问数据,但只读。

-- create a special role
create role myapp_reader;
-- allow the role to connect to the database
grant connect on database myapp to myapp_reader;
-- allow the role to read the tables
grant select on all tables in schema public to myapp_reader;
-- create user in this role
create user myapp_monitor in role myapp_reader;
-- set the password for this user
password myapp_monitor

这比它应该的要复杂一些。这是为了与旧版本兼容。

相关内容

  • 没有找到相关文章

最新更新