Почему каждый пользователь создается в группе Postgres 9.6 под ролью группы «PUBLIC» по умолчанию? - PullRequest
0 голосов
/ 01 января 2019

Мне интересно, почему каждая роль или пользователь, созданный в postgresql, создается в группе по умолчанию PUBLIC в postgres?Как я могу изменить группу пользователя по умолчанию с PUBLIC на любую другую группу?

Причина в том, что когда я хочу отозвать привилегию создания из определенной роли, мне нужно выполнить следующую команду.

REVOKE CREATE ON SCHEMA public FROM PUBLIC;

, который отменяет создание привилегий для каждого пользователя, поскольку все пользователи создаются в PUBLIC по умолчанию.

Я пробовал указанную ниже команду для конкретного пользователя, но она не влияет на привилегии.

REVOKE CREATE ON SCHEMA public FROM someuser;

Ваша помощь очень ценится.

Спасибо

1 Ответ

0 голосов
/ 01 января 2019

"Публичная" роль - это особая роль. Она просто означает всех.

Чтобы ограничить доступ для какого-либо пользователя, вам нужно отозвать привилегии из роли "публичная", как вы это сделали, и затем добавить привилегии вкакая-то другая роль.Затем добавьте все роли, к которым вам нужно добавить доступ к этой другой роли.

Например:

-- 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

Это немного сложнее, чем следовало бы. Это способ совместимости со старыми версиями .

...