# Использование разрешений LDAP в PostgreSQL * http://github.com/fruworg/pgls ## Описание: LDAP часто используется для централизованного управления пользователями и ролями в корпоративной среде. PostgreSQL предлагает различные методы аутентификации, такие как LDAP, SSPI, GSSAPI или SSL. Однако при любом методе пользователь должен уже существовать в базе данных, прежде чем аутентификация может быть использована. В настоящее время не существует прямой авторизации пользователей базы данных по LDAP. Поэтому роли и членство приходится администрировать дважды. Данная программа позволяет решить эту проблему путем синхронизации пользователей, групп и их членства из LDAP в PostgreSQL. Доступ к LDAP используется только для чтения. Для синхронизации пользователей и групп `pgls` выдает соответствующие команды CREATE ROLE, DROP ROLE, GRANT и REVOKE. Она предназначена для запуска в качестве cron-задания. ## Возможности: * Создание, удаление пользователей и групп, а также изменения в членстве синхронизируются из LDAP в PostgreSQL. * Поддерживаются вложенные группы/роли * Настраивается в конфигурационном файле YAML * Возможность использования Active Directory в качестве LDAP-сервера * Установка области видимости рассматриваемых пользователей/групп на стороне LDAP и PG * Тестовый режим, не вносящий никаких изменений в СУБД * Соединения между LDAP и PG могут быть защищены с помощью SSL/TLS * NTLM и Kerberos аутентификация на LDAP-сервере ## Требования: * Ruby-2.0+ * LDAP-v3-сервер * PostgreSQL-сервер v9.0+ ## Установка: Установить Ruby: * под Windows: http://rubyinstaller.org * на Debian/Ubuntu: `apt-get install ruby libpq-dev`. ### Установка gem: ``` gem install pgls ``` ### Установка из Git: ```sh git clone https://github.com/fruworg/pgls.git cd pgls gem install bundler bundle install bundle exec rake install ``` ### Установка из Git: ```sh git clone https://github.com/fruworg/pgls.git cd pgls gem install bundler bundle install bundle exec rake install ``` ## Использование: Создать файл конфигурации на основе [config/sample-config.yaml](https://github.com/fruworg/pgls/blob/master/config/sample-config.yaml) или еще лучше [config/sample-config2.yaml](https://github.com/fruworg/pgls/blob/master/config/sample-config2.yaml). Запустить в тестовом режиме: ```sh pgls -c my_config.yaml -vv -t ``` Запуск в режиме модификации: ```sh pgls -c my_config.yaml -vv ``` Рекомендуется не предоставлять права синхронизируемым пользователям на сервере PostgreSQL, а предоставлять права группам. Это связано с тем, что операторы `DROP USER`, вызываемые при уходе пользователя, в противном случае терпят неудачу из-за наличия зависимых объектов. Оператор `DROP GROUP` также не работает при наличии зависимых объектов, но группы, как правило, более стабильны и удаляются редко. ## Тестирование: В каталоге `test` находится небольшой тестовый набор, который работает с внутренним LDAP-сервером и сервером PostgreSQL. Убедитесь, что команды `pg_ctl`, `initdb` и `psql` находятся в `PATH` следующим образом: ```sh cd pgls установить пакет PATH=$PATH:/usr/lib/postgresql/10/bin/ bundle exec rake test ``` ## Проблемы: * В настоящее время нет возможности установить определенные атрибуты пользователя в PG на основе индивидуальных атрибутов в LDAP (срок действия и т.д.). ## Лицензия Гем доступен с открытым исходным кодом на условиях [MIT License](https://opensource.org/licenses/MIT).