Azure PostgreSQL как служба - создание отдельного пользователя для каждой базы данных дает «Отказано в доступе» - PullRequest
0 голосов
/ 06 февраля 2019

Мое приложение мультитенантное.Я создаю одну базу данных для каждого арендатора / пользователя.До сих пор я создавал все базы данных с помощью следующей команды из кода C #.

CREATE DATABASE @userDBName WITH OWNER = @dbOwner ENCODING = 'UTF8';

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

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

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

Я создал пользователей ипопытался предоставить им доступ к одной базе данных

CREATE USER test WITH ENCRYPTED PASSWORD '123456';
GRANT ALL PRIVILEGES ON DATABASE userdb1 TO test;

Теперь, когда в строке подключения в c # я даю пользователю Id = 'test' и пароль, как указано выше, я получаю ошибку "Отказано в доступе".

Кроме того, из PgAdmin, когда я захожу в базу данных и пытаюсь сменить владельца на нового пользователя, которого я создал выше, я получаю эту ошибку

ERROR:  must be member of role test

Что именно нужнобыть сделано?Я изучил все возможные решения в Интернете и перепробовал почти все, но ничто не сильно помогает.

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Пока не имеет прямого отношения к вашему вопросу о том, как создавать новые базы данных.Возможно, вы захотите пересмотреть подход к одной базе данных для каждого клиента. При масштабировании до тысяч арендаторов могут возникнуть некоторые проблемы - https://www.citusdata.com/blog/2018/06/28/scaling-from-one-to-one-hundred-thousand-tenants/

0 голосов
/ 06 февраля 2019

Это довольно просто.

Подключитесь к базе данных как суперпользователь, затем запустите (при условии, что newowner - это роль, которой должна принадлежать база данных):

REASSIGN OWNED BY oldowner TO newowner;
REVOKE CONNECT, TEMPORARY ON DATABASE mydb FROM PUBLIC;

Ошибка, которую вы получаетепотому что ты не суперпользователь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...