我想知道为什么在postgresql中创建的每个角色或用户都在postgres中的默认PUBLIC角色组下创建?如何将用户的默认组从PUBLIC更改为任何其他组?
原因是当我想撤消特定角色的创建特权时,我需要运行以下命令。
REVOKE CREATE ON SCHEMA public FROM PUBLIC;
撤消每个用户的创建特权,因为默认情况下,所有用户都是在PUBLIC中创建的。
我已经尝试对特定用户使用以下命令,但是它不会影响特权。
REVOKE CREATE ON SCHEMA public FROM someuser;
非常感谢您的帮助。
谢谢
答案 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。