# #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. Эй, я вставил обновление для баз данных и ролей как для пользователей, так и для баз данных,