Пользователь, который создает базу данных, автоматически владеет этой базой данных (если не указан другой владелец) и, таким образом, автоматически обладает всеми привилегиями в базе данных.Вам не нужно никаких дополнительных грантов, чтобы пользователь мог создавать и использовать таблицы в базе данных.
Таким образом, если вы предоставите funnycode_user
привилегию create database
, он может создать любую базу данных, которую он хочет, а не только funnycode
.Нет способа предотвратить это.
Каждая новая созданная база данных автоматически предоставляет привилегию connect
для роли public
.Если вы не хотите, чтобы funnycode_user
подключался к другой базе данных, вам необходимо отозвать эту привилегию из публичной роли для каждой базы данных.
Другой способ ограничения доступа к определенной базе данных для конкретного пользователя - через pg_hba.conf
Вам понадобится такая запись:
# TYPE DATABASE USER ADDRESS METHOD
host funnycode funnycode_user 0.0.0.0/0 md5
Запись 0.0.0.0/0
означает, что funnycode_user
может подключаться с любого IP-адреса.Даже если funnycode_user
создал другие базы данных, он не смог бы подключиться к ним.
Я думаю, что лучший (более чистый) способ состоит в том, чтобы не дать этому пользователю право создавать базу данных.Просто создайте эту базу данных один раз, сделайте funnycode_user
владельцем и все.
Например, запустите суперпользователь:
create user funnycode_user password 'VerySecret';
create database funnycode owner = funnycode_user;
Вам нужно сделать это только один раз (или после того, как funnycode_user решитудалите базу данных) и вам не нужно давать funnycode_user право создавать базы данных.