为什么在postgres 9.6中使用默认的“ PUBLIC”组角色创建每个用户?

时间:2019-01-01 13:55:41

标签: postgresql default user-roles usergroups

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

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

REVOKE CREATE ON SCHEMA public FROM PUBLIC;

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

我已经尝试对特定用户使用以下命令,但是它不会影响特权。

REVOKE CREATE ON SCHEMA public FROM someuser;

非常感谢您的帮助。

谢谢

1 个答案:

答案 0 :(得分:0)

“公共”角色是一种特殊的角色-它只代表每个人。

要限制某些用户的访问权限,您需要像以前那样从角色“ 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

这比应该的要复杂一些。 It is this way for compatibility with old versions