2023-08-03 14:39:36 +03:00
# Использование разрешений LDAP в PostgreSQL
2018-02-07 01:19:54 +03:00
2023-08-09 14:32:02 +03:00
* http://github.com/fruworg/pgls
2018-02-07 01:19:54 +03:00
2023-08-22 11:46:10 +03:00
## Описание:
2018-02-07 01:19:54 +03:00
2023-08-03 14:39:36 +03:00
LDAP часто используется для централизованного управления пользователями и ролями в корпоративной среде.
PostgreSQL предлагает различные методы аутентификации, такие как LDAP, SSPI, GSSAPI или SSL.
Однако при любом методе пользователь должен уже существовать в базе данных, прежде чем аутентификация может быть использована.
В настоящее время не существует прямой авторизации пользователей базы данных по LDAP.
Поэтому роли и членство приходится администрировать дважды.
2018-02-07 01:19:54 +03:00
2023-08-03 14:39:36 +03:00
Данная программа позволяет решить эту проблему путем синхронизации пользователей, групп и их членства из LDAP в PostgreSQL.
Доступ к LDAP используется только для чтения.
2023-08-09 14:32:02 +03:00
Для синхронизации пользователей и групп `pgls` выдает соответствующие команды CREATE ROLE, DROP ROLE, GRANT и REVOKE.
2018-02-07 01:19:54 +03:00
2023-08-03 14:39:36 +03:00
Она предназначена для запуска в качестве cron-задания.
2018-02-07 01:19:54 +03:00
2023-08-22 11:46:10 +03:00
## Возможности:
2018-02-07 01:19:54 +03:00
2023-08-03 14:39:36 +03:00
* Создание, удаление пользователей и групп, а также изменения в членстве синхронизируются из LDAP в PostgreSQL.
* Поддерживаются вложенные группы/роли
* Настраивается в конфигурационном файле YAML
* Возможность использования Active Directory в качестве LDAP-сервера
* Установка области видимости рассматриваемых пользователей/групп на стороне LDAP и PG
* Тестовый режим, не вносящий никаких изменений в СУБД
* Соединения между LDAP и PG могут быть защищены с помощью SSL/TLS
* NTLM и Kerberos аутентификация на LDAP-сервере
2018-02-07 01:19:54 +03:00
2023-08-22 11:46:10 +03:00
## Требования:
2018-02-07 01:19:54 +03:00
2023-04-01 16:09:45 +03:00
* Ruby-2.0+
2023-08-03 14:39:36 +03:00
* LDAP-v3-сервер
* PostgreSQL-сервер v9.0+
2018-02-07 01:19:54 +03:00
2023-08-22 11:46:10 +03:00
## Установка:
2018-02-07 01:19:54 +03:00
2023-08-03 14:39:36 +03:00
Установить Ruby:
2018-02-07 01:19:54 +03:00
2023-08-03 14:39:36 +03:00
* под Windows: http://rubyinstaller.org
* на Debian/Ubuntu: `apt-get install ruby libpq-dev` .
2018-02-07 01:19:54 +03:00
2023-08-22 11:46:10 +03:00
### Установка 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
```
## Использование:
2018-02-07 01:19:54 +03:00
2023-08-03 14:39:36 +03:00
Создать файл конфигурации на основе
2023-08-09 14:32:02 +03:00
[config/sample-config.yaml ](https://github.com/fruworg/pgls/blob/master/config/sample-config.yaml )
2023-08-03 14:39:36 +03:00
или еще лучше
2023-08-09 14:32:02 +03:00
[config/sample-config2.yaml ](https://github.com/fruworg/pgls/blob/master/config/sample-config2.yaml ).
2018-02-07 01:19:54 +03:00
2023-08-03 14:39:36 +03:00
Запустить в тестовом режиме:
2023-08-03 14:42:34 +03:00
```sh
2023-08-09 14:32:02 +03:00
pgls -c my_config.yaml -vv -t
2018-02-07 01:19:54 +03:00
```
2023-08-03 14:39:36 +03:00
Запуск в режиме модификации:
2023-08-03 14:42:34 +03:00
```sh
2023-08-09 14:32:02 +03:00
pgls -c my_config.yaml -vv
2018-02-07 01:19:54 +03:00
```
2023-08-03 14:39:36 +03:00
Рекомендуется не предоставлять права синхронизируемым пользователям на сервере PostgreSQL, а предоставлять права группам.
Это связано с тем, что операторы `DROP USER` , вызываемые при уходе пользователя, в противном случае терпят неудачу из-за наличия зависимых объектов.
Оператор `DROP GROUP` также не работает при наличии зависимых объектов, но группы, как правило, более стабильны и удаляются редко.
2023-04-01 16:09:45 +03:00
2023-08-22 11:46:10 +03:00
## Тестирование:
2023-08-03 14:39:36 +03:00
В каталоге `test` находится небольшой тестовый набор, который работает с внутренним LDAP-сервером и сервером PostgreSQL. Убедитесь, что команды `pg_ctl` , `initdb` и `psql` находятся в `PATH` следующим образом:
2023-08-03 14:42:34 +03:00
```sh
2023-08-09 14:32:02 +03:00
cd pgls
2023-08-03 14:39:36 +03:00
установить пакет
2018-03-14 12:04:56 +03:00
PATH=$PATH:/usr/lib/postgresql/10/bin/ bundle exec rake test
2018-02-07 01:19:54 +03:00
```
2023-08-22 11:46:10 +03:00
## Проблемы:
2018-02-07 01:19:54 +03:00
2023-08-03 14:39:36 +03:00
* В настоящее время нет возможности установить определенные атрибуты пользователя в PG на основе индивидуальных атрибутов в LDAP (срок действия и т.д.).
2018-02-07 01:19:54 +03:00
2023-08-22 11:46:10 +03:00
## Лицензия
2018-02-07 01:19:54 +03:00
2023-08-03 14:39:36 +03:00
Гем доступен с открытым исходным кодом на условиях [MIT License ](https://opensource.org/licenses/MIT ).