Мое приложение является многопользовательским. Я создаю единую базу данных для каждого арендатора/пользователя. До сих пор я создавал все базы данных с помощью следующей команды из кода С#.
CREATE DATABASE @userDBName WITH OWNER = @dbOwner ENCODING = 'UTF8';
Таким образом, я вижу, что у всех баз данных один и тот же владелец, и этот владелец имеет доступ ко всем таблицам во всех базах данных.
Теперь, в соответствии с новым требованием безопасности, мы хотим реализовать то, что каждая база данных должна быть доступна только одному пользователю, а пользователь одной базы данных не должен иметь доступа к другой базе данных.
Поскольку я впервые имею дело с концепциями ролей/пользователей в Postgres, мне не удается найти удачу в том, что я делал до сих пор.
Я создал пользователей и попытался предоставить им доступ к одной базе данных.
CREATE USER test WITH ENCRYPTED PASSWORD '123456';
GRANT ALL PRIVILEGES ON DATABASE userdb1 TO test;
Теперь, когда в моей строке подключения в С# я даю пользователю Id = 'test' и пароль, как указано выше, я получаю сообщение об ошибке отказа в разрешении.
Кроме того, из PgAdmin, когда я захожу в базу данных и пытаюсь изменить владельца на нового пользователя, которого я создал выше, я получаю эту ошибку
ERROR: must be member of role test
Что именно нужно сделать? Я изучил все возможные решения в Интернете и перепробовал почти все, но ничего не помогает.