我想知道为什么在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
这比它应该的要复杂一些。这是为了与旧版本兼容。