Postgresql СОЗДАЕТ ГРАНТ — ограничение доступа к другим базам данных на сервере?

#postgresql #roles #privileges #grant

#postgresql #роли #привилегии #sql-грант

Вопрос:

У меня есть 2 базы данных Postgresql, называемые abc и xyz. Я хочу создать пользователя для каждого, который будет использоваться на веб-сайте, поэтому я создал пользователя с помощью команды типа:

 CREATE ROLE abc LOGIN PASSWORD 'abc';
  

Затем я сделал это, чтобы предоставить им разрешение на доступ к базе данных:

 GRANT ALL PRIVILEGES ON DATABASE abc TO abc;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO abc;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO abc;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL on TABLES TO abc;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL on SEQUENCES TO abc;
  

В этот момент пользователь abc может получить доступ к таблицам, и я полагаю, что любые будущие созданные таблицы.

Я заметил, что пользователь abc может видеть, что база данных xyz существует, и фактически входит в нее и видит схему, таблицы и даже структуру таблиц в pgAdmin.

Я бы хотел предотвратить это и заблокировать пользователя abc, чтобы он как можно больше знал только о базе данных abc.

Где я ошибся в этой конфигурации и каков наилучший способ заблокировать это?

Спасибо!

Ответ №1:

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

Есть две возможности:

  1. Через разрешения базы данных:

     -- by default, everybody can connect
    REVOKE CONNECT ON DATABASE other FROM PUBLIC;
    -- now you have to grant access to the legitimate users specifically
    GRANT CONNECT ON DATABASE other TO other_users;
      
  2. Через pg_hba.conf .

    Не добавляйте запись в файл, к которому можно abc подключиться other .

    Поэтому вместо того, чтобы

     host all all 0.0.0.0/0 scram-sha-256
      

    есть записи, подобные

     host other  other_users 0.0.0.0/0 scram-sha-256
    host abc   abc          0.0.0.0/0 scram-sha-256
      

Комментарии:

1. Спасибо, ОТЗЫВ / ПРЕДОСТАВЛЕНИЕ имеет смысл и работает хорошо. Я не думал о pg_hba.conf как о решении, но мне тоже нравится эта идея.