Для пользователей нашего института мы хотим предоставить быстрый и простой способ использования баз данных PostgreSQL. В настоящее время мы уже можем аутентифицировать всех пользователей через LDAP (PAM). Это работает довольно хорошо. Мы должны сделать create user
один раз, и пользователь может войти в базу данных, используя пароль, поддерживаемый LDAP.
Однако у этой простой конструкции есть несколько недостатков:
Пользователи могут захотеть иметь пару одноразовых ролей с одноразовыми паролями, чтобы им не нужно было хранить свой пароль LDAP.
Пользователи должны иметь возможность свободно создавать свои собственные базы данных. (И они должны иметь возможность предоставлять права на свои базы данных другим пользователям.)
Короче говоря, каждый пользователь с поддержкой LDAP с именем username
должно быть разрешено создавать другие роли, если они начинаются с префикса username_
; и то же самое для баз данных. (Приветствуются и другие предложения.) Пользователь с поддержкой LDAP будет тогда суперпользователем для всего username_
пространство базы данных.
Я видел, как установки делали нечто подобное для MySQL (предоставление подстановочных знаков), но мне интересно, возможно ли это и для PostgreSQL.
Похоже, вы должны иметь возможность делать это с помощью функций Postgres, созданных и принадлежащих пользователю, который может как создавать базы данных, так и пользователей; одна функция для создания баз данных и другая для создания пользователей. Ключ в том, чтобы указать SECURITY DEFINER
предложение в определении функции (Подробности смотрите в документации.). Пусть первая функция создаст базу данных и установит право собственности и т. Д. На current_user
. Вторая функция, для создания пользователей, может проверять пользователя / роль, которая будет создана, с current_user
чтобы убедиться, что он соответствует вашему стандарту именования.