Как я могу отозвать доступ к подключению PostgreSQL к базе данных

# #postgresql #google-cloud-sql #privileges #cloud-sql-proxy

#postgresql #google-облако-sql #привилегии #облако-sql-прокси

Вопрос:

До сих пор у меня есть пользователь с именем test_user , как показано на рисунке ниже, этот пользователь владеет test_db :

введите описание изображения здесь

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

Отозвать все из базы main_db данных test_user ; почему подключен как пользователь main_, который является участником {cloudsqlsuperuser} .

По сути, я просто хочу main_user иметь только доступ main_db и test_user только иметь доступ test_db .

Так далеко я убежал revoke privilege all on database gitlabhq_production from test_user .

Но, похоже, я все еще могу напрямую подключаться к базе main_db test_user данных при запуске psql -U test_user -d main_db -h 127.0.0.1 -W . Я ожидаю, что это произойдет из-за ошибки, в которой говорится, что пользователь не может подключиться, я также отменил все привилегии main_user to test_db , но, похоже, я все еще могу вставить строку, в test_table которую находится test_db .

P. S Я использую экземпляр GCP Cloud SQL с Postgres 13.

Как мне этого добиться ?

Обновить

Информация, связанная с main_db, test_db и main_user и _test_user

 List of roles  Role name | Attributes | Member of  --------------------------- ------------------------------------------------ --------------------------------------------------------------  main_user | Create role, Create DB | {cloudsqlsuperuser}  test_user | | {}     List of databases  Name | Owner | Encoding | Collate | Ctype | Access privileges  --------------------- ------------------- ---------- ------------ ------------ -----------------------------------------  main_db | main_user | UTF8 | en_US.UTF8 | en_US.UTF8 | =Tc/main_user    | | | | | main_user=CTc/main_user  test_db | test_user | UTF8 | en_US.UTF8 | en_US.UTF8 | test_user=CTc/test_user  

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

1. Можете ли вы выполнять какие-либо фактические запросы от имени пользователя? т. е. перечислять таблицы?

2. я могу запустить insert в таблицу в test_db как main_user … я не хочу, чтобы это случилось… я должен иметь возможность запускать эту вставку только как test_user. разве это не часть реального запроса ? поправьте меня, если я ошибаюсь

Ответ №1:

Все, что вам нужно, — это отозвать привилегии у PUBLIC :

 REVOKE ALL ON DATABASE main_db FROM PUBLIC; REVOKE ALL ON DATABASE test_db FROM PUBLIC;  

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

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

1. Привет, спасибо за ваш ответ, я запустил ОТОЗВАТЬ ВСЕ В БАЗЕ ДАННЫХ test_db ИЗ ОБЩЕДОСТУПНОГО; только… однако main_user, которому принадлежит main_db, все еще может вставить/выбрать в таблице в test_db, которая принадлежит test_user

2. Нет, если бы разрешения для базы данных были такими, как вы указали в своем вопросе.

3. да, разрешение для test_db такое, как я показал в примере, может быть, это потому, что main_user является членом {cloudsqlsuperuser} ?

4. Возможный. Трудно сказать, так как в вашем вопросе не указаны роли и членство.

5. Эй, я вставил обновление для баз данных и ролей как для пользователей, так и для баз данных,