ldap2pg
ldap2pg â авÑомаÑизиÑÑÐµÑ Ð¿ÑоÑеÑÑ ÑозданиÑ, Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸ ÑÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ñолей и полÑзоваÑелей Postgres Pro из коÑпоÑаÑивного каÑалога
СинÑакÑиÑ
ldap2pg [паÑамеÑÑ...] [имÑ_ÐÐ]
ÐпиÑание #
ÐÑÑÑоеннÑй ÑÑнкÑионал Postgres Pro вклÑÑÐ°ÐµÑ Ð¿ÑовеÑÐºÑ Ð¿Ð°ÑÐ¾Ð»Ñ ÑÑÑеÑÑвÑÑÑей Ñоли ÑеÑез пÑоÑокол LDAP. ldap2pg позволÑÐµÑ Ð°Ð²ÑомаÑизиÑоваÑÑ Ð¿ÑоÑеÑÑ ÑозданиÑ, Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸ ÑÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ñолей и полÑзоваÑелей Postgres Pro из коÑпоÑаÑивного каÑалога.
С задаÑами по ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÑолÑми ÑвÑÐ·Ð°Ð½Ñ Ð·Ð°Ð´Ð°Ñи по ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ñавами полÑзоваÑелей, поÑколÑÐºÑ ÐºÐ°Ð¶Ð´Ð¾Ð¹ Ñоли Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð¿ÑедоÑÑÐ°Ð²Ð»ÐµÐ½Ñ Ð½Ð°Ð´Ð»ÐµÐ¶Ð°Ñие пÑава по ÑмолÑаниÑ. Postgres Pro Ñакже Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑедоÑÑавлÑÑÑ Ð¸ оÑзÑваÑÑ Ð¿Ñава.
УÑилиÑа ldap2pg поÑÑавлÑеÑÑÑ Ð²Ð¼ÐµÑÑе Ñ Postgres Pro Standard в оÑделÑном пакеÑе ldap2pg (подÑобнÑе инÑÑÑÑкÑии по ÑÑÑановке пÑÐ¸Ð²ÐµÐ´ÐµÐ½Ñ Ð² Ðлаве 16).
ldap2pg Ð¼Ð¾Ð¶ÐµÑ ÑабоÑаÑÑ Ñ Samba DC, OpenLDAP, FreeIPA, Oracle Internet Directory и Microsoft Active Directory.
ÐÐ»Ñ ldap2pg ÑÑебÑеÑÑÑ Ñайл конÑигÑÑаÑии Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ ldap2pg.yaml.
ÐозможноÑÑи #
ЧÑение наÑÑÑоек из Ñайла конÑигÑÑаÑии в ÑоÑмаÑе YAML.
Создание, изменение и Ñдаление Ñолей Postgres Pro ÑеÑез поиÑковÑе запÑоÑÑ LDAP.
Создание ÑÑаÑиÑеÑÐºÐ¸Ñ Ñолей в YAML-Ñайле конÑигÑÑаÑии Ð´Ð»Ñ Ð·Ð°Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿Ð¸Ñей LDAP.
УпÑавление ÑодиÑелÑÑкими ÑолÑми (пÑевдоним гÑÑппÑ).
ÐÑедоÑÑавление и оÑзÑв пÑав ÑÑаÑиÑеÑки или ÑеÑез запиÑи LDAP.
ÐÑобнÑй Ñежим, Ñежим пÑовеÑки.
РегиÑÑÑаÑÐ¸Ñ Ð¿Ð¾Ð¸ÑковÑÑ Ð·Ð°Ð¿ÑоÑов LDAP в жÑÑнале в каÑеÑÑве команд
ldapsearch(1).РегиÑÑÑаÑÐ¸Ñ Ð² жÑÑнале вÑÐµÑ SQL-опеÑаÑоÑов.
ТÑÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñ #
ldap2pg вÑпÑÑкаеÑÑÑ ÐºÐ°Ðº оÑделÑнÑй бинаÑнÑй Ñайл без завиÑимоÑÑей.
ÐÐ»Ñ Ð·Ð°Ð¿ÑÑка ÑÑилиÑÑ ldap2pg ÑÑебÑеÑÑÑ Ð´Ð¾ÑÑÑп ÑÑпеÑполÑзоваÑÐµÐ»Ñ Ð¸Ð»Ð¸ Ñоли без пÑав ÑÑпеÑполÑзоваÑелÑ, но Ñ Ð¿Ñавами CREATEDB и CREATEROLE.
ÐеобÑзаÑелÑно запÑÑкаÑÑ ldap2pg на Ñом же компÑÑÑеÑе, ÑÑо и ÑÐ¸Ð½Ñ ÑонизиÑованнÑй клаÑÑÐµÑ Postgres Pro Standard.
ÐвÑÑ MиРÐÐУ и одного виÑÑÑалÑного пÑоÑеÑÑоÑа доÑÑаÑоÑно, ÑÑÐ¾Ð±Ñ ÑÑилиÑа ldap2pg за ÑекÑÐ½Ð´Ñ Ð¼Ð¾Ð³Ð»Ð° ÑÐ¸Ð½Ñ ÑонизиÑоваÑÑ Ð½ÐµÑколÑко ÑÑÑÑÑ Ñолей. ÐÑÐµÐ¼Ñ ÑÐ¸Ð½Ñ ÑонизаÑии завиÑÐ¸Ñ Ð¾Ñ ÑкземплÑÑа Postgres Pro Standard и ÑкоÑоÑÑи оÑклика каÑалога LDAP.
СпÑавка по командной ÑÑÑоке #
РаÑÑиÑение ldap2pg пÑедоÑÑавлÑÐµÑ Ð³Ð¸Ð±ÐºÐ¸Ðµ возможноÑÑи конÑигÑÑаÑии, оно ÑовмеÑÑимо Ñ psql и ÑÑилиÑами OpenLDAP и ÑооÑвеÑÑÑвÑÐµÑ Ð¿ÑинÑипам Twelve-Factor App. ldap2pg ÑиÑÐ°ÐµÑ ÐºÐ¾Ð½ÑигÑÑаÑÐ¸Ñ Ð¸Ð· ÑледÑÑÑÐ¸Ñ Ð¸ÑÑоÑников (еÑли один и ÑÐ¾Ñ Ð¶Ðµ паÑамеÑÑ ÐºÐ¾Ð½ÑигÑÑаÑии задан в ÑазнÑÑ Ð¸ÑÑоÑÐ½Ð¸ÐºÐ°Ñ , иÑÑоÑник Ñ Ð¼ÐµÐ½ÑÑим номеÑом Ð¸Ð¼ÐµÐµÑ Ð±Ð¾Ð»ÐµÐµ вÑÑокий пÑиоÑиÑеÑ):
паÑамеÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ ÑÑÑоки;
пеÑеменнÑе окÑÑжениÑ;
Ñайл конÑигÑÑаÑии;
ldaprc,ldap.confи Ñ. д.
СинÑакÑÐ¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ ÑÑÑоки вÑглÑÐ´Ð¸Ñ ÑледÑÑÑим обÑазом:
ldap2pg [OPTIONS] [dbname]Ðожно иÑполÑзоваÑÑ ÑледÑÑÑие паÑамеÑÑÑ:
--checkУÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ñежим пÑовеÑки: оÑÑÑеÑÑвлÑеÑÑÑ Ð²ÑÑ Ð¾Ð´ Ñ ÐºÐ¾Ð´Ð¾Ð¼ 1, еÑли ÑкземплÑÑ Postgres Pro не ÑÐ¸Ð½Ñ ÑонизиÑован.
--colorÐклÑÑÐ°ÐµÑ ÑвеÑной вÑвод.
-cstring--configstringÐадаÑÑ Ð¿ÑÑÑ Ð´Ð¾ YAML-Ñайла конÑигÑÑаÑии. ÐÑполÑзÑйÑе - Ð´Ð»Ñ stdin.
--directorystringÐадаÑÑ Ð¿ÑÑÑ Ð´Ð¾ каÑалога, коÑоÑÑй ÑодеÑÐ¶Ð¸Ñ ÑÐ°Ð¹Ð»Ñ ÐºÐ¾Ð½ÑигÑÑаÑии.
--helpÐÑÐ²Ð¾Ð´Ð¸Ñ ÑпÑÐ°Ð²ÐºÑ Ð¸ завеÑÑÐ°ÐµÑ ÑабоÑÑ.
--ldappassword-filestringÐадаÑÑ Ð¿ÑÑÑ Ðº ÑÐ°Ð¹Ð»Ñ c паÑолем LDAP.
--quietcountУменÑÑÐ°ÐµÑ ÑÑÐ¾Ð²ÐµÐ½Ñ Ð´ÐµÑализаÑии жÑÑнала.
--realРежим дейÑÑвиÑ. ÐÑименÑÐµÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ðº ÑкземплÑÑÑ Postgres Pro.
-skip-privilegesÐÑклÑÑÐ°ÐµÑ ÑÐ¸Ð½Ñ ÑонизаÑÐ¸Ñ Ð¿Ñав.
--verbosecountУвелиÑÐ¸Ð²Ð°ÐµÑ ÑÑÐ¾Ð²ÐµÐ½Ñ Ð´ÐµÑализаÑии жÑÑнала.
--versionÐÑÐ²Ð¾Ð´Ð¸Ñ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ веÑÑии и завеÑÑÐ°ÐµÑ ÑабоÑÑ.
РнеобÑзаÑелÑном паÑамеÑÑе dbname можно пеÑедаÑÑ Ð¸Ð¼Ñ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
, ÑÑÑÐ¾ÐºÑ conninfo или URI. Ðа дополниÑелÑнÑми ÑведениÑми обÑаÑиÑеÑÑ Ðº ÑÑÑаниÑе man psql(1).
Ðо ÑмолÑÐ°Ð½Ð¸Ñ ldap2pg ÑабоÑÐ°ÐµÑ Ð² пÑобном Ñежиме. ÐÐ»Ñ Ð¾Ð¿Ð¸ÑÐ°Ð½Ð¸Ñ Ð¿Ð¾Ð¸ÑковÑÑ Ð·Ð°Ð¿ÑоÑов LDAP и ÑопоÑÑавлений ldap2pg ÑÑебÑеÑÑÑ Ñайл конÑигÑÑаÑии.
ÐаÑамеÑÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ опÑеделÑÑÑ Ð½ÐµÑколÑко Ñаз. Ð ÑлÑÑае конÑликÑа иÑполÑзÑеÑÑÑ Ð¿Ð¾Ñледний аÑгÑменÑ.
ÐеÑеменнÑе окÑÑÐ¶ÐµÐ½Ð¸Ñ #
ÐÐ»Ñ ÑаÑÑиÑÐµÐ½Ð¸Ñ ldap2pg в инÑеÑÑейÑе командной ÑÑÑоки Ð½ÐµÑ Ð¿Ð°ÑамеÑÑа, позволÑÑÑего наÑÑÑоиÑÑ Ñоединение Ñ Postgres Pro. Ðднако, ldap2pg поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð¿ÐµÑеменнÑе окÑÑÐ¶ÐµÐ½Ð¸Ñ PG* , иÑполÑзÑемÑе библиоÑекой libpq.
Ðа подÑобной инÑоÑмаÑией о пеÑеменнÑÑ Ð¾ÐºÑÑжениÑ, иÑполÑзÑемÑÑ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñекой libpq, обÑаÑиÑеÑÑ Ðº psql(1).
Ðо ÑÐ°ÐºÐ¾Ð¼Ñ Ð¶Ðµ пÑинÑÐ¸Ð¿Ñ ÑÑÑанавливаеÑÑÑ Ñоединение Ñ ÑеÑвеÑом LDAP: ldap2pg поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ ÑÑандаÑÑнÑе пеÑеменнÑе окÑÑÐ¶ÐµÐ½Ð¸Ñ LDAP* и ÑÐ°Ð¹Ð»Ñ .ldaprc. Ðа подÑобной инÑоÑмаÑией о конÑигÑÑаÑии обÑаÑиÑеÑÑ Ðº ÑÑÑаниÑе man ldap.conf(5). ldap2pg пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð´Ð²Ðµ дополниÑелÑнÑе пеÑеменнÑе: LDAPPASSWORD и LDAPPASSWORD_FILE.
ldap2pg загÑÑÐ¶Ð°ÐµÑ Ñайл .env из ÑодиÑелÑÑкого каÑалога lda2pg.yml, еÑли Ñакой Ñайл ÑÑÑеÑÑвÑеÑ.
ÐÐ»Ñ Ð¿ÐµÑеменнÑÑ
окÑÑÐ¶ÐµÐ½Ð¸Ñ Ð¸ÑполÑзÑйÑе логиÑеÑкие знаÑÐµÐ½Ð¸Ñ true или false, напÑÐ¸Ð¼ÐµÑ LDAP2PG_SKIPPRIVILEGES=true.
ÐодÑказка
ÐÑовеÑÑÑе Ñоединение Ñ Postgres Pro, иÑполÑзÑÑ ÑÑÑаниÑÑ man psql(1), и Ñ ÑеÑвеÑом LDAP, иÑполÑзÑÑ ÑÑÑаниÑÑ man ldapwhoami(1). Таким обÑазом можно бÑÐ´ÐµÑ ÑдоÑÑовеÑиÑÑÑÑ, ÑÑо ldap2pg ÑабоÑÐ°ÐµÑ Ð¿ÑавилÑно, и в далÑнейÑем бÑÐ´ÐµÑ Ð»ÐµÐ³Ñе оÑладиÑÑ Ð½Ð°ÑÑÑойки и конÑигÑÑаÑиÑ.
ÐаÑÑÑойка ÑегиÑÑÑаÑии ÑобÑÑий #
У ÑаÑÑиÑÐµÐ½Ð¸Ñ ldap2pg еÑÑÑ Ð½ÐµÑколÑко ÑÑовней ÑегиÑÑÑаÑии ÑобÑÑий:
ERROR: инÑоÑмаÑÐ¸Ñ Ð¾ возникÑей оÑибке. ÐÑи возникновении оÑибки пÑоиÑÑ Ð¾Ð´Ð¸Ñ Ñбой в ÑабоÑе ldap2pg.WARNING: пÑедÑпÑеждение ldap2pg о ваÑианÑÐ°Ñ , о коÑоÑÑÑ Ð´Ð¾Ð»Ð¶ÐµÐ½ знаÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑ.CHANGE: ÑолÑко изменениÑ, коÑоÑÑе пÑименÑÑÑÑÑ Ðº клаÑÑеÑÑ Postgres Pro.INFO(по ÑмолÑаниÑ): инÑоÑмаÑÐ¸Ñ Ð¾ Ñом, ÑÑо Ð´ÐµÐ»Ð°ÐµÑ ldap2pg, в оÑобенноÑÑи, пеÑед длинной задаÑей.DEBUG: вÑÑ, вклÑÑÐ°Ñ Ð¾Ð±ÑÑнÑе SQL-запÑоÑÑ Ð¸ поиÑковÑе запÑоÑÑ LDAP.
Флаги командной ÑÑÑоки --quiet и --verbose ÑооÑвеÑÑÑвенно ÑменÑÑаÑÑ Ð¸ ÑвелиÑиваÑÑ ÑÑÐ¾Ð²ÐµÐ½Ñ Ð´ÐµÑализаÑии жÑÑнала.
СамÑй вÑÑокий ÑÑÐ¾Ð²ÐµÐ½Ñ Ð´ÐµÑализаÑии можно вÑбÑаÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¿ÐµÑеменной окÑÑÐ¶ÐµÐ½Ð¸Ñ LDAP2PG_VERBOSITY. ÐапÑимеÑ:
$ LDAP2PG_VERBOSITY=DEBUG ldap2pg 12:23:45 INFO Starting ldap2pg version=v6.0-alpha5 runtime=go1.21.0 commit=<none> 12:23:45 WARN Running a prerelease! Use at your own risks! 12:23:45 DEBUG Searching configuration file in standard locations. 12:23:45 DEBUG Found configuration file. path=./ldap2pg.yml $
ФоÑÐ¼Ð°Ñ Ð²Ñвода ldap2pg завиÑÐ¸Ñ Ð¾Ñ Ñого, иÑполÑзÑеÑÑÑ Ð»Ð¸ ÑеÑминал TTY. ÐÑли ÑÑандаÑÑнÑй поÑок оÑибок вÑводиÑÑÑ Ð½Ð° ÑеÑминал TTY, запиÑи ÑвеÑнÑе и иÑ
легко пÑоÑиÑаÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑ. Ðо вÑеÑ
оÑÑалÑнÑÑ
ÑлÑÑаÑÑ
запиÑи вÑводÑÑÑÑ Ð² ÑоÑмаÑе logfmt Ð´Ð»Ñ Ð¼Ð°Ñинной обÑабоÑки. ÐолÑÑиÑÑ Ð²Ñвод в Ñдобном Ð´Ð»Ñ ÑÑÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑзоваÑелем ÑоÑмаÑе можно Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ñлага командной ÑÑÑоки --color.
СпÑавка по ÑÐ°Ð¹Ð»Ñ ldap2pg.yml #
ÐÐ»Ñ ldap2pg ÑÑебÑеÑÑÑ Ñайл конÑигÑÑаÑии в ÑоÑмаÑе YAML, коÑоÑÐ¾Ð¼Ñ Ð¾Ð±ÑÑно даÑÑ Ð¸Ð¼Ñ ldap2pg.yml и коÑоÑÑй помеÑаÑÑ Ð² ÑабоÑий каÑалог. ЧеÑез ÑÑÐ¾Ñ Ñайл можно наÑÑÑоиÑÑ Ð²Ñе необÑ
одимÑе паÑамеÑÑÑ: запÑоÑÑ Ð´Ð»Ñ Ð¿ÑовеÑки Postgres Pro, поиÑковÑе запÑоÑÑ LDAP, пÑава и каÑÑа ÑинÑ
ÑонизаÑии.
ÐÑедÑпÑеждение
ÐÐ»Ñ ldap2pg ÑÑебÑеÑÑÑ Ñайл конÑигÑÑаÑии, где бÑÐ´ÐµÑ Ð¾Ð¿Ð¸Ñана каÑÑа ÑÐ¸Ð½Ñ ÑонизаÑии.
Ðа оÑÐ½Ð¾Ð²Ñ Ð¼Ð¾Ð¶Ð½Ð¾ взÑÑÑ ÑодеÑжание пÑоÑеÑÑиÑованного Ñайла ldap2pg.yml:
# # # РРРРРРРРРФ РРУ РРЦ Ð Ð L D A P 2 P G # # # ÐÑо пÑÐ¸Ð¼ÐµÑ Ñайла конÑигÑÑаÑии ldap2pg.yml, вклÑÑаÑÑего опÑеделение ÑÑаÑиÑеÑÐºÐ¸Ñ # Ñолей и гÑÑпп, пÑедоÑÑавление пÑав и наÑÑÑÐ¾Ð¹ÐºÑ Ð¿Ð¾Ð¸Ñка LDAP. # # ÐÑедполагаеÑÑÑ, ÑÑо вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ñ ÑледÑÑÑие ÑÑебованиÑ: # # - ÐÑе полÑзоваÑели LDAP Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð¿Ð¾Ð¼ÐµÑÐµÐ½Ñ Ð² гÑÑÐ¿Ð¿Ñ `ldap_roles`. # - ÐÑава Ð´Ð»Ñ ÑÑÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð¿ÑедоÑÑÐ°Ð²Ð»ÐµÐ½Ñ Ð¿Ð¾Ð»ÑзоваÑелÑм в гÑÑппе `readers`. # - ÐÑава Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи даннÑÑ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð¿ÑедоÑÑÐ°Ð²Ð»ÐµÐ½Ñ Ð¿Ð¾Ð»ÑзоваÑелÑм в гÑÑппе `writers`. # - ÐÑава Ð´Ð»Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ DDL-запÑоÑов Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð¿ÑедоÑÑÐ°Ð²Ð»ÐµÐ½Ñ Ð¿Ð¾Ð»ÑзоваÑелÑм в гÑÑппе `owners`. # - Ðолжна ÑÑÑеÑÑвоваÑÑ Ð¾Ð´Ð½Ð° или неÑколÑко баз даннÑÑ Ñо ÑÑ ÐµÐ¼Ð¾Ð¹ public и, возможно, еÑÑ ÐºÐ°ÐºÐ¾Ð¹-Ñо ÑÑ ÐµÐ¼Ð¾Ð¹. # - ÐÑава не Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð¾Ð³ÑаниÑÐµÐ½Ñ ÑÑ ÐµÐ¼Ð¾Ð¹. То еÑÑÑ ÐµÑли Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ ÐµÑÑÑ Ð¿Ñава Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи даннÑÑ Ð² базÑ, Ñо они # ÑаÑпÑоÑÑÑанÑÑÑÑÑ Ð½Ð° вÑе ÑÑ ÐµÐ¼Ñ. # # СодеÑжание каÑалога LDAP опиÑано в test/fixtures/openldap-data.ldif # # ÐÑполÑзÑйÑе инÑоÑмаÑÐ¸Ñ Ð² ÑооÑвеÑÑÑвии Ñ Ð²Ð°Ñими поÑÑебноÑÑÑми! # # # ÐеÑÑÐ¸Ñ ÑоÑмаÑа Ñайла. ÐозволÑÐµÑ ldap2pg пÑовеÑиÑÑ, поддеÑживаеÑÑÑ Ð»Ð¸ Ñайл. # version: 6 # # 1. Ð Ð Ð Ð Ð Ð Ð Ð P O S T G R E S # # Ðа подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº Ð Ð°Ð·Ð´ÐµÐ»Ñ Â«ÐÑовеÑка клаÑÑеÑа Postgres Pro». # postgres: roles_blacklist_query: [nominal, postgres, pg_*] databases_query: [nominal] # # 2. Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð # # Ðа подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº Ð Ð°Ð·Ð´ÐµÐ»Ñ Â«Ð£Ð¿Ñавление пÑавами». ÐÑава, обÑамлÑннÑе # двойнÑм нижним подÑÑÑкиванием, оÑноÑÑÑÑÑ Ðº вÑÑÑоеннÑм пÑоÑилÑм пÑав. Ðа подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº ÑооÑвеÑÑÑвÑÑÑей докÑменÑаÑии # в Разделе «ÐÑÑÑоеннÑе пÑава» # . # privileges: # ÐпÑеделиÑÑ Ð³ÑÑÐ¿Ð¿Ñ `ro` ÑолÑко Ñ Ð¿Ñавами Ð´Ð»Ñ ÑÑÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ ro: - __connect__ - __select_on_tables__ - __select_on_sequences__ - __usage_on_schemas__ - __usage_on_types__ # ÐпÑеделиÑÑ Ð³ÑÑÐ¿Ð¿Ñ `rw` ÑолÑко Ñ Ð¿Ñавами Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи даннÑÑ rw: - __temporary__ - __all_on_tables__ - __all_on_sequences__ # ÐпÑеделиÑÑ Ð³ÑÑÐ¿Ð¿Ñ `ddl` ÑолÑко Ñ Ð¿Ñавами Ð´Ð»Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ DDL-команд. ddl: - __create_on_schemas__ # # 3. РРРТ РС РРХ РРРРРРЦ Ð Ð # # Ðиже пÑиведÑн ÑпиÑок пÑавил Ð´Ð»Ñ Ð½Ð°Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ñолей и пÑедоÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ñав. Ðаждое пÑавило # можно пÑевÑаÑиÑÑ Ð² Ñаблон Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð°ÑÑибÑÑов из запиÑей LDAP, коÑоÑÑе возвÑаÑÐ°ÐµÑ Ð¿Ð¾Ð¸Ñковой # запÑоÑ. # # ÐÑе Ñоли, найденнÑе в клаÑÑеÑе, но ÑозданнÑе не в ÑооÑвеÑÑÑвии Ñ Ð¿Ñавилами, бÑдÑÑ ÑдаленÑ. ÐÑе # пÑава, найденнÑе в клаÑÑеÑе, но ÑозданнÑе не в ÑооÑвеÑÑÑвии Ñ Ð¿Ñавилами, бÑдÑÑ Ð¾ÑозванÑ. # rules: - description: "Setup static roles and grants." roles: - names: - readers options: NOLOGIN - name: writers # ÐÑедоÑÑавиÑÑ Ð¿Ñава Ð´Ð»Ñ ÑÑÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑзоваÑелÑм Ñ Ð¿Ñавами Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи даннÑÑ parent: readers options: NOLOGIN - name: owners # ÐÑедоÑÑавиÑÑ Ð¿Ñава Ð´Ð»Ñ ÑÑÐµÐ½Ð¸Ñ Ð¸ запиÑи даннÑÑ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ñ ÑолÑÑ Ð²Ð»Ð°Ð´ÐµÐ»ÑÑа parent: writers options: NOLOGIN grant: - privilege: ro role: readers # ÐÑивÑзаÑÑ Ðº конкÑеÑной ÑÑ ÐµÐ¼Ðµ schemas: nominal - privilege: rw role: writers - privilege: ddl role: owners - description: "Search LDAP to create readers, writers and owners." ldapsearch: base: cn=users,dc=bridoulou,dc=fr filter: " (| (cn=owners) (cn=readers) (cn=writers) ) " role: name: '{member.cn}' options: LOGIN parent: "{cn}"
РаÑположение Ñайла #
ldap2pg иÑÐµÑ Ñайл конÑигÑÑаÑии в ÑледÑÑÑем поÑÑдке:
ldap2pg.ymlв ÑекÑÑем ÑабоÑем каÑалоге;~/.config/ldap2pg.yml;/etc/ldap2pg.yml;/etc/ldap2pg/ldap2pg.yml.
ÐÑи заданном LDAP2PG_CONFIG или --config ldap2pg пÑопÑÑÐºÐ°ÐµÑ Ð¿Ð¾Ð¸Ñк Ñайла конÑигÑÑаÑии в ÑÑандаÑÑнÑÑ
меÑÑаÑ
ÑаÑположениÑ. ÐеÑÐµÐ´Ð°Ð²Ð°Ñ -, можно ÑказаÑÑ, ÑÑо Ñайл необÑ
одимо пÑоÑиÑаÑÑ Ð¸Ð· ÑÑандаÑÑного ввода. ÐÑÐ¾Ñ ÑпоÑоб полезен, еÑли нÑжно измениÑÑ ÐºÐ¾Ð½ÑигÑÑаÑÐ¸Ñ ldap2pg динамиÑеÑки.
СÑÑÑкÑÑÑа Ñайла #
Ð Ñайле ldap2pg.yml еÑÑÑ Ð½ÐµÑколÑко Ñазделов:
postgres: наÑÑÑойка ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ñ Postgres Pro и запÑоÑов Ð´Ð»Ñ Ð¿ÑовеÑки.ldap: конÑигÑÑаÑÐ¸Ñ Ð´Ð»Ñ ÐºÐ»Ð¸ÐµÐ½Ñа LDAP.privileges: опÑеделение пÑоÑилей пÑав.rules: ÑпиÑок поиÑковÑÑ Ð·Ð°Ð¿ÑоÑов LDAP и ÑвÑзаннÑе Ñ Ð½Ð¸Ð¼Ð¸ ÑопоÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ñолей и пÑав.
ÐÑли Ñ Ð²Ð°Ñ Ð½ÐµÑ ÑÑÑкого пониманиÑ, Ñ Ñего наÑаÑÑ, возÑмиÑе за оÑÐ½Ð¾Ð²Ñ Ð¿ÑоÑеÑÑиÑованнÑй Ñайл ldap2pg.yml Ñ Ð¿Ð¾Ð´ÑобнÑми комменÑаÑиÑми.
Ð YAML #
YAML â ÑÑо ÑаÑÑиÑеннÑй JSON. ÐокÑÐ¼ÐµÐ½Ñ Ð² ÑоÑмаÑе JSON ÑвлÑеÑÑÑ ÐºÐ¾ÑÑекÑнÑм YAML-докÑменÑом. YAML â доволÑно ÑвободнÑй ÑоÑмаÑ, где оÑÑÑÑÐ¿Ñ Ð¸Ð¼ÐµÑÑ Ð·Ð½Ð°Ñение. ÐÐ»Ñ Ð¿ÑимеÑа можно поÑмоÑÑеÑÑ ÑпаÑÐ³Ð°Ð»ÐºÑ Ð¿Ð¾ ÑоÑмаÑÑ YAML.
Ð Ñайле ldap2pg.yaml бÑдÑÑ Ð¸ÑполÑзоваÑÑÑÑ Ð·Ð²ÐµÐ·Ð´Ð¾Ñки Ð´Ð»Ñ Ð³Ð»Ð¾Ð±Ð°Ð»ÑнÑÑ
Ñаблонов и ÑигÑÑнÑе Ñкобки Ð´Ð»Ñ Ð²Ð½ÐµÐ´ÑÐµÐ½Ð¸Ñ Ð°ÑÑибÑÑов LDAP. ÐбÑаÑиÑе внимание, ÑÑо ÑÑи знаÑÐµÐ½Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð·Ð°ÐºÐ»ÑÑÐµÐ½Ñ Ð² кавÑÑки.
rules:
- role: {cn} # ÐепÑавилÑнÑй YAML-ÑловаÑÑ
- role: "{cn}" # СÑÑока Ñ Ð²Ð½ÐµÐ´ÑÑннÑм аÑÑибÑÑом LDAPРаздел postgres #
Ð Ñазделе postgres опÑеделÑÑÑÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑÑкие SQL-запÑоÑÑ Ð´Ð»Ñ Ð¿ÑовеÑок в Postgres Pro.
Раздел postgres ÑодеÑÐ¶Ð¸Ñ Ð½ÐµÑколÑко паÑамеÑÑов *_query. Ðни могÑÑ Ð¿ÑедÑÑавлÑÑÑ Ñобой ÑÑÑокÑ, ÑодеÑжаÑÑÑ SQL-запÑоÑ, или YAML-ÑпиÑок Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ ÑÑаÑиÑеÑкого ÑпиÑка знаÑений без вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿ÑоÑа в клаÑÑеÑе Postgres Pro.
databases_query#SQL-запÑÐ¾Ñ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ ÑпиÑка имÑн баз даннÑÑ Ð² клаÑÑеÑе. Ðо ÑмолÑÐ°Ð½Ð¸Ñ ldap2pg иÑÐµÑ Ñе Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ , Ñ ÐºÐ¾ÑоÑÑми Ð¼Ð¾Ð¶ÐµÑ ÑÑÑановиÑÑ Ñоединение и обÑекÑÑ ÐºÐ¾ÑоÑÑÑ Ð¼Ð¾Ð¶ÐµÑ Ð¿ÐµÑеназнаÑиÑÑ Ð²Ð»Ð°Ð´ÐµÐ»ÑÑÑ. ldap2pg ÑиклиÑно пÑоÑмаÑÑÐ¸Ð²Ð°ÐµÑ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ , ÑÑÐ¾Ð±Ñ Ð¿ÐµÑеназнаÑиÑÑ Ð¾Ð±ÑекÑÑ Ð¿ÐµÑед Ñдалением Ñоли. ldap2pg ÑпÑавлÑÐµÑ Ð¿Ñавом доÑÑÑпа к каждой базе даннÑÑ .
postgres: databases_query: "SELECT datname FROM pg_catalog.pg_databases;" # ÐÐÐ databases_query: [mydb]
ÐÑимеÑание
ÐÑли паÑамеÑÑ
_queryзадан как YAML-ÑпиÑок, запÑÐ¾Ñ Ð´Ð»Ñ Ð¿ÑовеÑки в клаÑÑÐµÑ Ð½Ðµ оÑпÑавлÑеÑÑÑ, а ldap2pg иÑполÑзÑÐµÑ ÑÑаÑиÑеÑкое знаÑение.fallback_owner#ÐÐ¼Ñ Ñоли, коÑоÑÐ°Ñ Ð¿Ð¾Ð»ÑÑÐ°ÐµÑ Ð¿Ñава Ð²Ð»Ð°Ð´ÐµÐ½Ð¸Ñ Ð±Ð°Ð·Ð¾Ð¹ даннÑÑ Ð²Ð¼ÐµÑÑо ÑдалÑнной из Ð±Ð°Ð·Ñ Ñоли.
ÐеÑед Ñдалением Ñоли ldap2pg пеÑеназнаÑÐ°ÐµÑ Ð¾Ð±ÑекÑÑ Ð¸ оÑиÑÐ°ÐµÑ ÑпиÑок ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð¾ÑÑÑпом (access control list, ACL). СнаÑала Ñелевой полÑзоваÑÐµÐ»Ñ ldap2pg пеÑеназнаÑÐ°ÐµÑ Ð²Ð»Ð°Ð´ÐµÐ»ÑÑа Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ . ÐовÑй Ð²Ð»Ð°Ð´ÐµÐ»ÐµÑ â ÑÑо Ñак назÑваемÑй запаÑной Ð²Ð»Ð°Ð´ÐµÐ»ÐµÑ (fallback owner). ÐаÑем дÑÑгие обÑекÑÑ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ Ð¿ÐµÑеназнаÑаÑÑÑÑ ÐºÐ°Ð¶Ð´Ð¾Ð¼Ñ Ð²Ð»Ð°Ð´ÐµÐ»ÑÑÑ.
managed_roles_query#SQL-запÑÐ¾Ñ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ ÑпиÑка имÑн ÑпÑавлÑемÑÑ Ñолей.
ldap2pg Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑоизводиÑÑ Ñдаление Ñолей или изменение пÑав ÑолÑко Ð´Ð»Ñ ÑпÑавлÑемÑÑ Ñолей. Ðак пÑавило, в ÑезÑлÑÑаÑе вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ñакого запÑоÑа возвÑаÑаеÑÑÑ ÑпиÑок доÑеÑÐ½Ð¸Ñ Ñолей, Ð²Ñ Ð¾Ð´ÑÑÐ¸Ñ Ð² опÑеделÑннÑÑ Ð³ÑÑппÑ, напÑимеÑ, Ñоли из гÑÑппÑ
ldap_roles. Ðо ÑмолÑÐ°Ð½Ð¸Ñ ldap2pg ÑпÑавлÑÐµÑ Ð²Ñеми ÑолÑми, к коÑоÑÑм Ð¸Ð¼ÐµÐµÑ Ð´Ð¾ÑÑÑп.publicâ ÑÑо ÑпеÑиалÑÐ½Ð°Ñ ÑолÑ, вÑÑÑÐ¾ÐµÐ½Ð½Ð°Ñ Ð² Postgres Pro. ÐÑли в ÑезÑлÑÑаÑÐ°Ñ Ð·Ð°Ð¿ÑоÑаmanaged_roles_queryпоÑвлÑеÑÑÑ ÑолÑpublic, ldap2pg бÑÐ´ÐµÑ ÑпÑавлÑÑÑ Ð¿Ñавами в ÑÑ ÐµÐ¼Ðµpublic. ldap2pg ÑпÑавлÑÐµÑ Ð¿Ñавами в ÑÑ ÐµÐ¼Ðµpublicпо ÑмолÑаниÑ.Ðиже пÑиведÑн пÑÐ¸Ð¼ÐµÑ Ñого, как наÑÑÑоиÑÑ ldap2pg Ð´Ð»Ñ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÑолÑÑ
public, ÑодиÑелÑÑкой ÑолÑÑldap_rolesи лÑбой доÑеÑней ÑолÑÑ Ð¸Ð· гÑÑппÑldap_roles:postgres: managed_roles_query: | VALUES ('public'), ('ldap_roles') UNION SELECT DISTINCT role.rolname FROM pg_roles AS role JOIN pg_auth_members AS ms ON ms.member = role.oid JOIN pg_roles AS parent ON parent.rolname = 'ldap_roles' AND parent.oid = ms.roleid ORDER BY 1;roles_blacklist_query#SQL-запÑоÑ, коÑоÑÑй возвÑаÑÐ°ÐµÑ Ð¸Ð¼Ñ Ñоли и глобалÑнÑй Ñаблон Ð´Ð»Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñоли в ÑеÑнÑй ÑпиÑок. ldap2pg не бÑÐ´ÐµÑ ÑаÑÑмаÑÑиваÑÑ ÑÑи Ñоли. ÐнаÑение по ÑмолÑаниÑ:
[postgres, pg_*]. ldap2pg добавлÑÐµÑ Ð² ÑеÑнÑй ÑпиÑок Ñвоего полÑзоваÑелÑ.postgres: roles_blacklist_query: - postgres - "pg_*" - "rds_*"
ÐÑедÑпÑеждение
ÐбÑаÑиÑе внимание, ÑÑо '*foo' â ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð² ÑоÑмаÑе YAML. Шаблон, коÑоÑÑй вводиÑÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ '*', Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ заклÑÑаÑÑ Ð² кавÑÑки.
schemas_query#SQL-запÑоÑ, коÑоÑÑй возвÑаÑÐ°ÐµÑ Ð¸Ð¼ÐµÐ½Ð° ÑпÑавлÑемÑÑ ÑÑ ÐµÐ¼ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ . ldap2pg вÑполнÑÐµÑ ÑÑÐ¾Ñ Ð·Ð°Ð¿ÑÐ¾Ñ Ð´Ð»Ñ Ð±Ð°Ð· даннÑÑ , ÑпиÑок коÑоÑÑÑ Ð±Ñл полÑÑен в ÑезÑлÑÑаÑе запÑоÑа
databases_query, ÑолÑко еÑÑÑ ldap2pg ÑпÑавлÑÐµÑ Ð¿Ñавами в Ð½Ð¸Ñ . ldap2pg ÑиклиÑно пÑоÑмаÑÑÐ¸Ð²Ð°ÐµÑ Ð²Ñе обÑекÑÑ Ð² ÑÑÐ¸Ñ ÑÑ ÐµÐ¼Ð°Ñ , когда пÑовеÑÑÐµÑ Ð¿ÑедоÑÑавленнÑе пÑава в клаÑÑеÑе.postgres: schemas_query: | SELECT nspname FROM pg_catalog.pg_namespace
Раздел ldap #
Раздел ldap необÑ
одим Ð´Ð»Ñ Ð½Ð°ÑÑÑойки Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ ÐºÐ»Ð¸ÐµÐ½Ñа LDAP. ÐаÑÑÑойÑе Ñоединение, иÑполÑзÑÑ Ñайл ldap.conf и пеÑеменнÑе окÑÑÐ¶ÐµÐ½Ð¸Ñ LDAP*.
known_rdns#СпиÑок аÑÑибÑÑов, коÑоÑÑе ÑвлÑÑÑÑÑ ÑаÑÑÑÑ ÑникалÑного имени (distinguished name, DN).
ldap2pg пÑопÑÑÐºÐ°ÐµÑ Ð¿Ð¾Ð¸Ñк Ð´Ð»Ñ Ð°ÑÑибÑÑов из ÑÑого ÑпиÑка. ÐапÑимеÑ,
{member.cn}не пÑиведÑÑ Ðº Ð²Ð»Ð¾Ð¶ÐµÐ½Ð½Ð¾Ð¼Ñ Ð¿Ð¾Ð¸ÑÐºÑ ÑÑеди вÑÐµÑ Ñленов (member), еÑли аÑÑибÑÑcnвклÑÑÑн в ÑпиÑокknown_rdns. ÐнаÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑаниÑ:[n, l, st, o, ou, c, street, dc, uid]. РаÑÑиÑÑÑе ÑпиÑок, ÑÑÐ¾Ð±Ñ ÑÑкоÑиÑÑ ÑÐ¸Ð½Ñ ÑонизаÑиÑ. УдалиÑе знаÑение, еÑли оно не ÑвлÑеÑÑÑ ÑаÑÑÑÑ ÑникалÑного имени.ldap: known_rdns: [cn, uid]
Раздел privileges #
Ð Ñазделе веÑÑ
него ÑÑÐ¾Ð²Ð½Ñ privileges опÑеделÑÑÑÑÑ Ð¿Ñава в Postgres Pro. Ðн пÑедÑÑавлÑÐµÑ Ñобой ÑопоÑÑавление, опÑеделÑÑÑее пÑоÑили пÑав, на коÑоÑÑе в далÑнейÑем даÑÑÑÑ ÑÑÑлка в пÑавиле Ð´Ð»Ñ Ð¿ÑедоÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ñава в каÑÑе ÑинÑ
ÑонизаÑии. ÐÑоÑÐ¸Ð»Ñ Ð¿Ñав â ÑпиÑок ÑÑÑлок на ÑÐ¸Ð¿Ñ Ð¿Ñав из ACL Postgres Pro или дÑÑгиÑ
пÑоÑилей. ÐÑоÑÐ¸Ð»Ñ Ð¿Ñав Ð¼Ð¾Ð¶ÐµÑ Ð²ÐºÐ»ÑÑаÑÑ Ð´ÑÑгой пÑоÑÐ¸Ð»Ñ ÑекÑÑÑивно. Ðа подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº ÑÐ°Ð·Ð´ÐµÐ»Ñ Ð£Ð¿Ñавление пÑавами.
privileges:
reading:
- on: GLOBAL DEFAULT
type: SELECT
object: TABLES
writing:
- reading
- on: GLOBAL
type: SELECT
object: TABLESÐÑоÑÐ¸Ð»Ñ Ð¿Ñав, Ð¸Ð¼Ñ ÐºÐ¾ÑоÑÑй наÑинаеÑÑÑ Ñ _, неакÑивен, еÑли он не вклÑÑÑн в акÑивнÑй пÑоÑилÑ.
object#ÐпÑеделÑÐµÑ Ñелевой обÑÐµÐºÑ Ð² ACL, где пÑава пÑедоÑÑавлÑÑÑÑÑ Ð½Ð° ÑÑовне обÑекÑов.
Ðолезен ÑолÑко Ð´Ð»Ñ ACL
GLOBAL DEFAULTиSCHEMA DEFAULT, где обÑекÑÑ Ð¿ÑедÑÑавлÑÑÑ Ñобой клаÑÑÑ ÑелевÑÑ Ð¾Ð±ÑекÑов, Ñакие какTABLES,SEQUENCESи Ñ. д. ÐÑавило пÑедоÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ñав опÑеделÑÐµÑ ÑелевÑÑ ÑÑ ÐµÐ¼Ñ Ð² ÑлÑÑае ACLSCHEMA DEFAULT.privileges: reading: - type: SELECT on: GLOBAL DEFAULT object: TABLEStype#Тип пÑава в ÑооÑвеÑÑÑвии Ñ Ð¾Ð¿Ð¸Ñанием в Разделе 5.8. ÐапÑимеÑ, пÑаво
SELECT,REFERENCES,USAGEи Ñ. д.ÐнаÑение Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð·Ð°Ð´Ð°Ð½Ð¾ одной ÑÑÑокой или ÑпиÑком ÑÑÑок. ФоÑма множеÑÑвенного ÑиÑла
typesдопÑÑÑима. Ðогда опÑеделÑеÑÑÑ Ð½ÐµÑколÑко Ñипов, Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ Ñипа опÑеделÑеÑÑÑ Ð½Ð¾Ð²Ð¾Ðµ пÑаво, иÑполÑзÑÑ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñе аÑÑибÑÑÑ, Ñакие какon.privileges: reading: - type: USAGE on: SCHEMASon#Целевой ACL Ð´Ð»Ñ Ñипа пÑава, напÑимеÑ, TABLES, SEQUENCES, SCHEMAS и Ñ. д. ÐбÑаÑиÑе внимание на оÑобÑе ÑлÑÑаи
ALL TABLES,ALL SEQUENCESи Ñ. д. Ðа подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº ÑÐ°Ð·Ð´ÐµÐ»Ñ Ð£Ð¿Ñавление пÑавами.privileges: reading: - type: SELECT on: ALL TABLES
Раздел rules #
Ð Ñазделе веÑÑ
него ÑÑÐ¾Ð²Ð½Ñ rules опÑеделÑÑÑÑÑ Ð¿Ñавила ÑинÑ
ÑонизаÑии. Ðн ÑодеÑÐ¶Ð¸Ñ ÑпиÑок в ÑоÑмаÑе YAML. ÐÑо единÑÑвеннÑй обÑзаÑелÑнÑй паÑамеÑÑ Ð² Ñайле ldap2pg.yaml. ÐаждÑй ÑÐ»ÐµÐ¼ÐµÐ½Ñ rules назÑваеÑÑÑ ÑопоÑÑавлением. СопоÑÑавление â YAML-ÑловаÑÑ Ñ Ð¿Ð¾Ð´Ñазделом Ð´Ð»Ñ Ð»Ñбой Ñоли или пÑава. СопоÑÑавление Ñакже Ð¼Ð¾Ð¶ÐµÑ Ð²ÐºÐ»ÑÑаÑÑ Ð¿Ð¾Ð»Ðµ description и Ñаздел ldapsearch.
rules:
- description: "Define DBA roles"
ldapsearch:
base: ...
roles:
- name: "{cn}"
options: LOGIN SUPERUSERÐодÑаздел ldapsearch необÑзаÑелÑнÑй. ÐпÑеделиÑÑ Ñоли и пÑедоÑÑавиÑÑ Ð¿Ñава можно без запÑоÑов к каÑалогÑ.
description#Ð¡Ð²Ð¾Ð±Ð¾Ð´Ð½Ð°Ñ ÑÑÑока, коÑоÑÐ°Ñ Ð¸ÑполÑзÑеÑÑÑ Ð´Ð»Ñ ÑегиÑÑÑаÑии ÑобÑÑий в жÑÑнале. Ð ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð½ÐµÐ»ÑÐ·Ñ Ð²Ð½ÐµÐ´ÑиÑÑ Ð¿Ð°ÑамеÑÑ mustache.
ldapsearch#ÐиÑекÑива опÑеделÑÐµÑ Ð¿Ð°ÑамеÑÑÑ Ð¿Ð¾Ð¸ÑковÑÑ Ð·Ð°Ð¿ÑоÑов LDAP. Ðна названа вÑлед за ÑÑилиÑой командной ÑÑÑоки ldapsearch, Ð²Ñ Ð¾Ð´ÑÑей в диÑÑÑибÑÑив OpenLDAP. Ðоведение диÑекÑÐ¸Ð²Ñ Ð² Ñелом должно ÑовпадаÑÑ Ñ Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸ÐµÐ¼ ÑÑилиÑÑ.
ÐÑимеÑание
Ð ÑекÑÑе докÑменÑаÑии запÑÐ¾Ñ LDAP (LDAP query) назÑваеÑÑÑ Ð¿Ð¾Ð¸ÑковÑм запÑоÑом LDAP, а ÑеÑмин «запÑоÑ» оÑноÑиÑÑÑ Ðº SQL.
РдиÑекÑиваÑ
ldapsearchв пÑавила назнаÑÐµÐ½Ð¸Ñ Ñолей (пÑавилаrole) и пÑавила пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ñав (пÑавилаgrant) можно и нÑжно внедÑÑÑÑ Ð°ÑÑибÑÑÑ LDAP в ÑигÑÑнÑÑ ÑÐºÐ¾Ð±ÐºÐ°Ñ . Ðа подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº ÑÐ°Ð·Ð´ÐµÐ»Ñ ÐапÑÐ¾Ñ Ðº каÑÐ°Ð»Ð¾Ð³Ñ ÑеÑез LDAP.base,scopeandfilterÐÑи паÑамеÑÑÑ Ð¸Ð¼ÐµÑÑ ÑÐ¾Ñ Ð¶Ðµ ÑмÑÑл, опÑеделение и знаÑение по ÑмолÑаниÑ, ÑÑо и ÑооÑвеÑÑÑвÑÑÑие паÑамеÑÑÑ ÑÑилиÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ ÑÑÑоки ldapsearch.
rules: - ldapsearch: base: ou=people,dc=acme,dc=tld scope: sub filter: > (&f (member=*) (cn=group_*) )joinsÐозволÑÐµÑ Ð½Ð°ÑÑÑоиÑÑ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð½Ñй поиÑк LDAP. Раздел
joinsâ ÑловаÑÑ Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ аÑÑибÑÑа в каÑеÑÑве клÑÑа и паÑамеÑÑами поиÑкового запÑоÑа LDAP в каÑеÑÑве знаÑениÑ. Ð ÑÑом ÑлÑÑае паÑамеÑÑÑ Ð¿Ð¾Ð¸Ñкового запÑоÑа LDAP Ñакие же, как и Ð´Ð»Ñ Ð¸Ð·Ð½Ð°ÑалÑного полноÑенного поиÑка LDAP. ÐложеннÑй поиÑк в ÑÐ°Ð¼ÐºÐ°Ñ Ð´ÑÑгого вложенного поиÑка не поддеÑживаеÑÑÑ.rules: - ldapsearch: joins: member: filter: ... scope: ... role: - name: "{member.sAMAccountName}"ÐÑнова вложенного поиÑка â знаÑение ÑÑÑлаÑÑегоÑÑ Ð°ÑÑибÑÑа, напÑимеÑ, каждое знаÑение
member. ÐаÑÑÑоиÑÑ Ð°ÑÑибÑÑbaseÐ´Ð»Ñ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð½Ð¾Ð³Ð¾ поиÑка невозможно. Также ldap2pg Ð¸Ð·Ð²Ð»ÐµÐºÐ°ÐµÑ Ð°ÑÑибÑÑÑ Ð´Ð»Ñ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð½ÑÑ Ð¿Ð¾Ð¸Ñков из пÑавилroleиgrant. Ð ÑÐ°Ð¼ÐºÐ°Ñ Ð¿Ð¾Ð»Ð½Ð¾Ñенного поиÑка доÑÑÑпен ÑолÑко один ÑÑÐ¾Ð²ÐµÐ½Ñ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð½Ð¾Ð³Ð¾ поиÑка. ÐапÑÑÑиÑÑ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð½Ñй поиÑк внÑÑÑи дÑÑгого вложенного поиÑка невозможно.Ðа подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº ÑÐ°Ð·Ð´ÐµÐ»Ñ ÐапÑÐ¾Ñ Ðº каÑÐ°Ð»Ð¾Ð³Ñ ÑеÑез LDAP.
ÐÑимеÑание
ÐÑполниÑÑ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð½Ñй поиÑк ÑÑеди вÑÐµÑ Ð·Ð°Ð¿Ð¸Ñей, полÑÑеннÑÑ Ð² ÑезÑлÑÑаÑе полноÑенного поиÑка, иногда оÑÐµÐ½Ñ Ñложно. ÐапÑÐ¾Ñ Ð¼Ð¾Ð¶Ð½Ð¾ ÑÑоÑниÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÑилÑÑÑов поиÑка, ÑÐ°ÐºÐ¸Ñ ÐºÐ°Ðº
memberOf. Ðа подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº ваÑÐµÐ¼Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸ÑÑÑаÑоÑÑ ÐºÐ°Ñалога LDAP и докÑменÑаÑии.
role#ÐадаÑÑ Ð¿Ñавило Ð´Ð»Ñ Ð¾Ð¿Ð¸ÑÐ°Ð½Ð¸Ñ Ð¾Ð´Ð½Ð¾Ð¹ или неÑколÑÐºÐ¸Ñ Ñолей, коÑоÑÑе ÑÑебÑÑÑÑÑ Ð² Ñелевом клаÑÑеÑе Postgres Pro. ÐпиÑание вклÑÑÐ°ÐµÑ Ð¸Ð¼Ñ (name), аÑÑибÑÑÑ (options), конÑигÑÑаÑÐ¸Ñ (config), ÑленÑÑво (membership) Ñоли и комменÑаÑий (comment). ФоÑма множеÑÑвенного ÑиÑла
rolesдопÑÑÑима. ÐнаÑение Ð¼Ð¾Ð¶ÐµÑ Ð²ÐºÐ»ÑÑаÑÑ ÐºÐ°Ðº одно пÑавило, Ñак и ÑпиÑок пÑавил.rules: - role: name: dba options: SUPERUSER LOGIN - roles: - name: group0 options: NOLOGIN - name: group1 options: NOLOGINcomment#ÐпÑеделÑÐµÑ SQL-комменÑаÑий к Ñоли. ÐнаÑение по ÑмолÑаниÑ:
Managed by ldap2pg. РпаÑамеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ внедÑÑÑÑ Ð°ÑÑибÑÑÑ LDAP.ÐÑи внедÑении аÑÑибÑÑов LDAP нÑжно обÑаÑаÑÑ Ð²Ð½Ð¸Ð¼Ð°Ð½Ð¸Ðµ на колиÑеÑÑво ÑоздаваемÑÑ ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð°Ñий. ÐÑли Ñаблон генеÑиÑÑÐµÑ Ð¾Ð´Ð¸Ð½ комменÑаÑий, ldap2pg ÑкопиÑÑÐµÑ ÐºÐ¾Ð¼Ð¼ÐµÐ½ÑаÑий Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ Ñоли, Ñозданной по пÑÐ°Ð²Ð¸Ð»Ñ Ð´Ð»Ñ Ð½Ð°Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ñолей. ÐÑли Ñаблон генеÑиÑÑÐµÑ Ð½ÐµÑколÑко комменÑаÑиев, Ñо ldap2pg ÑвÑзÑÐ²Ð°ÐµÑ Ð¸Ð¼Ñ Ñоли и комменÑаÑий. ÐÑли ÑгенеÑиÑованнÑÑ ÐºÐ¾Ð¼Ð¼ÐµÐ½ÑаÑиев болÑÑе или менÑÑе, Ñем Ñолей, Ð²Ð¾Ð·Ð½Ð¸ÐºÐ½ÐµÑ Ñбой в ÑабоÑе ldap2pg.
ÐÑÐ¸Ð¼ÐµÑ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÑÑаÑиÑеÑкого комменÑаÑиÑ, обÑего Ð´Ð»Ñ Ð²ÑÐµÑ ÑозданнÑÑ Ñолей:
rules: - roles: names: - alice - bob comment: "Static roles from YAML."ÐÑÐ¸Ð¼ÐµÑ Ð³ÐµÐ½ÐµÑаÑии единого комменÑаÑÐ¸Ñ Ð¸Ð· ÑникалÑного имени запиÑи LDAP, коÑоÑÑй копиÑÑеÑÑÑ Ð´Ð»Ñ Ð²ÑÐµÑ ÑозданнÑÑ Ñолей:
rules: - ldapsearch: ... role: name: "{cn}" comment: "Generated from LDAP entry {dn}."ÐÑÐ¸Ð¼ÐµÑ Ð³ÐµÐ½ÐµÑаÑии ÑникалÑного комменÑаÑÐ¸Ñ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ Ñозданной Ñоли:
rules: - ldapsearch: ... role: name: "{member.cn}" comment: "Generated from LDAP entry {member}."ÐодÑказка
ÐÑли ÑÐ¾Ð»Ñ Ð¾Ð¿ÑеделÑеÑÑÑ Ð½ÐµÑколÑко Ñаз, ÑодиÑелÑÑкие Ñоли обÑединÑÑÑÑÑ. ÐÑÑгие Ð¿Ð¾Ð»Ñ Ð¾ÑÑаÑÑÑÑ Ñакими же, как в пеÑвом опÑеделении Ñоли.
name#ÐÐ¼Ñ Ñоли, коÑоÑÐ°Ñ ÑÑебÑеÑÑÑ Ð² клаÑÑеÑе. ÐнаÑение Ð¼Ð¾Ð¶ÐµÑ Ð²ÐºÐ»ÑÑаÑÑ Ð¾Ð´Ð½Ñ ÑÑÑÐ¾ÐºÑ Ð¸Ð»Ð¸ ÑпиÑок ÑÑÑок. ФоÑма множеÑÑвенного ÑиÑла
namesдопÑÑÑима. РпаÑамеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ внедÑÑÑÑ Ð°ÑÑибÑÑÑ LDAP в ÑигÑÑнÑÑ ÑÐºÐ¾Ð±ÐºÐ°Ñ . ÐÑли опÑеделÑеÑÑÑ Ð½ÐµÑколÑко имÑн, Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ имени опÑеделÑеÑÑÑ Ð¾ÑделÑÐ½Ð°Ñ ÑолÑ, иÑполÑзÑÑ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñе аÑÑибÑÑÑ, Ñакие какoptionsиparents. ÐаÑамеÑÑcommentподÑинÑеÑÑÑ Ð¾ÑделÑнÑм пÑавилам, за подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº пÑнкÑÑcomment.rules: - roles: name: "my-role-name"ÐÑи внедÑении аÑÑибÑÑа LDAP в Ð¸Ð¼Ñ ÐºÐ°Ð¶Ð´Ð¾Ðµ знаÑение аÑÑибÑÑа LDAP каждой запиÑи LDAP бÑÐ´ÐµÑ Ð¾Ð¿ÑеделÑÑÑ Ð½Ð¾Ð²ÑÑ ÑолÑ. ÐÑли в ÑоÑмаÑе опÑÐµÐ´ÐµÐ»ÐµÐ½Ñ Ð½ÐµÑколÑко аÑÑибÑÑов LDAP, бÑÐ´ÐµÑ ÑгенеÑиÑÐ¾Ð²Ð°Ð½Ñ Ð²Ñе комбинаÑии аÑÑибÑÑов.
ldap2pg заклÑÑÐ°ÐµÑ Ð¸Ð¼Ñ Ñоли в двойнÑе кавÑÑки в Ñелевом клаÑÑеÑе Postgres Pro. ÐапиÑализаÑÐ¸Ñ ÑÐ¾Ñ ÑанÑеÑÑÑ, пÑÐ¾Ð±ÐµÐ»Ñ Ð´Ð¾Ð¿ÑÑкаÑÑÑÑ (даже еÑли ÑодеÑжаÑелÑно они неÑмеÑÑнÑ).
Ð ÑÑÐ¾Ð¼Ñ Ð¿Ð°ÑамеÑÑÑ ldap2pg пÑименÑÐµÑ Ð¾Ð³ÑаниÑение
roles_blacklist_query.options#ÐпÑеделÑÐµÑ Ð°ÑÑибÑÑÑ Ñоли Postgres Pro. ÐаÑамеÑÑ Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑедÑÑавлÑÑÑ Ñобой ÑÑÑокÑ, Ð¿Ð¾Ñ Ð¾Ð¶ÑÑ Ð½Ð° SQL-ÑÑÑокÑ, или YAML-ÑловаÑÑ. ÐопÑÑÑимÑе ваÑианÑÑ:
BYPASSRLS,CONNECTION LIMIT,LOGIN,CREATEDB,CREATEROLE,INHERIT,REPLICATIONиSUPERUSER. ÐоÑÑÑпнÑе знаÑÐµÐ½Ð¸Ñ Ð·Ð°Ð²Ð¸ÑÑÑ Ð¾Ñ Ð²ÐµÑÑии Ñелевого клаÑÑеÑа Postgres Pro и пÑав полÑзоваÑÐµÐ»Ñ ldap2pg.- roles: - name: my-dba options: LOGIN SUPERUSER - name: my-group options: LOGIN: no INHERIT: yesconfig#ÐпÑеделÑÐµÑ ÐºÐ¾Ð½ÑигÑÑаÑионнÑе паÑамеÑÑÑ Postgres Pro, коÑоÑÑе бÑдÑÑ Ð·Ð°Ð´Ð°Ð½Ñ Ð´Ð»Ñ Ñоли. Ðолжен бÑÑÑ YAML-ÑловаÑем. ÐоÑÑÑпнÑе конÑигÑÑаÑионнÑе паÑамеÑÑÑ Ð·Ð°Ð²Ð¸ÑÑÑ Ð¾Ñ Ð²ÐµÑÑии Ñелевого клаÑÑеÑа Postgres Pro. ЧÑÐ¾Ð±Ñ Ð·Ð°Ð´Ð°ÑÑ Ð½ÐµÐºÐ¾ÑоÑÑе паÑамеÑÑÑ, ÑÑебÑÑÑÑÑ Ð¿Ñава ÑÑпеÑполÑзоваÑелÑ. ÐÑÑÑÑÑÑвие пÑав Ð´Ð»Ñ ÑÑÑановки знаÑений конÑигÑÑаÑионного паÑамеÑÑа пÑиведÑÑ Ðº ÑÐ±Ð¾Ñ Ð² ÑабоÑе ldap2pg.
- roles: - name: my-db-writer config: log_statement: mod log_min_duration_sample: 100ÐÑли задаÑÑ Ð¿Ð°ÑамеÑÑÑ
configзнаÑениеnull(знаÑение по ÑмолÑаниÑ), ÑÑнкÑионал Ð´Ð»Ñ Ñоли бÑÐ´ÐµÑ Ð¾ÑклÑÑÑн. ÐÑли в паÑамеÑÑеconfigÑловаÑÑ, ldap2pg ÑÐ´Ð°Ð»Ð¸Ñ Ð¿Ð°ÑамеÑÑÑ, заданнÑе в клаÑÑеÑе, но не опÑеделÑннÑе в YAML-Ñайле конÑигÑÑаÑии ldap2pg. ЧÑÐ¾Ð±Ñ ÑбÑоÑиÑÑ Ð²Ñе паÑамеÑÑÑ, задайÑе в паÑамеÑÑеconfigпÑÑÑой ÑловаÑÑ, как в пÑимеÑе ниже.- roles: - name: reset-my-configuration config: {}ÐбÑаÑиÑе внимание, ÑÑо аÑÑибÑÑÑ LDAP не ÑаÑкÑÑваÑÑÑÑ Ð² знаÑениÑÑ ÐºÐ¾Ð½ÑигÑÑаÑионнÑÑ Ð¿Ð°ÑамеÑÑов.
parent#ÐÐ¼Ñ ÑодиÑелÑÑкой Ñоли. ÐопÑÑкаеÑÑÑ ÑпиÑок имÑн. ФоÑма множеÑÑвенного ÑиÑла
parentsÑакже допÑÑÑима. РодиÑелÑÑÐºÐ°Ñ ÑÐ¾Ð»Ñ Ð½Ð°Ð·Ð½Ð°ÑаеÑÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´ÑGRANT ROLE parent TO role;. РпаÑамеÑÑparentможно внедÑÑÑÑ Ð°ÑÑибÑÑÑ LDAP в ÑигÑÑнÑÑ ÑÐºÐ¾Ð±ÐºÐ°Ñ . Ð ÑÑÐ¾Ð¼Ñ Ð¿Ð°ÑамеÑÑÑ ldap2pg пÑименÑÐµÑ Ð¾Ð³ÑаниÑениеroles_blacklist_query. РодиÑелÑÑкой ÑÑÑлкой могÑÑ Ð±ÑÑÑ Ð»Ð¾ÐºÐ°Ð»ÑнÑе Ñоли, коÑоÑÑми не ÑпÑавлÑÐµÑ ldap2pg.rules: - role: name: myrole parent: myparentbefore_create#SQL-ÑÑагменÑ, коÑоÑÑй Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ вÑполниÑÑ Ð¿ÐµÑед Ñозданием Ñоли. Ð
before_createможно внедÑÑÑÑ Ð°ÑÑибÑÑÑ LDAP в ÑигÑÑнÑÑ ÑÐºÐ¾Ð±ÐºÐ°Ñ . ÐкÑаниÑование аÑÑибÑÑа Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ.identifier()или.string()â оÑвеÑÑÑвенноÑÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑ.rules: - ldapsearch: ... role: name: "{cn}" before_create: "INSERT INTO log VALUES ({cn.string()})"after_create#SQL-ÑÑагменÑ, коÑоÑÑй Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ вÑполниÑÑ Ð¿Ð¾Ñле ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñоли. Ð
after_createможно внедÑÑÑÑ Ð°ÑÑибÑÑÑ LDAP в ÑигÑÑнÑÑ ÑÐºÐ¾Ð±ÐºÐ°Ñ . ÐкÑаниÑование аÑÑибÑÑа Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ.identifier()или.string()â оÑвеÑÑÑвенноÑÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑ.rules: - ldapsearch: ... role: name: "{sAMAccountName}" after_create: "CREATE SCHEMA {sAMAccountName.identifier()} AUTHORIZATION {sAMAccountName.identifier()}"
grant#ÐÑвеÑÐ°ÐµÑ Ð·Ð° пÑедоÑÑавление пÑав Ñоли Ñ ÑооÑвеÑÑÑвÑÑÑими паÑамеÑÑами. ÐÐ¾Ð¶ÐµÑ Ð±ÑÑÑ ÑопоÑÑавлением или ÑпиÑком ÑопоÑÑавлений. ФоÑма множеÑÑвенного ÑиÑла
grantsÑакже допÑÑÑима.rules: - grant: privilege: reader databases: __all__ schema: public role: myroledatabaseÐгÑаниÑÐ¸Ð²Ð°ÐµÑ Ð¿ÑедоÑÑавление пÑав одной или неÑколÑкими базами даннÑÑ . ÐÐ¾Ð¶ÐµÑ Ð±ÑÑÑ ÑпиÑком имÑн. ФоÑма множеÑÑвенного ÑиÑла
databasesдопÑÑÑима. СпеÑиалÑное знаÑение__all__позволÑÐµÑ ÑаÑпÑоÑÑÑаниÑÑ Ð½Ð°ÑÑÑÐ¾Ð¹ÐºÑ Ð½Ð° вÑе ÑпÑавлÑемÑе Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ , ÑпиÑок коÑоÑÑÑ Ð±Ñл полÑÑен Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑdatabases_query. ÐнаÑение по ÑмолÑаниÑ:__all__. ÐÑедоÑÑавленнÑе пÑава, найденнÑе в дÑÑÐ³Ð¸Ñ Ð±Ð°Ð·Ð°Ñ Ð´Ð°Ð½Ð½ÑÑ , бÑдÑÑ Ð¾ÑозванÑ. РпаÑамеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ внедÑÑÑÑ Ð°ÑÑибÑÑÑ LDAP в ÑигÑÑнÑÑ ÑÐºÐ¾Ð±ÐºÐ°Ñ .ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¸Ð³Ð½Ð¾ÑиÑÑеÑÑÑ, еÑли ÑеÑÑ Ð¸Ð´ÑÑ Ð¾ пÑÐ°Ð²Ð°Ñ , коÑоÑÑе дейÑÑвÑÑÑ Ð½Ð° ÑÑовне ÑкземплÑÑа (напÑимеÑ, пÑава Ð´Ð»Ñ Ð½Ð°ÑÑÑойки
LANGUAGE).privilegeÐÐ¼Ñ Ð¿Ñава из ÑпиÑка пÑав, опÑеделÑнного в Ñазделе
privilegesYAML-Ñайла конÑигÑÑаÑии. ÐÐ¾Ð¶ÐµÑ Ð±ÑÑÑ ÑпиÑком имÑн. ФоÑма множеÑÑвенного ÑиÑлаprivilegesдопÑÑÑима. ÐаÑамеÑÑ Ð¾Ð±ÑзаÑелÑнÑй, знаÑение по ÑмолÑÐ°Ð½Ð¸Ñ Ð¾ÑÑÑÑÑÑвÑеÑ. РпаÑамеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ внедÑÑÑÑ Ð°ÑÑибÑÑÑ LDAP в ÑигÑÑнÑÑ ÑÐºÐ¾Ð±ÐºÐ°Ñ .roleÐÐ¼Ñ Ñелевой Ñоли пÑедоÑÑавлÑемого пÑава (ÑÐ¾Ð»Ñ Ñ Ð¿ÑедоÑÑавленнÑм пÑавом (granted role) или пÑавообладаÑÐµÐ»Ñ (grantee)). Ðолжно бÑÑÑ Ñказано в ÑпиÑке
managed_roles_query. ÐÐ¾Ð¶ÐµÑ Ð±ÑÑÑ ÑпиÑком имÑн. ФоÑма множеÑÑвенного ÑиÑлаrolesдоÑÑÑпна. РпаÑамеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ внедÑÑÑÑ Ð°ÑÑибÑÑÑ LDAP в ÑигÑÑнÑÑ ÑÐºÐ¾Ð±ÐºÐ°Ñ . Ð ÑÑÐ¾Ð¼Ñ Ð¿Ð°ÑамеÑÑÑ ldap2pg пÑименÑÐµÑ Ð¾Ð³ÑаниÑениеroles_blacklist_query.schemaÐÐ¼Ñ ÑÑ ÐµÐ¼Ñ Ð¸Ð· ÑпиÑка ÑÑ ÐµÐ¼, полÑÑенного Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ
schemas_query. СпеÑиалÑное знаÑение__all__вклÑÑÐ°ÐµÑ Ð²Ñе ÑпÑавлÑемÑе ÑÑ ÐµÐ¼Ñ Ð±Ð°Ð· даннÑÑ . ÐÐ¾Ð¶ÐµÑ Ð±ÑÑÑ ÑпиÑком имÑн. ФоÑма множеÑÑвенного ÑиÑлаschemasдопÑÑÑима. РпаÑамеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ внедÑÑÑÑ Ð°ÑÑибÑÑÑ LDAP в ÑигÑÑнÑÑ ÑÐºÐ¾Ð±ÐºÐ°Ñ .ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¸Ð³Ð½Ð¾ÑиÑÑеÑÑÑ Ð´Ð»Ñ Ð¿Ñав доÑÑÑпа к
DATABASEили Ð´Ð»Ñ Ð´ÑÑÐ³Ð¸Ñ Ð¿Ñав, коÑоÑÑе дейÑÑвÑÑÑ Ð½Ð° ÑÑовне ÑкземплÑÑа или Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ .ownerÐÐ¼Ñ Ñоли, Ð´Ð»Ñ ÐºÐ¾ÑоÑой Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ наÑÑÑоиÑÑ Ð¿Ñава по ÑмолÑаниÑ. СпеÑиалÑное знаÑение
__auto__ÑÐ²Ð¾Ð´Ð¸Ñ Ð½Ð°ÑÑÑÐ¾Ð¹ÐºÑ Ðº ÑпÑавлÑемÑм ÑолÑм Ñ Ð¿ÑавомCREATEв Ñелевой ÑÑ ÐµÐ¼Ðµ. ÐÐ¾Ð¶ÐµÑ Ð±ÑÑÑ ÑпиÑком имÑн. ФоÑма множеÑÑвенного ÑиÑлаownersдопÑÑÑима. РпаÑамеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ внедÑÑÑÑ Ð°ÑÑибÑÑÑ LDAP в ÑигÑÑнÑÑ ÑÐºÐ¾Ð±ÐºÐ°Ñ .
Раздел acls #
ÐпÑеделÑÐµÑ ÑпиÑки Postgres Pro ACL. ACL â ÑÑо Ð½Ð°Ð±Ð¾Ñ Ð·Ð°Ð¿ÑоÑов, коÑоÑÑе позволÑÑÑ Ð¾ÑобÑажаÑÑ ÑпиÑок пÑедоÑÑавленнÑÑ Ð¿Ñав в клаÑÑеÑе и ÑпÑавлÑÑÑ Ð¿Ñавами, пÑедоÑÑавлÑÑ Ð¸ оÑзÑÐ²Ð°Ñ Ð¸Ñ Ð´Ð»Ñ ÑлеменÑов ÑпиÑка. ÐейÑÑвие ACL огÑаниÑено ÑкземплÑÑом или базой даннÑÑ . ÐаÑамеÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÑеÑÑÑ Ð² пÑоÑили пÑав Ð´Ð»Ñ ÑÑÑлки на ACL. ÐапиÑаÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑÑкий ACL â непÑоÑÑÐ°Ñ Ð·Ð°Ð´Ð°Ñа. ÐÐ»Ñ ÐµÑ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ понимание PostgreSQL и ldap2pg.
aclsРаздел веÑÑ Ð½ÐµÐ³Ð¾ ÑÑовнÑ
aclsâ ÑопоÑÑавление, опÑеделÑÑÑее ÑпиÑки ACL. ÐÑе Ð¿Ð¾Ð»Ñ ÑвлÑÑÑÑÑ Ð¾Ð±ÑзаÑелÑнÑми.acls: PROCEDURE: scope: database inspect: | WITH ... grant: GRANT ... revoke: REVOKE ...scope#ÐблаÑÑÑ Ð´ÐµÐ¹ÑÑÐ²Ð¸Ñ ACL. ÐаÑамеÑÑ Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑинимаÑÑ Ð·Ð½Ð°Ñение
instanceилиdatabase.inspect#SQL-запÑоÑ, коÑоÑÑй вÑдаÑÑ ÑпиÑок пÑедоÑÑавленнÑÑ Ð¿Ñав в клаÑÑеÑе. СигнаÑÑÑа запÑоÑа завиÑÐ¸Ñ Ð¾Ñ Ð¾Ð±Ð»Ð°ÑÑи дейÑÑÐ²Ð¸Ñ ACL. Ðа подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº опиÑÐ°Ð½Ð¸Ñ Ð¿Ð¾Ð»ÑзоваÑелÑÑкого ACL.
grant#SQL-запÑÐ¾Ñ Ð´Ð»Ñ Ð¿ÑедоÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ñава. РзапÑÐ¾Ñ Ð¼Ð¾Ð¶Ð½Ð¾ добавиÑÑ Ñаблон в ÑгловÑÑ ÑÐºÐ¾Ð±ÐºÐ°Ñ . ÐекоÑоÑÑе паÑамеÑÑÑ Ð²Ð½ÐµÐ´ÑÑÑÑÑÑ ÐºÐ°Ðº клÑÑевÑе Ñлова, Ñо еÑÑÑ ÐºÐ°Ðº в обÑÑнÑÑ SQL-запÑоÑÐ°Ñ . ÐекоÑоÑÑе заклÑÑаÑÑ Ð² кавÑÑки как иденÑиÑикаÑоÑÑ.
ÐоÑÑÑпнÑе паÑамеÑÑÑ:
<acl>Ð¸Ð¼Ñ ACL. ÐбÑÑнÑй SQL-запÑоÑ.<database>Ð¸Ð¼Ñ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ , к коÑоÑой пÑедоÑÑавлÑÑÑ Ð´Ð¾ÑÑÑп. ÐденÑиÑикаÑÐ¾Ñ Ð² кавÑÑÐºÐ°Ñ .<grantee>Ð¸Ð¼Ñ Ñоли, коÑоÑой пÑедоÑÑавлÑÑÑ Ð¿Ñава. ÐденÑиÑикаÑÐ¾Ñ Ð² кавÑÑÐºÐ°Ñ .<object>Ð¸Ð¼Ñ Ð¾Ð±ÑекÑа, к коÑоÑÐ¾Ð¼Ñ Ð½Ñжно пÑедоÑÑавиÑÑ Ð´Ð¾ÑÑÑп. ÐденÑиÑикаÑÐ¾Ñ Ð² кавÑÑÐºÐ°Ñ .<owner>Ð¸Ð¼Ñ Ñоли, коÑоÑой Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ пÑедоÑÑавиÑÑ Ð¿Ñава. ÐденÑиÑикаÑÐ¾Ñ Ð² кавÑÑÐºÐ°Ñ .<privilege>Ñип пÑава. ÐбÑÑнÑй SQL-запÑоÑ.<schema>Ð¸Ð¼Ñ ÑÑ ÐµÐ¼Ñ, к коÑоÑой нÑжно пÑедоÑÑавиÑÑ Ð´Ð¾ÑÑÑп. ÐденÑиÑикаÑÐ¾Ñ Ð² кавÑÑÐºÐ°Ñ .
revoke#SQL-запÑоÑ, ÑÑÐ¾Ð±Ñ Ð¾ÑозваÑÑ Ð¿Ñаво. Ðак и в запÑоÑ
grant, в ÑÑÐ¾Ñ Ð·Ð°Ð¿ÑÐ¾Ñ Ð¼Ð¾Ð¶Ð½Ð¾ добавиÑÑ Ñаблон в ÑгловÑÑ ÑÐºÐ¾Ð±ÐºÐ°Ñ . ÐÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ñе же паÑамеÑÑÑ, ÑÑо и запÑÐ¾Ñ Ð´Ð»Ñ Ð¿ÑедоÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ñав. Ðобавление дÑÑÐ³Ð¸Ñ Ð¿Ð°ÑамеÑÑов Ð¼ÐµÐ¶Ð´Ñ GRANT и REVOKE даÑÑ Ð½ÐµÐ¿ÑедÑказÑемÑй ÑезÑлÑÑаÑ.
ÐÑовеÑка клаÑÑеÑа Postgres Pro #
РабоÑа ldap2pg подÑинÑеÑÑÑ Ð¿ÑинÑипам Ñвного ÑозданиÑ/неÑвного ÑÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð¸ Ñвного назнаÑениÑ/неÑвного оÑзÑва. Ðо ÑÑой пÑиÑине пÑовеÑÑÑÑ ÐºÐ»Ð°ÑÑÐµÑ Ð½Ð° пÑÐµÐ´Ð¼ÐµÑ Ñого, ÑÑо Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ ÑдалиÑÑ/оÑозваÑÑ, оÑÐµÐ½Ñ Ð²Ð°Ð¶Ð½Ð¾ Ð´Ð»Ñ ÑÑпеÑной ÑÐ¸Ð½Ñ ÑонизаÑии.
ldap2pg пÑовеÑÑÐµÑ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
, ÑÑ
емÑ, Ñоли, владелÑÑев и пÑедоÑÑавленнÑе пÑава ÑеÑез SQL-запÑоÑÑ. Ð Ñазделе postgres YAML-Ñайла конÑигÑÑаÑии можно наÑÑÑоиÑÑ Ñакие запÑоÑÑ Ð¿Ñи помоÑи паÑамеÑÑов, коÑоÑÑе заканÑиваÑÑÑÑ _query. Ðа подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº ÐодÑÐ°Ð·Ð´ÐµÐ»Ñ Â«Ð Ð°Ð·Ð´ÐµÐ» postgres».
Ðакие Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ ÑÐ¸Ð½Ñ ÑонизиÑоваÑÑ? #
ÐапÑÐ¾Ñ databases_query возвÑаÑÐ°ÐµÑ Ð¿Ð»Ð¾Ñкий ÑпиÑок баз даннÑÑ
Ð´Ð»Ñ ÑпÑавлениÑ. Ð ÑезÑлÑÑаÑе вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿ÑоÑа databases_query в ÑпиÑок должна попаÑÑÑ Ð±Ð°Ð·Ð° даннÑÑ
по ÑмолÑаниÑ, опÑеделÑÐ½Ð½Ð°Ñ Ð² PGDATABASE. ÐÑи Ñдалении Ñолей ldap2pg ÑиклиÑно пÑоÑмаÑÑÐ¸Ð²Ð°ÐµÑ ÑпиÑок баз даннÑÑ
, ÑÑÐ¾Ð±Ñ Ð¿ÐµÑеназнаÑиÑÑ Ð¾Ð±ÑекÑÑ Ð¸ оÑозваÑÑ Ð¿Ñава, пÑедоÑÑавленнÑе ÑолÑм, коÑоÑÑе бÑдÑÑ ÑдаленÑ. СпиÑок баз даннÑÑ
Ñакже позволÑÐµÑ ÑÑзиÑÑ Ñамки пÑовеÑки пÑедоÑÑавленнÑÑ
пÑав. ldap2pg бÑÐ´ÐµÑ Ð¾ÑзÑваÑÑ Ð¿ÑедоÑÑавленнÑе пÑава ÑолÑко в базаÑ
даннÑÑ
из ÑпиÑка. Ðа подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº ÐодÑÐ°Ð·Ð´ÐµÐ»Ñ Â«Ð Ð°Ð·Ð´ÐµÐ» postgres».
postgres:
databases_query: |
SELECT datname
FROM pg_catalog.pg_database
WHERE datallowconn IS TRUE;Ð¡Ð¸Ð½Ñ ÑонизаÑÐ¸Ñ Ð¿Ð¾Ð´Ð¼Ð½Ð¾Ð¶ÐµÑÑва Ñолей #
Ðо ÑмолÑÐ°Ð½Ð¸Ñ ldap2pg ÑпÑавлÑÐµÑ Ð²Ñеми ÑолÑми Postgres Pro, к коÑоÑÑм Ð¸Ð¼ÐµÐµÑ Ð´Ð¾ÑÑÑп, кÑоме Ñолей, добавленнÑÑ
в ÑÑÑнÑй ÑпиÑок по ÑмолÑаниÑ. ЧÑÐ¾Ð±Ñ ldap2pg ÑинÑ
ÑонизиÑовало ÑолÑко подмножеÑÑво Ñолей, необÑ
одимо наÑÑÑоиÑÑ Ð²ÑбоÑÐºÑ Ð²Ð½ÑÑÑи postgres:managed_roles_query. ÐÑÐ¸Ð¼ÐµÑ Ð·Ð°Ð¿ÑоÑа ниже позволÑÐµÑ Ð¸ÑклÑÑиÑÑ ÑÑпеÑполÑзоваÑелей из обÑекÑов Ð´Ð»Ñ ÑинÑ
ÑонизаÑии.
postgres:
managed_roles_query: |
SELECT 'public'
UNION
SELECT rolname
FROM pg_catalog.pg_roles
WHERE rolsuper IS FALSE
ORDER BY 1;ldap2pg бÑÐ´ÐµÑ Ð²ÑполнÑÑÑ Ð¾Ð¿ÐµÑаÑии по ÑдалениÑ, оÑзÑÐ²Ñ Ð¸ пÑедоÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ñав ÑолÑко Ð´Ð»Ñ ÑÐµÑ Ñолей, коÑоÑÑе бÑдÑÑ Ð¿Ð¾Ð»ÑÑÐµÐ½Ñ Ð² ÑезÑлÑÑаÑе ÑÑого запÑоÑа.
ЧаÑÑо подобнÑй запÑÐ¾Ñ Ð¾Ð³ÑаниÑÐ¸Ð²Ð°ÐµÑ Ð²ÑбоÑÐºÑ Ð¾Ð´Ð½Ð¾Ð¹ гÑÑппой, напÑимеÑ, ldap_roles. Таким обÑазом ldap2pg ÑабоÑÐ°ÐµÑ ÑолÑко Ñ Ð¿Ð¾Ð´Ð¼Ð½Ð¾Ð¶ÐµÑÑвом Ñолей в клаÑÑеÑе.
Роли public Ð½ÐµÑ Ð² ÑиÑÑемном каÑалоге. ÐоÑÑÐ¾Ð¼Ñ ÑÑÐ¾Ð±Ñ ldap2pg ÑпÑавлÑло пÑавами public, необÑ
одимо Ñвно вклÑÑиÑÑ ÑÐ¾Ð»Ñ public в ÑпиÑок ÑпÑавлÑемÑÑ
Ñолей. ÐÑо наÑÑÑойки по ÑмолÑаниÑ. Ðо даже еÑли ÑÐ¾Ð»Ñ public ÑпÑавлÑемаÑ, ldap2pg не бÑÐ´ÐµÑ ÑдалÑÑÑ Ð¸Ð»Ð¸ менÑÑÑ ÐµÑ, еÑли ÐµÑ Ð½ÐµÑ Ð² каÑалоге.
ЧÑÐ¾Ð±Ñ Ð¿Ð¾Ð»Ð½Ð¾ÑÑÑÑ Ð¸ÑклÑÑиÑÑ Ð½ÐµÐºÐ¾ÑоÑÑе Ñоли из вÑбоÑки, можно иÑполÑзоваÑÑ roles_blacklist_query.
postgres: roles_blacklist_query: [postgres, pg_*] # ÐÑо знаÑение по ÑмолÑаниÑ.
ÐÑимеÑание
ÐлеменÑÑ, коÑоÑÑе вводÑÑÑÑ '*', Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ заклÑÑаÑÑ Ð² кавÑÑки. РпÑоÑивном ÑлÑÑае пÑоизойдÑÑ Ð¾Ñибка пÑи обÑабоÑке YAML, напÑимеÑ, «found undefined alias (Ð½Ð°Ð¹Ð´ÐµÐ½Ñ Ð½ÐµÐ¾Ð¿ÑеделÑннÑе пÑевдонимÑ)».
ÐÑовеÑка ÑÑ ÐµÐ¼ #
ÐÐ»Ñ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ñавами, коÑоÑÑе дейÑÑвÑÑÑ Ð½Ð° ÑÑовне ÑÑ
ем, ldap2pg необÑ
одимо знаÑÑ, какими ÑÑ
емами оно Ð¼Ð¾Ð¶ÐµÑ ÑпÑавлÑÑÑ Ð² ÑамкаÑ
каждой Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
. ÐÐ»Ñ ÑÑого иÑполÑзÑеÑÑÑ Ð·Ð°Ð¿ÑÐ¾Ñ schemas_query.
ÐаÑÑÑойка пÑав по ÑмолÑÐ°Ð½Ð¸Ñ Ð´Ð»Ñ Ñоли владелÑÑа #
ЧÑÐ¾Ð±Ñ Ð½Ð°ÑÑÑоиÑÑ Ð¿Ñава по ÑмолÑаниÑ, ÑÑÑлаÑÑÑ Ð½Ð° пÑаво, иÑполÑзÑйÑе клÑÑевое Ñлово default:
privileges:
reading:
- default: global
type: SELECT
on: TABLESÐаÑем пÑедоÑÑавÑÑе пÑаво, иÑполÑзÑÑ Ð¿Ñавило пÑедоÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ñав:
rules:
- grant:
- privilege: reading
role: readers
schema: public
owner: ownerroleРкаÑеÑÑве владелÑÑа можно иÑполÑзоваÑÑ ÑÐ¾Ð»Ñ __auto__. ÐÐ»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ ÑÑ
ÐµÐ¼Ñ ldap2pg наÑÑÑÐ¾Ð¸Ñ Ð²Ñе ÑпÑавлÑемÑе Ñоли, коÑоÑÑе имеÑÑ Ð¿Ñаво CREATE в ÑÑ
еме.
rules:
- grant:
- privilege: reading
role: readers
schema: public
owner __auto__ldap2pg наÑÑÑÐ°Ð¸Ð²Ð°ÐµÑ Ð¿Ñава по ÑмолÑÐ°Ð½Ð¸Ñ Ð² поÑледнÑÑ Ð¾ÑеÑÐµÐ´Ñ Ð¿Ð¾Ñле вÑеÑ
дейÑÑвÑÑÑиÑ
пÑав. Таким обÑазом пÑаво CREATE в ÑÑ
еме пÑедоÑÑавлÑеÑÑÑ Ð´Ð¾ Ñого, как ldap2pg пÑовеÑÐ¸Ñ Ñоли ÑоздаÑелей в ÑÑ
емаÑ
.
СÑаÑиÑеÑкие запÑоÑÑ #
ÐÑе запÑоÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ замениÑÑ ÑÑаÑиÑеÑким ÑпиÑком в ÑоÑмаÑе YAML. ÐÑÐ¾Ñ ÑпиÑок бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ, как бÑдÑо он полÑÑен Ð¾Ñ Postgres Pro. ÐÑо оÑÐµÐ½Ñ Ñдобно, еÑли нÑжно замоÑозиÑÑ ÐºÐ°ÐºÐ¾Ðµ-Ñо знаÑение, напÑимеÑ, Ñказание на Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ Ð¸Ð»Ð¸ ÑÑ ÐµÐ¼Ñ.
postgres: databases_query: [postgres] schemas_query: [public]
УпÑавление ÑолÑми #
ldap2pg вÑполнÑÐµÑ ÑÐ¸Ð½Ñ ÑонизаÑÐ¸Ñ Ñолей Postgres Pro в ÑÑи ÑÑапа:
ЦиклиÑно пÑоÑмаÑÑиваеÑ
rulesи генеÑиÑÑÐµÑ ÑпиÑок Ñ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ñми ÑолÑми из пÑавилrole.ÐÑовеÑÑÐµÑ Ð² Postgres Pro ÑÑÑеÑÑвÑÑÑие Ñоли, Ð¸Ñ Ð°ÑÑибÑÑÑ Ð¸ ÑленÑÑво.
СÑÐ°Ð²Ð½Ð¸Ð²Ð°ÐµÑ Ð´Ð²Ð° набоÑа Ñолей и пÑименÑÐµÑ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ñе Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ðº клаÑÑеÑÑ Postgres Pro Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´
CREATE,DROPиALTER.
ÐÐ°Ð¶Ð´Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑ role в rules ÑвлÑеÑÑÑ Ð¿Ñавилом, по коÑоÑÐ¾Ð¼Ñ ÑÐ¾Ð»Ñ Ð½Ðµ ÑоздаÑÑÑÑ Ð¸Ð»Ð¸ ÑоздаÑÑÑÑ Ð¾Ð´Ð½Ð° или неÑколÑко Ñолей Ñ ÑооÑвеÑÑÑвÑÑÑими паÑамеÑÑами. role â ÑÑо ÑвоеобÑазнÑй Ñаблон. ÐÑавила role позволÑÑÑ Ð¸Ð·Ð±ÐµÐ¶Ð°ÑÑ Ð´ÑблиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑленÑÑва и аÑÑибÑÑов Ñоли Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ ÑпиÑка имÑн.
Родном Ñайле можно иÑполÑзоваÑÑ Ð¸ ÑÑаÑиÑеÑкие, и динамиÑеÑкие пÑавила.
ÐапÑÑк без пÑав ÑÑпеÑполÑзоваÑÐµÐ»Ñ #
РаÑÑиÑение ldap2pg пÑедназнаÑено Ð´Ð»Ñ ÑабоÑÑ Ð¾Ñ Ð¸Ð¼ÐµÐ½Ð¸ не ÑÑпеÑполÑзоваÑелÑ. ÐолÑзоваÑелÑ, коÑоÑÑй бÑÐ´ÐµÑ Ð²ÑполнÑÑÑ ÑинÑ
ÑонизаÑиÑ, должен имеÑÑ Ð°ÑÑибÑÑ CREATEROLE, ÑÑÐ¾Ð±Ñ ÑпÑавлÑÑÑ Ð´ÑÑгими ÑолÑми не ÑÑпеÑполÑзоваÑелÑ. ÐÑÑибÑÑ CREATEDB позволÑÑÑ ÑÐ°ÐºÐ¾Ð¼Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ ÑпÑавлÑÑÑ Ð²Ð»Ð°Ð´ÐµÐ»ÑÑами баз даннÑÑ
.
ЧÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ ldap2pg мог пÑавилÑно ÑпÑавлÑÑÑ Ð³ÑÑппами, паÑамеÑÑÑ createrole_self_grant должно бÑÑÑ Ð·Ð°Ð´Ð°Ð½Ð¾ знаÑение inherit,set.
CREATE ROLE ldap2pg LOGIN CREATEDB CREATEROLE; ALTER ROLE ldap2pg SET createrole_self_grant TO 'inherit,set;
ÐапÑÑк без пÑав ÑÑпеÑполÑзоваÑÐµÐ»Ñ Ð´Ð¾ веÑÑии PostgreSQL 16 Ñеализован некоÑÑекÑно. Ð ÑÐ°ÐºÐ¸Ñ ÑлÑÑаÑÑ Ð² ÑелÑÑ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи ÑекомендÑеÑÑÑ Ð·Ð°Ð¿ÑÑкаÑÑ ldap2pg Ñ Ð¿Ñавами ÑÑпеÑполÑзоваÑелÑ.
ÐгноÑиÑование Ñолей #
ldap2pg полноÑÑÑÑ Ð¸Ð³Ð½Ð¾ÑиÑÑÐµÑ Ñоли, коÑоÑÑе ÑооÑвеÑÑÑвÑÑÑ Ð¾Ð´Ð½Ð¾Ð¼Ñ Ð¸Ð· глобалÑнÑÑ
Ñаблонов, опÑеделÑннÑÑ
в roles_blacklist_query:
postgres:
# ÐÑо знаÑение по ÑмолÑаниÑ.
roles_blacklist_query: [postgres, pg_*]
ЧеÑнÑй ÑпиÑок Ñолей Ñакже влиÑÐµÑ Ð½Ð° пÑедоÑÑавление пÑав. ldap2pg не бÑÐ´ÐµÑ Ð²ÑполнÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ grant и revoke Ð´Ð»Ñ Ñоли, коÑоÑÐ°Ñ ÑооÑвеÑÑÑвÑÐµÑ Ð¾Ð´Ð½Ð¾Ð¼Ñ Ð¸Ð· ÑлеменÑов ÑеÑного ÑпиÑка.
ldap2pg помеÑÐ°ÐµÑ Ð² ÑÑÑнÑй ÑпиÑок Ñвоего полÑзоваÑелÑ.
ЧленÑÑво #
ldap2pg ÑпÑавлÑÐµÑ ÑодиÑелÑÑкими ÑолÑми. Рним ldap2pg пÑименÑÐµÑ Ð¾Ð³ÑаниÑение roles_blacklist_query. Ðднако ldap2pg Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑедоÑÑавлÑÑÑ Ð¿Ñава неÑпÑавлÑемÑм ÑодиÑелÑÑким ÑолÑм. Таким обÑазом можно ÑоздаваÑÑ Ð³ÑÑÐ¿Ð¿Ñ Ð²ÑÑÑнÑÑ Ð¸ ÑпÑавлÑÑÑ ÐµÑ Ñленами Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ldap2pg.
ÐапÑÐ¾Ñ Ð¸Ð· каÑалога ÑеÑез LDAP #
ldap2pg ÑиÑÐ°ÐµÑ Ð¿Ð¾Ð¸ÑковÑе запÑоÑÑ LDAP ÑеÑез запиÑи в ldapsearch в поÑÑдке, опÑеделÑнном в rules.
ÐоиÑковой запÑÐ¾Ñ LDAP не ÑвлÑеÑÑÑ Ð¾Ð±ÑзаÑелÑнÑм. ldap2pg Ð¼Ð¾Ð¶ÐµÑ ÑоздаваÑÑ Ñоли, опÑеделÑннÑе ÑÑаÑиÑеÑки из YAML-Ñайла конÑигÑÑаÑии. ÐаждÑй поиÑковой запÑÐ¾Ñ LDAP вÑполнÑеÑÑÑ ÑолÑко один Ñаз. ЦиклиÑное вÑполнение или ÑÑÑÑанение дÑбликаÑов Ð´Ð»Ñ Ð¿Ð¾Ð¸ÑковÑÑ Ð·Ð°Ð¿ÑоÑов LDAP невозможно.
ÐодÑказка
ldap2pg ÑегиÑÑÑиÑÑÐµÑ Ð¿Ð¾Ð¸ÑковÑе запÑоÑÑ LDAP в жÑÑнале как ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ ldapsearch. ЧÑÐ¾Ð±Ñ ÑвидеÑÑ Ð·Ð°Ð¿Ð¸Ñи, вклÑÑиÑе подÑобнÑе ÑообÑениÑ.
ЧÑÐ¾Ð±Ñ Ð¿Ð¾Ð¿ÑавиÑÑ Ð½ÐµÐ¿ÑавилÑнÑй поиÑковой запÑоÑ, ÑкопиÑÑйÑе ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð² ваÑÑ Ð¾Ð±Ð¾Ð»Ð¾ÑÐºÑ Ð¸ обновиÑе паÑамеÑÑÑ. ÐÑли вÑÑ ÑабоÑаеÑ, оÑпÑавÑÑе веÑнÑе паÑамеÑÑÑ Ð¾Ð±ÑаÑно в YAML.
ÐонÑигÑÑаÑÐ¸Ñ Ð´Ð¾ÑÑÑпа к каÑÐ°Ð»Ð¾Ð³Ñ #
ldap2pg ÑиÑÐ°ÐµÑ ÐºÐ¾Ð½ÑигÑÑаÑÐ¸Ñ ÐºÐ°Ñалога из Ñайла ldaprc и ÑеÑез пеÑеменнÑе окÑÑÐ¶ÐµÐ½Ð¸Ñ LDAP*. ÐоÑÑÑпнÑе паÑамеÑÑÑ LDAP:
BASEBINDDNPASSWORDREFERRALSSASL_AUTHCIDSASL_AUTHZIDSASL_MECHTIMEOUTTLS_REQCERTNETWORK_TIMEOUTURI
Ðа подÑобноÑÑÑми о знаÑении и ÑоÑмаÑе каждого паÑамеÑÑа обÑаÑайÑеÑÑ Ðº ÑÑÑаниÑе man ldap.conf(5).
ÐнедÑение аÑÑибÑÑов LDAP #
Ð ÑÑд паÑамеÑÑов можно внедÑиÑÑ Ð°ÑÑибÑÑÑ LDAP в ÑигÑÑнÑÑ
ÑкобкаÑ
. ÐÐ»Ñ ÑÑого заклÑÑиÑе Ð¸Ð¼Ñ Ð°ÑÑибÑÑа в ÑигÑÑнÑе Ñкобки. ÐапÑимеÑ, {cn} или {sAMAccountName}. ldap2pg ÑаÑÑиÑÑеÑÑÑ Ð´Ð¾ вÑеÑ
знаÑений аÑÑибÑÑа Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ запиÑи, найденной в ÑезÑлÑÑаÑе поиÑка.
ÐÑли в паÑамеÑÑе неÑколÑко аÑÑибÑÑов LDAP, ldap2pg полÑÑÐ°ÐµÑ Ð²Ñе комбинаÑии аÑÑибÑÑов Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ запиÑи.
РаÑÑмоÑÑим ÑледÑÑÑие запиÑи LDAP:
dn: uid=dimitri,cn=Users,dc=bridoulou,dc=fr objectClass: inetOrgPerson uid: dimitri sn: Dimitri cn: dimitri mail: dimitri@bridoulou.fr company: external dn: cn=domitille,cn=Users,dc=bridoulou,dc=fr objectClass: inetOrgPerson objectClass: organizationalPerson objectClass: person objectClass: top cn: domitille sn: Domitille company: acme company: external
ФоÑÐ¼Ð°Ñ {company}_{cn} Ñ Ð¿ÑиведÑннÑми вÑÑе запиÑÑми LDAP ÑгенеÑиÑÑÐµÑ ÑледÑÑÑие ÑÑÑоки:
acme_domitilleexternal_domitilleexternal_dimitri
ÐÑевдоаÑÑибÑÑ dn вÑегда доÑÑÑпен и ÑÑÑлаеÑÑÑ Ð½Ð° ÑникалÑное Ð¸Ð¼Ñ (DN) иÑÑ
одной запиÑи LDAP.
ÐоÑÑÑп к оÑноÑиÑелÑÐ½Ð¾Ð¼Ñ ÑникалÑÐ½Ð¾Ð¼Ñ Ð¸Ð¼ÐµÐ½Ð¸ (RDN) и вложеннÑй поиÑк #
ÐÑли Ñип аÑÑибÑÑа â DN, можно ÑоÑлаÑÑÑÑ Ð½Ð° оÑноÑиÑелÑное ÑникалÑное Ð¸Ð¼Ñ (RDN) ÑеÑез ÑоÑкÑ. ÐапÑимеÑ, <attribute>.<rdn>. ÐÑли Ñ Ð¾ÑноÑиÑелÑного ÑникалÑного имени еÑÑÑ Ð½ÐµÑколÑко знаÑений, возвÑаÑаеÑÑÑ ÑолÑко пеÑвое. ÐÑÑгие знаÑÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑÑиÑÑ Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾.
ÐапÑимеÑ, еÑли в запиÑи LDAP еÑÑÑ Ð°ÑÑибÑÑ member Ñо знаÑением cn=toto,cn=Users,dc=bridoulou,dc=fr, ÑоÑÐ¼Ð°Ñ {member.cn} ÑгенеÑиÑÑÐµÑ toto. ФоÑÐ¼Ð°Ñ {member.dc} ÑгенеÑиÑÑÐµÑ bridoulou. ÐолÑÑиÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ acme и fr не полÑÑиÑÑÑ.
РизвеÑÑнÑм RDN оÑноÑÑÑÑÑ cn, l, st, o, ou, c, street, dc и uid. ÐÑÑгие аÑÑибÑÑÑ Ð·Ð°Ð¿ÑÑкаÑÑ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð½Ñй поиÑк. ФоÑÐ¼Ð°Ñ {member.sAMAccountName} огÑаниÑÐ¸Ñ Ð±Ð°Ð·Ñ Ð¿Ð¾Ð¸Ñка LDAP аÑÑибÑÑом sAMAccountName и запÑÑÑÐ¸Ñ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð½Ñй поиÑк ÑÑеди вÑеÑ
знаÑений member.
РегиÑÑÑ Ð°ÑÑибÑÑов LDAP #
ÐÑи внедÑении аÑÑибÑÑа LDAP в ÑигÑÑнÑÑ
ÑкобкаÑ
можно задаÑÑ ÑегиÑÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¼ÐµÑодов .lower() или .upper().
- ldapsearch: ...
role: "{cn.lower()}"УпÑавление пÑавами #
УпÑавлÑÑÑ Ð¿Ñавами доволÑно Ñложно. ldap2pg пÑÑаеÑÑÑ ÑделаÑÑ ÑÑÐ¾Ñ Ð¿ÑоÑеÑÑ Ð»ÐµÐ³Ñе и безопаÑнее.
ÐÑÐ½Ð¾Ð²Ñ #
ÐÑновной пÑинÑип ÑабоÑÑ ldap2pg Ñаков: вмеÑÑо Ñого, ÑÑÐ¾Ð±Ñ Ð¾ÑзÑваÑÑ Ð²Ñе пÑава и Ñоли и пеÑеназнаÑаÑÑ Ð¸Ñ , ldap2pg идÑÑ Ð¿Ð¾ пÑÑи «пÑовеÑиÑÑ Ð¸ измениÑÑ». ÐÑоÑеÑÑ Ð°Ð½Ð°Ð»Ð¾Ð³Ð¸Ñен ÑомÑ, как пÑоиÑÑ Ð¾Ð´Ð¸Ñ ÑÐ¸Ð½Ñ ÑонизаÑÐ¸Ñ Ñолей, вклÑÑÐ°Ñ ÑледÑÑÑие ÑÑи ÑÑапа:
ЦиклиÑно пÑоÑмоÑÑеÑÑ
rulesи ÑгенеÑиÑоваÑÑ Ð½Ð°Ð±Ð¾Ñ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼ÑÑ Ð½Ð°Ð·Ð½Ð°Ñений.ÐÑовеÑиÑÑ Ð² клаÑÑеÑе Postgres Pro назнаÑеннÑе пÑава.
СÑавниÑÑ Ð´Ð²Ð° набоÑа и обновиÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð² клаÑÑеÑе Postgres Pro Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´
grantиrevoke.
ldap2pg опеÑиÑÑÐµÑ ÑледÑÑÑими оÑновнÑми обÑекÑами пÑи ÑпÑавлении пÑавами:
Privilege: дейÑÑвие, коÑоÑое ÑазÑеÑаеÑÑÑ Ð²ÑполнÑÑÑ Ñ Ð¾Ð±ÑекÑом, напÑимеÑ,CONNECT ON DATABASE.grant: пÑаво, пÑедоÑÑавленное Ñоли в оÑноÑении обÑекÑа.ACL: ÑпиÑок назнаÑений (grant).profile: ÑпиÑок пÑав.rule: Ñаблон Ð´Ð»Ñ Ð¿ÑедоÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾Ð³Ð¾ пÑава.
Ð Ñайле ldap2pg.yml ÑодеÑжаÑÑÑ Ð¿ÑоÑили пÑав и пÑавила назнаÑÐµÐ½Ð¸Ñ Ð¿Ñав. ldap2pg ÑинÑ
ÑонизиÑÑÐµÑ ACL по одномÑ, Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
за базой даннÑÑ
. РпоÑледнÑÑ Ð¾ÑеÑÐµÐ´Ñ ldap2pg ÑинÑ
ÑонизиÑÑÐµÑ Ð¿Ñава по ÑмолÑаниÑ.
Ðо ÑмолÑÐ°Ð½Ð¸Ñ ldap2pg не ÑпÑавлÑÐµÑ Ð¿Ñавами. ЧÑÐ¾Ð±Ñ Ð²ÐºÐ»ÑÑиÑÑ ÑпÑавление пÑавами, ÑнаÑала необÑ
одимо опÑеделиÑÑ Ñ
оÑÑ Ð±Ñ Ð¾Ð´Ð¸Ð½ акÑивнÑй пÑоÑÐ¸Ð»Ñ Ð² Ñазделе privileges. ÐÑоÑе вÑего пеÑеиÑполÑзоваÑÑ Ð² акÑивном полÑзоваÑелÑÑком пÑоÑиле вÑÑÑоеннÑе пÑоÑили пÑав, вÑ
одÑÑие в диÑÑÑибÑÑив ldap2pg.
ÐпÑеделение пÑоÑилей пÑав #
ÐÑоÑÐ¸Ð»Ñ Ð¿Ñав â ÑпиÑок ÑÑÑлок на ÑÐ¸Ð¿Ñ Ð¿Ñав, ÑвÑзаннÑе Ñ ACL, или дÑÑгие пÑоÑили. ldap2pg ÑÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð½ÐµÑколÑко пÑедопÑеделÑннÑÑ
ACL, ÑакиÑ
как DATABASE, LANGUAGE и Ñ. д. Тип пÑава Ð¼Ð¾Ð¶ÐµÑ Ð¸Ð¼ÐµÑÑ Ð·Ð½Ð°Ñение USAGE, CONNECT и Ñ.д, в ÑооÑвеÑÑÑвии Ñ Ð¾Ð¿Ð¸Ñанием в Разделе 5.8. Ðа подÑобноÑÑÑми о ÑоÑмаÑе пÑоÑÐ¸Ð»Ñ Ð¿Ñав обÑаÑиÑеÑÑ Ðº докÑменÑаÑии, поÑвÑÑенной YAML-ÑÐ°Ð·Ð´ÐµÐ»Ñ privileges.
ldap2pg загÑÑÐ¶Ð°ÐµÑ ACL, на коÑоÑÑй даÑÑÑÑ ÑÑÑлка, ÑеÑез пÑовеÑÐºÑ Ð² клаÑÑеÑе Postgres Pro Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð´ÐµÑалÑно пÑопиÑаннÑÑ
запÑоÑов. ldap2pg пÑовеÑÑÐµÑ ÑолÑко ACL, на коÑоÑÑе даÑÑÑÑ ÑÑÑлка Ñ
оÑÑ Ð±Ñ Ð² одном пÑоÑиле. ÐайденнÑе в клаÑÑеÑе назнаÑÐµÐ½Ð¸Ñ Ð¿Ñав оÑзÑваÑÑÑÑ, еÑли иное Ñвно не пÑопиÑано в пÑавиле grant.
ÐÑедÑпÑеждение
ÐÑли назнаÑение не Ð¿Ð¾Ð´Ð¿Ð°Ð´Ð°ÐµÑ Ð¿Ð¾Ð´ пÑавило, пÑава оÑзÑваÑÑÑÑ!
ÐоÑле пÑовеÑки ACL ldap2pg оÑзÑÐ²Ð°ÐµÑ Ð²Ñе назнаÑеннÑе пÑава, найденнÑе в ÑкземплÑÑе Postgres Pro и не ÑÑебÑемÑе ни в одном пÑавиле grant в Ñазделе rules.
РаÑÑиÑÐµÐ½Ð½Ð°Ñ Ð¿ÑовеÑка ÑкземплÑÑа #
ÐÑи ÑпÑавлении ÑолÑми ldap2pg пÑÐ¾Ð²Ð¾Ð´Ð¸Ñ Ð±Ð¾Ð»ÐµÐµ глÑбокÑÑ Ð¿ÑовеÑÐºÑ ÑкземплÑÑа Postgres Pro. ÐоÑле ÑинÑ
ÑонизаÑии Ñолей и пеÑед ÑинÑ
ÑонизаÑией пÑав ldap2pg пÑовеÑÑÐµÑ ÑÑ
емÑ. ÐоÑле ÑинÑ
ÑонизаÑии пÑав и пеÑед ÑинÑ
ÑонизаÑией пÑав по ÑмолÑÐ°Ð½Ð¸Ñ ldap2pg пÑовеÑÑÐµÑ Ð²Ð»Ð°Ð´ÐµÐ»ÑÑа обÑекÑов. ÐÐ»Ð°Ð´ÐµÐ»ÐµÑ Ð¾Ð±ÑекÑа â ÑÑо ÑолÑ, Ñ ÐºÐ¾ÑоÑой еÑÑÑ Ð¿Ñаво CREATE в ÑÑ
еме.
ÐазнаÑение пÑоÑÐ¸Ð»Ñ Ð¿Ñав #
ÐÑовеÑка миллионов пÑав оÑÐ½Ð¸Ð¼Ð°ÐµÑ Ñ ÑкземплÑÑа PostgreSQL много ÑеÑÑÑÑов. ÐзвеÑÑно, ÑÑо пÑоÑеÑÑ Ð¾ÑзÑва пÑав в PostgreSQL медленнÑй. ÐÑÑÑе вÑего назнаÑаÑÑ Ð¿Ñава гÑÑппе Ñолей, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑзоваÑели наÑледовали пÑава. ldap2pg позволÑÐµÑ Ð¾Ð¿ÑеделÑÑÑ ÑÑаÑиÑеÑкие гÑÑÐ¿Ð¿Ñ Ð² YAML и наÑледоваÑÑ Ð¸Ñ Ð¿Ñи Ñоздании Ñоли из каÑалога.
ÐÑполÑзÑйÑе grant rule, ÑÑÐ¾Ð±Ñ Ð½Ð°Ð·Ð½Ð°ÑиÑÑ Ð¿ÑоÑÐ¸Ð»Ñ Ð¿Ñав одной или неÑколÑким ÑолÑм. ÐÑи назнаÑении пÑав необÑ
одимо опÑеделиÑÑ Ð¿ÑавообладаÑелÑ. ÐазнаÑение можно огÑаниÑиÑÑ Ð¾Ð´Ð½Ð¾Ð¹ или неÑколÑкими базами даннÑÑ
, а Ñакже одной или неÑколÑкими ÑÑ
емами. ÐÑли пÑоÑÐ¸Ð»Ñ Ð¿Ñав вклÑÑÐ°ÐµÑ Ð¿Ñава по ÑмолÑаниÑ, можно опÑеделиÑÑ Ð²Ð»Ð°Ð´ÐµÐ»ÑÑев, коÑоÑÑм бÑдÑÑ Ð½Ð°Ð·Ð½Ð°ÑÐµÐ½Ñ Ð¿Ñава по ÑмолÑаниÑ.
Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð½Ð°Ð·Ð½Ð°Ñение пÑименÑеÑÑÑ ÐºÐ¾ вÑем ÑпÑавлÑемÑм базам даннÑÑ
, ÑпиÑок коÑоÑÑÑ
возвÑаÑаеÑÑÑ databases_query, а Ñакже ко вÑем ÑÑ
емам каждой Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
, ÑпиÑок коÑоÑÑÑ
возвÑаÑаеÑÑÑ schemas_query.
ÐÑÐ¸Ð¼ÐµÑ #
РпÑимеÑе ниже опÑеделÑн пÑоÑÐ¸Ð»Ñ Ñ ÑÑÐµÐ¼Ñ Ð¿Ñавами. Ð rules опÑеделÑÑÑÑÑ ÑÑи гÑÑÐ¿Ð¿Ñ Ñолей, и им назнаÑаеÑÑÑ ÑооÑвеÑÑÑвÑÑÑий пÑоÑÐ¸Ð»Ñ Ð¿Ñав:
privileges:
reading:
- __connect__
- __usage_on_schemas__
- __select_on_tables__
writing:
- reading # вклÑÑÐ°ÐµÑ Ð¿Ñава ÑÑениÑ
- __insert_on_tables__
- __update_on_tables__
owning:
- writing
- __create_on_schemas__
- __truncate_on_tables__
rules:
- role:
- names:
- readers
- writers
- owners
options: NOLOGIN
- grant:
- privilege: reading
role: readers
- privilege: writing
role: writers
- privilege: owning
role: ownersÐÑÑ Ð¾Ð´Ð¸Ð½ ÑпоÑоб вклÑÑиÑÑ Ð¿Ñава ÑÑÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ Ð² пÑава запиÑи â ÑделаÑÑ Ñак, ÑÑÐ¾Ð±Ñ Ð³ÑÑппа Ñолей Ñ Ð¿Ñавами запиÑи (writers) наÑледовала гÑÑÐ¿Ð¿Ñ Ñолей Ñ Ð¿Ñавами ÑÑÐµÐ½Ð¸Ñ (readers).
УпÑавление пÑавами public #
Ð Postgres Pro еÑÑÑ Ð¿ÑевдоÑÐ¾Ð»Ñ Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ public. ÐÑо ÑнивеÑÑалÑÐ½Ð°Ñ ÑолÑ, коÑоÑÐ°Ñ Ð²ÐºÐ»ÑÑÐ°ÐµÑ Ð²ÑеÑ
полÑзоваÑелей. ÐÑе Ñоли в Postgres Pro неÑвно наÑледÑÑÑ Ð¾Ñ Ñоли public. ÐÑи назнаÑении пÑава Ñоли public ÑÑо пÑаво Ñакже назнаÑаеÑÑÑ Ð²Ñем ÑÑÑеÑÑвÑÑÑим ÑолÑм и ÑолÑм, коÑоÑÑе бÑдÑÑ ÑÐ¾Ð·Ð´Ð°Ð½Ñ Ð² далÑнейÑем.
У Postgres Pro Ñакже еÑÑÑ ÑÑ
ема public. СÑ
ема public â ÑÑо ÑÑÑеÑÑвÑÑÑÐ°Ñ ÑÑ
ема, коÑоÑÐ°Ñ Ð´Ð¾ÑÑÑпна во вÑеÑ
базаÑ
даннÑÑ
.
Ð Postgres Pro еÑÑÑ Ð½ÐµÑколÑко вÑÑÑоеннÑÑ
пÑав Ð´Ð»Ñ Ñоли public и оÑобенно Ð´Ð»Ñ ÑÑ
ÐµÐ¼Ñ public. ÐапÑимеÑ, Ñ public еÑÑÑ Ð¿Ñаво CONNECT ко вÑем базам даннÑÑ
по ÑмолÑаниÑ. ÐÑо ознаÑаеÑ, ÑÑо Ð´Ð»Ñ ÐºÐ¾Ð½ÑигÑÑаÑии доÑÑÑпа к базам даннÑÑ
можно иÑполÑзоваÑÑ ÑолÑко Ñайл pg_hba.conf, ÑÑо ÑÑебÑÐµÑ Ð¿Ñав админиÑÑÑаÑоÑа Ð´Ð»Ñ Ð´Ð¾ÑÑÑпа к клаÑÑеÑÑ Ð¸ вÑзова ÑÑнкÑии pg_reload_conf().
Ðо ÑмолÑÐ°Ð½Ð¸Ñ ldap2pg вклÑÑÐ°ÐµÑ ÑÐ¾Ð»Ñ public в ÑпиÑок ÑпÑавлÑемÑÑ
Ñолей. ÐÑедопÑеделÑннÑй ACL знаеÑ, как пÑовеÑÑÑÑ Ð²ÑÑÑоеннÑе пÑава, назнаÑеннÑе Ñоли public. ÐÑли ÑÐ¾Ð»Ñ public нÑжно ÑоÑ
ÑаниÑÑ, иÑклÑÑиÑе ÑÐ¾Ð»Ñ public из managed_roles_query.
УпÑавление пÑавами по ÑмолÑÐ°Ð½Ð¸Ñ #
ÐÑли пÑава SELECT пÑедоÑÑавлÑÑÑÑÑ Ñоли на вÑе ÑаблиÑÑ Ð² ÑÑ
еме, пÑава не бÑдÑÑ ÑаÑпÑоÑÑÑанÑÑÑÑÑ Ð½Ð° новÑе ÑаблиÑÑ, ÑозданнÑе поÑле пÑедоÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ñав. ÐмеÑÑо Ñого, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ñле ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ нового обÑекÑа вÑполнÑÑÑ ldap2pg заново, в Postgres Pro пÑедÑÑмоÑÑено опÑеделение пÑав по ÑмолÑÐ°Ð½Ð¸Ñ Ð´Ð»Ñ Ð¾Ð±ÑекÑов, коÑоÑÑе бÑдÑÑ ÑÐ¾Ð·Ð´Ð°Ð½Ñ Ð² далÑнейÑем.
Postgres Pro пÑивÑзÑÐ²Ð°ÐµÑ Ð¿Ñава по ÑмолÑÐ°Ð½Ð¸Ñ Ðº Ñоли ÑоздаÑÐµÐ»Ñ (creator). Ðогда полÑзоваÑÐµÐ»Ñ Ñ ÑÑой ÑолÑÑ ÑоздаÑÑ Ð¾Ð±ÑекÑ, Postgres Pro пÑедоÑÑавлÑÐµÑ ÑооÑвеÑÑÑвÑÑÑие пÑава по ÑмолÑÐ°Ð½Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð¼Ñ Ð¾Ð±ÑекÑÑ. ÐапÑимеÑ, благодаÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ðµ ALTER DEFAULT PRIVILEGES FOR ROLE bob GRANT SELECT ON TABLES TO alice; в каждой новой ÑаблиÑе, Ñоздаваемой полÑзоваÑелем Ñ ÑолÑÑ bob Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ñ ÑолÑÑ alice бÑÐ´ÐµÑ Ð¿Ñаво SELECT:
ÐÑли ldap2pg ÑоздаÑÑ Ð¸Ð»Ð¸ ÑдалÑÐµÑ Ñоли ÑоздаÑелÑ, пÑава по ÑмолÑÐ°Ð½Ð¸Ñ Ð´Ð»Ñ ÑÑÐ¸Ñ Ñолей в ldap2pg Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð¿ÑавилÑно наÑÑÑоенÑ. ÐÑи ÑпÑавлении пÑавами ÑеÑез ldap2pg обÑзаÑелÑно наÑÑÑаиваÑÑ Ð¿Ñава по ÑмолÑÐ°Ð½Ð¸Ñ Ð´Ð»Ñ Ñоли ÑоздаÑелÑ.
ldap2pg пÑовеÑÑÐµÑ ÑоздаÑелей в Postgres Pro, по ÑÑ
емам, не в каÑалоге LDAP. СоздаÑÐµÐ»Ñ â ÑÑо ÑÐ¾Ð»Ñ Ñ Ð°ÑÑибÑÑом LOGIN и пÑавом CREATE в ÑÑ
еме. ÐÑÑÑнÑÑ Ð´Ð»Ñ Ð»Ñбой ÑпÑавлÑемой Ñоли можно назнаÑиÑÑ Ñелевого владелÑÑа пÑедоÑÑавлÑемÑÑ
пÑав.
Ð ldap2pg нелÑÐ·Ñ Ð½Ð°ÑÑÑоиÑÑ Ð¿Ñава на ÑÑ
ÐµÐ¼Ñ Ñ Ð°ÑÑибÑÑом __all__. ÐмеÑÑо ÑÑого иÑполÑзÑйÑе ÑпиÑок ACL GLOBAL DEFAULT. ÐÑли пÑедоÑÑавление и оÑзÑв пÑав по ÑмолÑÐ°Ð½Ð¸Ñ Ð½ÐµÐ¾Ð±Ñ
одимо огÑаниÑиÑÑ ÑÑ
емой, иÑполÑзÑйÑе ÑпиÑок ACL SCHEMA DEFAULT.
РпÑимеÑе ниже Ð´Ð»Ñ Ñоли alice наÑÑÑаиваÑÑÑÑ Ð¿Ñава по ÑмолÑаниÑ, благодаÑÑ ÐºÐ¾ÑоÑÑм Ñ Ñоли bob бÑÐ´ÐµÑ Ð¿Ñаво SELECT Ð´Ð»Ñ Ð²ÑÐµÑ ÑаблиÑ, коÑоÑÑе alice бÑÐ´ÐµÑ ÑоздаваÑÑ Ð² далÑнейÑем.
privileges:
reading:
- type: SELECT
on: SCHEMA DEFAULT
object: TABLES
owning:
- type: CREATE
on: SCHEMAS
rules:
- roles:
names:
- alice
- bob
options: LOGIN
- grant:
privilege: owning
role: alice
- grant:
privilege: reading
role: bobÐ Postgres Pro еÑÑÑ Ð¶ÑÑÑко заданнÑе глобалÑнÑе пÑава по ÑмолÑаниÑ. ÐÑли Ñ Ñоли не наÑÑÑÐ¾ÐµÐ½Ñ Ð³Ð»Ð¾Ð±Ð°Ð»ÑнÑе пÑава по ÑмолÑаниÑ, Postgres Pro подÑазÑÐ¼ÐµÐ²Ð°ÐµÑ Ð½ÐµÐºÐ¾ÑоÑÑе пÑава. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Postgres Pro пÑедоÑÑавлÑÐµÑ Ð¿Ñава ÑолÑко Ñоли владелÑÑа (owner). ÐÑ Ð¼Ð¾Ð¶Ð½Ð¾ поÑмоÑÑеÑÑ Ð¿Ñи изменении пÑав по ÑмолÑаниÑ. Postgres Pro ÑкопиÑÑÐµÑ Ð¶ÑÑÑко заданнÑе знаÑÐµÐ½Ð¸Ñ Ð²Ð¼ÐµÑÑе Ñ Ð¿ÑедоÑÑавленнÑми вами пÑавами.
ÐÑли Ñвно повÑоÑно не пÑедоÑÑавиÑÑ Ð¶ÑÑÑко заданнÑе пÑава в Ñайле ldap2pg.yml, ldap2pg оÑÐ·Ð¾Ð²ÐµÑ Ð¸Ñ
. ÐбÑаÑиÑе внимание, ÑÑо владелÑÑÑ ÑаблиÑÑ Ð½Ðµ нÑжно пÑедоÑÑавлÑÑÑ Ð¿Ñаво SELECT Ð´Ð»Ñ Ð¿ÑинадлежаÑиÑ
ÐµÐ¼Ñ ÑаблиÑ. ÐоÑÑÐ¾Ð¼Ñ Ð² жÑÑÑко заданнÑÑ
пÑаваÑ
по ÑмолÑÐ°Ð½Ð¸Ñ Ð½ÐµÑ Ð½ÐµÐ¾Ð±Ñ
одимоÑÑи. Так ÑÑо можно ÑазÑеÑиÑÑ ldap2pg ÑбÑаÑÑ ÑÑи ненÑжнÑе пÑава по ÑмолÑаниÑ.
ÐÑÑÑоеннÑе пÑава #
ldap2pg пÑедоÑÑавлÑÐµÑ Ð½ÐµÑколÑко вÑÑÑоеннÑÑ ÑпиÑков ACL и пÑедопÑеделÑннÑÑ Ð¿ÑоÑилей пÑав Ð´Ð»Ñ Ð¼Ð½Ð¾Ð¶ÐµÑÑвенного иÑполÑзованиÑ. ÐÑи пÑава пÑедоÑÑавлÑÑÑÑÑ Ð½Ðµ гаÑанÑиÑованно. ÐÑ Ð½Ð°ÑÑÑÐ¾Ð¹ÐºÑ Ð² ваÑÐ¸Ñ Ð±Ð°Ð·Ð°Ñ Ð´Ð°Ð½Ð½ÑÑ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ пÑовеÑÑÑÑ ÑоÑно Ñак же, как и пÑи ÑабоÑе Ñо Ñвоим кодом.
ÐÑполÑзование пÑедопÑеделÑннÑÑ Ð¿ÑоÑилей пÑав #
ÐÑоÑÐ¸Ð»Ñ Ð¿Ñав â ÑпиÑок ÑÑÑлок на Ñип пÑава в ACL. Ð ldap2pg ACL â Ð½Ð°Ð±Ð¾Ñ Ð·Ð°Ð¿ÑоÑов Ð´Ð»Ñ Ð¿ÑовеÑки, пÑедоÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸ оÑзÑва пÑав на клаÑÑÑ Ð¾Ð±ÑекÑов. ÐапÑÐ¾Ñ Ð½Ð° пÑовеÑÐºÑ ÑаÑÑиÑÑÐµÑ Ñип aclitem Postgres Pro Ð´Ð»Ñ Ð¾ÑобÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð²ÑеÑ
пÑедоÑÑавленнÑÑ
пÑав из ÑиÑÑемного каÑалога. ÐÑоÑÐ¸Ð»Ñ Ð¿Ñав Ð¼Ð¾Ð¶ÐµÑ Ð²ÐºÐ»ÑÑаÑÑ Ð´ÑÑгой пÑоÑилÑ.
ÐÐ¼Ñ Ð²ÑÑÑоенного пÑоÑÐ¸Ð»Ñ Ð¾Ð±ÑамлÑеÑÑÑ Ð´Ð²Ð¾Ð¹Ð½Ñм нижним подÑÑÑкиванием (__). ldap2pg оÑклÑÑÐ°ÐµÑ Ð¿ÑоÑÐ¸Ð»Ñ Ð¿Ñав, коÑоÑÑй наÑинаеÑÑÑ Ñ _. ЧÑÐ¾Ð±Ñ Ð²ÐºÐ»ÑÑиÑÑ Ñакие пÑоÑили, необÑ
одимо добавиÑÑ Ð²ÑÑÑоеннÑй пÑоÑÐ¸Ð»Ñ Ð¿Ñав в дÑÑгой пÑоÑилÑ. ÐÑли два пÑоÑÐ¸Ð»Ñ ÑÑÑлаÑÑÑÑ Ð½Ð° одно и Ñо же пÑаво, ldap2pg пÑовеÑÐ¸Ñ ÐµÐ³Ð¾ один Ñаз.
privileges:
ro:
- __connect__
- __usage_on_schemas__
- __select_on_tables__
rw:
- ro
- __insert__
ddl:
- rw
- __all_on_schemas__
rules:
- grant:
privilege: ddl
database: mydb
role: adminsÐÐ¼Ñ Ð²ÑÑÑоенного пÑоÑÐ¸Ð»Ñ Ð¿Ð¾Ð´ÑинÑеÑÑÑ ÑледÑÑÑим неÑÑÑогим пÑавилам:
..._on_all_tables__ÑÑÑлаеÑÑÑ Ð½Ð° ÑпиÑок ACLALL TABLES IN SCHEMA. ÐналогиÑно Ð´Ð»Ñ Ð¿Ð¾ÑледоваÑелÑноÑÑей и ÑÑнкÑий.__default_...__ÑÑÑлаеÑÑÑ Ð½Ð° пÑава по ÑмолÑаниÑ, коÑоÑÑе дейÑÑвÑÑÑ Ð½Ð° глобалÑном ÑÑовне и на ÑÑовне ÑÑ ÐµÐ¼Ñ.__..._on_tables__обÑединÑеÑ__..._on_all_tables__и__default_..._on_tables__.ÐÑÑппа, ÑÑÑ Ð¸Ð¼Ñ Ð½Ð°ÑинаеÑÑÑ Ñ
__all_on_...__, пÑиÑавниваеÑÑÑ Ðº ÑазÑеÑениÑALL PRIVILEGESв SQL. Ðднако каждое пÑаво бÑÐ´ÐµÑ Ð¿ÑедоÑÑавлÑÑÑÑÑ Ð¾ÑделÑно.Римени пÑава, оÑноÑÑÑегоÑÑ Ðº Ð¾Ð´Ð½Ð¾Ð¼Ñ ÑÐ¸Ð¿Ñ Ð¾Ð±ÑекÑов, Ð½ÐµÑ ÑÑÑÑикÑа
_on_<type>. ÐапÑимеÑ,__delete_on_tables__â пÑевдоним__delete__.
Ð ÑÑом Ñазделе не опиÑан ÑÑандаÑÑ SQL и знаÑение каждого пÑава SQL. Ðа подÑобноÑÑÑми о пÑаваÑ
SQL обÑаÑиÑеÑÑ Ðº докÑменÑаÑии команд GRANT и ALTER DEFAULT PRIVILEGES.
СпÑавка по ACL #
Ðиже пÑиведÑн ÑпиÑок вÑÑÑоеннÑÑ ÑпиÑков ACL.
ÐÐ»Ñ Ð´ÐµÐ¹ÑÑвÑÑÑÐ¸Ñ Ð¿Ñав:
DATABASEÐÑава в базе даннÑÑ , Ñакие как
CONNECT,CREATEи Ñ. д.SCHEMAУпÑавление пÑавами
USAGEиCREATEв ÑÑ ÐµÐ¼Ðµ.LANGUAGEУпÑавление пÑавом
USAGEÐ´Ð»Ñ Ð¿ÑоÑедÑÑнÑÑ ÑзÑков.ALL FUNCTIONS IN SCHEMAУпÑавление пÑавом
EXECUTEÐ´Ð»Ñ Ð²ÑÐµÑ ÑÑнкÑий в ÑÐ°Ð¼ÐºÐ°Ñ ÑÑ ÐµÐ¼Ñ.ALL SEQUENCES IN SCHEMAТо же Ñамое, но Ð´Ð»Ñ Ð¿Ð¾ÑледоваÑелÑноÑÑей.
ALL TABLES IN SCHEMAТо же Ñамое, но Ð´Ð»Ñ ÑÐ°Ð±Ð»Ð¸Ñ Ð¸ пÑедÑÑавлений.
GLOBAL DEFAULTУпÑавление пÑавами по ÑмолÑÐ°Ð½Ð¸Ñ Ð² базе даннÑÑ .
SCHEMA DEFAULTУпÑавление пÑавами по ÑмолÑÐ°Ð½Ð¸Ñ Ð² ÑÐ°Ð¼ÐºÐ°Ñ ÑÑ ÐµÐ¼Ñ.
СпиÑок ACL ALL ... IN SCHEMA пÑовеÑÑеÑ, пÑедоÑÑавлено ли пÑаво ÑолÑко подмножеÑÑÐ²Ñ Ð¾Ð±ÑекÑов. ÐÑо назÑваеÑÑÑ ÑаÑÑиÑное пÑедоÑÑавление пÑава (partial grant). ЧаÑÑиÑно пÑедоÑÑавленное пÑаво или оÑзÑваеÑÑÑ, еÑли оно не нÑжно, или пÑедоÑÑавлÑеÑÑÑ Ð·Ð°Ð½Ð¾Ð²Ð¾, еÑли ожидаеÑÑÑ.
ÐаÑÑ ÑÑÑÐ»ÐºÑ Ð½Ð° ÑÑи ÑпиÑки ACL можно, иÑполÑзÑÑ Ð¿Ð°ÑамеÑÑ privileges: on в YAML. ÐÑимеÑ:
privileges:
myprofile:
- type: SELECT
on: ALL TABLES IN SCHEMAÐÑава по ÑмолÑÐ°Ð½Ð¸Ñ ÑÑÑлаÑÑÑÑ Ð½Ð° Ñип пÑава и клаÑÑ Ð¾Ð±ÑекÑов. ldap2pg пÑовеÑÑÐµÑ Ð¿Ñава по ÑмолÑÐ°Ð½Ð¸Ñ Ð´Ð»Ñ ÑледÑÑÑÐ¸Ñ ÐºÐ»Ð°ÑÑов обÑекÑов:
SEQUENCESFUNCTIONSTABLES
РпÑоÑиле пÑав Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ даÑÑ ÑÑÑÐ»ÐºÑ Ð½Ð° клаÑÑ Ð¾Ð±ÑекÑов Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¿Ð°ÑамеÑÑа object в YAML.
ÐаÑÑÑоиÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑÑкий ACL пока невозможно.
СпÑавка по пÑоÑилÑм #
- ÐÑоÑилÑ
__all_on_functions__# - ÐÑоÑилÑ
__all_on_schemas__# __all_on_sequences__пÑоÑÐ¸Ð»Ñ #- ÐÑоÑилÑ
__all_on_tables__# - ÐÑоÑилÑ
__delete_on_tables__# - ÐÑоÑилÑ
__execute_on_functions__# - ÐÑоÑилÑ
__insert_on_tables__# - ÐÑоÑилÑ
__references_on_tables__# - ÐÑоÑилÑ
__select_on_sequences__# - ÐÑоÑилÑ
__select_on_tables__# - ÐÑоÑилÑ
__trigger_on_tables__# - ÐÑоÑилÑ
__truncate_on_tables__# - ÐÑоÑилÑ
__update_on_sequences__# - ÐÑоÑилÑ
__update_on_tables__# - ÐÑоÑилÑ
__usage_on_sequences__#
СпÑавка по пÑавам #
Ðиже пÑиведÑн ÑпиÑок пÑедопÑеделÑннÑÑ Ð¿Ñав:
| ÐÐ¼Ñ | ÐÑаво |
|---|---|
__connect__ | CONNECT ON DATABASE |
__create_on_schemas__ | CREATE ON SCHEMA |
__delete_on_all_tables__ | DELETE ON ALL TABLES IN SCHEMA |
__execute_on_all_functions__ | EXECUTE ON ALL FUNCTIONS IN SCHEMA |
__insert_on_all_tables__ | INSERT ON ALL TABLES IN SCHEMA |
__references_on_all_tables__ | REFERENCES ON ALL TABLES IN SCHEMA |
__select_on_all_sequences__ | SELECT ON ALL SEQUENCES IN SCHEMA |
__select_on_all_tables__ | SELECT ON ALL TABLES IN SCHEMA |
TEMPORARY ON DATABASE | |
__trigger_on_all_tables__ | TRIGGER ON ALL TABLES IN SCHEMA |
__truncate_on_all_tables__ | TRUNCATE ON ALL TABLES IN SCHEMA |
__update_on_all_sequences__ | UPDATE ON ALL SEQUENCES IN SCHEMA |
__update_on_all_tables__ | UPDATE ON ALL TABLES IN SCHEMA |
__usage_on_all_sequences__ | USAGE ON ALL SEQUENCES IN SCHEMA |
__usage_on_schemas__ | USAGE ON SCHEMA |
СпÑавка по пÑавам по ÑмолÑÐ°Ð½Ð¸Ñ #
Ðиже пÑиведÑн ÑпиÑок пÑедопÑеделÑннÑÑ Ð¿Ñав по ÑмолÑаниÑ. РпÑоÑиле пÑав по ÑмолÑÐ°Ð½Ð¸Ñ Ð´Ð°ÑÑÑÑ ÑÑÑлка на пÑава по ÑмолÑаниÑ, коÑоÑÑе дейÑÑвÑÑÑ Ð½Ð° глобалÑном ÑÑовне и на ÑÑовне ÑÑ ÐµÐ¼Ñ.
| ÐÐ¼Ñ | ÐÑаво |
|---|---|
__default_delete_on_tables__ | DELETE ON TABLES |
__default_execute_on_functions__ | EXECUTE ON FUNCTIONS |
__default_insert_on_tables__ | INSERT ON TABLES |
__default_references_on_tables__ | REFERENCES ON TABLES |
__default_select_on_sequences__ | SELECT ON SEQUENCES |
__default_select_on_tables__ | SELECT ON TABLES |
__default_trigger_on_tables__ | TRIGGER ON TABLES |
__default_truncate_on_tables__ | TRUNCATE ON TABLES |
__default_update_on_sequences__ | UPDATE ON SEQUENCES |
__default_update_on_tables__ | UPDATE ON TABLES |
__default_usage_on_sequences__ | USAGE ON SEQUENCES |
ÐодÑказки по иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ #
Ð ÑÑом Ñазделе даÑÑÑÑ Ð½ÐµÐºÐ¾ÑоÑÑе ÑеÑепÑÑ Ð´Ð»Ñ ÑазлиÑнÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑÑÐºÐ¸Ñ ÑÑенаÑиев ÑабоÑÑ Ñ ldap2pg.
ÐонÑигÑÑиÑование pg_hba.conf ÑеÑез LDAP #
ldap2pg ÐРнаÑÑÑÐ°Ð¸Ð²Ð°ÐµÑ Postgres Pro за полÑзоваÑелÑ. ÐÐ»Ñ ÐºÐ¾Ð½ÑигÑÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Postgres Pro внимаÑелÑно пÑоÑиÑайÑе Раздел 19.10. ÐеÑед напиÑанием ldap2pg.yaml ÑÑÐ¾Ð¸Ñ Ð½Ð°Ð´Ð»ÐµÐ¶Ð°Ñим обÑазом наÑÑÑоиÑÑ Postgres Pro. Ðиже пÑиведÑÐ½Ñ Ñаги Ð´Ð»Ñ Ð½Ð°ÑÑÑойки Postgres Pro ÑеÑез LDAP в ÑекомендÑемом поÑÑдке:
ÐапиÑиÑе поиÑковой запÑÐ¾Ñ LDAP и пÑовеÑÑÑе его Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ
ldapsearch(1). ÐÑо Ñакже позволÑÐµÑ Ð¿ÑовеÑиÑÑ Ñоединение Ñ Ð²Ð°Ñим каÑалогом LDAP.РклаÑÑеÑе Postgres Pro вÑÑÑнÑÑ ÑоздайÑе единÑÑвеннÑÑ ÑолÑ, помеÑÑив паÑÐ¾Ð»Ñ Ð¾Ñ Ð½ÐµÑ Ð² каÑалог LDAP.
ÐнеÑиÑе Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² Ñайл
pg_hba.conf, ÑледÑÑ Ð Ð°Ð·Ð´ÐµÐ»Ñ 19.10, ÑÑÐ¾Ð±Ñ ÑÑпеÑно авÑоÑизоваÑÑÑÑ Ñ Ð¿Ð°Ñолем из LDAP в Ñозданной Ñоли.
ÐоÑле наÑÑÑойки аÑÑенÑиÑикаÑии LDAP в клаÑÑеÑе Postgres Pro можно пеÑÐµÑ Ð¾Ð´Ð¸ÑÑ Ðº авÑомаÑизаÑии пÑоÑеÑÑа ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñолей из каÑалога LDAP Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ldap2pg:
ÐапиÑиÑе пÑоÑÑой Ñайл
ldap2pg.yamlÑ Ð¾Ð´Ð½Ð¸Ð¼ поиÑковÑм запÑоÑом LDAP, ÑÑÐ¾Ð±Ñ Ð½Ð°ÑÑÑоиÑÑ Ð¿Ð°ÑамеÑÑÑ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ ldap2pg Ñ Postgres Pro и ÑеÑвеÑом LDAP. Ðо ÑмолÑÐ°Ð½Ð¸Ñ ldap2pg ÑабоÑÐ°ÐµÑ Ð² пÑобном Ñежиме, поÑÑÐ¾Ð¼Ñ Ð¼Ð¾Ð¶Ð½Ð¾ без опаÑений ÑиклиÑно запÑÑкаÑÑ ldap2pg, пока ÑаÑÑиÑение не бÑÐ´ÐµÑ Ð½Ð°ÑÑÑоено коÑÑекÑно.ÐаÑем дополниÑе Ñайл
ldap2pg.yamlв ÑооÑвеÑÑÑвии Ñ Ð²Ð°Ñими поÑÑебноÑÑÑми, ÑледÑÑ Ð Ð°Ð·Ð´ÐµÐ»Ñ Â«Ð¡Ð¿Ñавка по командной ÑÑÑоке». ÐапÑÑÑиÑе ldap2pg в Ñежиме дейÑÑÐ²Ð¸Ñ Ð¸ пÑовеÑÑÑе, ÑÑо ldap2pg поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ ÑозданнÑÑ Ð²Ð°Ð¼Ð¸ единÑÑвеннÑÑ ÑеÑÑовÑÑ ÑÐ¾Ð»Ñ Ð¸ ÑÑо ÑеÑез Ð½ÐµÑ Ð¼Ð¾Ð¶Ð½Ð¾ ÑÑÑановиÑÑ Ñоединение Ñ ÐºÐ»Ð°ÑÑеÑом.ÐÐ°ÐºÐ¾Ð½ÐµÑ Ð¾Ð¿ÑеделиÑе, когда и как бÑÐ´ÐµÑ Ð·Ð°Ð¿ÑÑкаÑÑÑÑ ÑÐ¸Ð½Ñ ÑонизаÑиÑ: ÑегÑлÑÑно Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ñайла crontab/ÑеÑез задаÑÑ Ansible/вÑÑÑнÑÑ/ по-дÑÑгомÑ. УбедиÑеÑÑ, ÑÑо ldap2pg запÑÑкаеÑÑÑ ÑегÑлÑÑно, ÑеленапÑавленно и Ñ ÑведомлениÑми.
ÐоиÑк в каÑалоге LDAP #
ÐеÑвÑй Ñаг â вÑполниÑÑ Ð¿Ð¾Ð¸Ñк в ваÑем ÑеÑвеÑе LDAP Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ldapsearch(1), ÑÑилиÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ ÑÑÑоки из диÑÑÑибÑÑива OpenLDAP. ÐÑимеÑ:
$ ldapsearch -H ldaps://ldap.ldap2pg.docker -U testsasl -W Enter LDAP Password: SASL/DIGEST-MD5 authentication started SASL username: testsasl SASL SSF: 128 SASL data security layer installed. # extended LDIF # # LDAPv3 ... # search result search: 4 result: 0 Success # numResponses: 16 # numEntries: 15 $
СоÑ
ÑаниÑе наÑÑÑойки в Ñайле ldaprc:
LDAPURI ldaps://ldap.ldap2pg.docker LDAPSASL_AUTHCID testsasl
Рв окÑÑжении: LDAPPASSWORD=secret
ÐаÑем обновиÑе ldapsearch, ÑÑÐ¾Ð±Ñ Ð¿ÑавилÑно ÑопоÑÑавиÑÑ Ð·Ð°Ð¿Ð¸Ñи Ñолей на ÑеÑвеÑе LDAP:
$ ldapsearch -H ldaps://ldap.ldap2pg.docker -U testsasl -W -b cn=dba,ou=groups,dc=ldap,dc=ldap2pg,dc=docker '' member ... # dba, groups, ldap.ldap2pg.docker dn: cn=dba,ou=groups,dc=ldap,dc=ldap2pg,dc=docker member: cn=Alan,ou=people,dc=ldap,dc=ldap2pg,dc=docker member: cn=albert,ou=people,dc=ldap,dc=ldap2pg,dc=docker member: cn=ALICE,ou=people,dc=ldap,dc=ldap2pg,dc=docker # search result search: 4 result: 0 Success ... $
ТепеÑÑ Ð¿ÐµÑенеÑиÑе запÑÐ¾Ñ Ð² ldap2pg.yaml и ÑÑÑановиÑе ÑопоÑÑавление Ñолей, ÑÑÐ¾Ð±Ñ ÑоздаваÑÑ Ñоли из каждого знаÑÐµÐ½Ð¸Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ запиÑи, коÑоÑÑÑ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ Ð¿Ð¾Ð¸Ñковой запÑÐ¾Ñ LDAP:
- ldapsearch:
base: cn=dba,ou=groups,dc=ldap,dc=ldap2pg,dc=docker
role:
name: '{member.cn}'
options: LOGIN SUPERUSERÐÑполниÑе пÑовеÑкÑ:
$ ldap2pg ... Querying LDAP cn=dba,ou=groups,dc=ldap,dc=ldap2pg,dc=docker... Would create alan. Would create albert. Would update options of alice. ... Comparison complete. $
Ðа подÑобноÑÑÑми о Ñом, как ÑпÑавлÑÑÑ Ñозданием Ñолей из запиÑи LDAP, обÑаÑиÑеÑÑ Ðº ÑÐ°Ð·Ð´ÐµÐ»Ñ ÐонÑигÑÑаÑиÑ. Ðогда ÑезÑлÑÑÐ°Ñ ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ð±ÑÐ´ÐµÑ ÑдовлеÑвоÑиÑелÑнÑм, пеÑейдиÑе в Ñежим дейÑÑÐ²Ð¸Ñ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ --real.
ÐÑполÑзование оÑказоÑÑÑойÑивоÑÑи LDAP #
ÐÑÑÑоеннÑй ÑÑнкÑионал ldap2pg вклÑÑÐ°ÐµÑ Ð¿Ð¾Ð´Ð´ÐµÑÐ¶ÐºÑ Ð¾ÑказоÑÑÑойÑивоÑÑи LDAP ÑоÑно Ñак же, как ÑаÑÑиÑение поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð»Ñбого клиенÑа OpenLDAP. ЧÑÐ¾Ð±Ñ ÑказаÑÑ Ð²Ñе ÑеÑвеÑÑ, пеÑеÑиÑлиÑе Ð¸Ñ URI ÑеÑез пÑобел.
$ LDAPURI="ldaps://ldap1 ldaps://ldap2" ldap2pg
Ðа подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº ldap.conf(5).
ÐапÑÑк не Ð¾Ñ Ð¸Ð¼ÐµÐ½Ð¸ ÑÑпеÑполÑзоваÑÐµÐ»Ñ #
ÐоÑколÑÐºÑ Ñ Ñолей в Postgres Pro еÑÑÑ Ð°ÑÑибÑÑ CREATEROLE, ÑпÑавлÑÑÑ ÑолÑми можно без пÑав ÑÑпеÑполÑзоваÑелÑ. С ÑоÑки зÑÐµÐ½Ð¸Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи лÑÑÑе ÑпÑавлÑÑÑ ÑолÑми без пÑав ÑÑпеÑполÑзоваÑелÑ.
ÐÑедÑпÑеждение
Ðо веÑÑии Postgres Pro 15 полÑзоваÑÐµÐ»Ñ Ñ Ð¿Ñавом CREATEROLE поÑÑи пÑиÑавнивалÑÑ Ðº ÑÑпеÑполÑзоваÑелÑ. Такой полÑзоваÑÐµÐ»Ñ Ð¼Ð¾Ð³ пÑедоÑÑавиÑÑ Ñебе ÑÐ°Ð¼Ð¾Ð¼Ñ Ð¿ÑакÑиÑеÑки лÑбое пÑаво. ÐоÑÑÐ¾Ð¼Ñ ldap2pg поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð·Ð°Ð¿ÑÑк не Ð¾Ñ Ð¸Ð¼ÐµÐ½Ð¸ ÑÑпеÑполÑзоваÑÐµÐ»Ñ ÑолÑко Ñ Ð²ÐµÑÑиÑми Postgres Pro 16 и вÑÑе.
ldap2pg поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ñакой ÑÑенаÑий. Ðднако ÑÑÐ¾Ð¸Ñ Ð²Ð½Ð¸Ð¼Ð°ÑелÑно оÑноÑиÑÑÑÑ Ðº огÑаниÑениÑм. Ðазовем ÑÐ¾Ð»Ñ Ð½Ðµ ÑÑпеÑполÑзоваÑелÑ, коÑоÑÐ°Ñ Ð´Ð°ÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ ÑоздаваÑÑ Ð´ÑÑгие Ñоли, creator.
Ðевозможно ÑпÑавлÑÑÑ Ñакими аÑÑибÑÑами Ñолей, как
SUPERUSER,BYPASSRLSиREPLICATION. ÐоÑÑÐ¾Ð¼Ñ Ð¾Ð±Ð½Ð°ÑÑжиÑÑ Ð»Ð¾Ð¶Ð½ÑÑ ÑÑпеÑполÑзоваÑелей не полÑÑиÑÑÑ.УбедиÑеÑÑ, ÑÑо
creatorÐ¼Ð¾Ð¶ÐµÑ Ð¾ÑзÑваÑÑ Ð²Ñе пÑава, пÑедоÑÑавлÑемÑе ÑпÑавлÑемÑм полÑзоваÑелÑм.
Удаление вÑÐµÑ Ñолей #
ÐÑли в какой-Ñо Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð¿Ð¾ÑÑебÑеÑÑÑ ÑдалиÑÑ Ð²Ñе Ñоли в клаÑÑеÑе Postgres Pro, иÑполÑзоваÑÑ ÑаÑÑиÑение ldap2pg бÑÐ´ÐµÑ ÑÑÑекÑивно. ÐÐ»Ñ ÑÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ñолей Ñвно опÑеделиÑе пÑÑÑÑе пÑавила (rules).
$ echo '{version: 6, rules: []}' | ldap2pg --config -
...
Empty synchronization map. All roles will be dropped!
...Ð ÑÑом пÑимеÑе пÑименÑеÑÑÑ ÑÑÑнÑй ÑпиÑок по ÑмолÑаниÑ. ldap2pg никогда не ÑдалÑÐµÑ ÑÐ²Ð¾Ñ ÑолÑ, коÑоÑÑÑ Ð¸ÑполÑзÑÐµÑ Ð´Ð»Ñ ÑÑÑановки ÑоединениÑ.
ldap2pg как Docker-конÑÐµÐ¹Ð½ÐµÑ #
ÐÑедполагаеÑÑÑ, ÑÑо ÑÑо не пеÑÐ²Ð°Ñ Ð²ÑÑÑеÑа полÑзоваÑÐµÐ»Ñ Ñ Docker, поÑÑÐ¾Ð¼Ñ Ð² ÑÑом Ñазделе наÑÑÑойки опиÑÐ°Ð½Ñ Ð½Ðµ бÑдÑÑ.
ЧÑÐ¾Ð±Ñ Ð·Ð°Ð¿ÑÑÑиÑÑ ÐºÐ¾Ð½ÑейнеÑ, иÑполÑзÑйÑе ÑледÑÑÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ:
$ docker run --rm dalibo/ldap2pg --help
РобÑазе Docker Ð´Ð»Ñ ldap2pg иÑполÑзÑÑÑÑÑ Ñе же конÑигÑÑаÑионнÑе паÑамеÑÑÑ, коÑоÑÑе опиÑÐ°Ð½Ñ Ð² ÑазделаÑ
ÐнÑеÑÑÐµÐ¹Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ ÑÑÑоки и ldap2pg.yml. Ðожно подклÑÑиÑÑ Ñайл конÑигÑÑаÑии ldap2pg.yml.
$ docker run --rm -v ${PWD}/ldap2pg.yml:/workspace/ldap2pg.yml dalibo/ldap2pgÐожно Ñакже ÑкÑпоÑÑиÑоваÑÑ Ð½ÐµÐºÐ¾ÑоÑÑе пеÑеменнÑе окÑÑÐ¶ÐµÐ½Ð¸Ñ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¿Ð°ÑамеÑÑа -e:
$ docker run --rm -v ${PWD}/ldap2pg.yml:/workspace/ldap2pg.yml -e PGDSN=postgres://postgres@localhost:5432/ -e LDAPURI=ldaps://localhost -e LDAPBINDDN=cn=you,dc=entreprise,dc=fr -e LDAPPASSWORD=pasglop dalibo/ldap2pgУбедиÑеÑÑ, ÑÑо конÑÐµÐ¹Ð½ÐµÑ Ð¼Ð¾Ð¶ÐµÑ ÑазÑеÑиÑÑ Ð¸Ð¼Ñ ÐºÐ¾Ð¼Ð¿ÑÑÑеÑа, на коÑоÑÑй даÑÑÑÑ Ñказание. ÐÑи иÑполÑзовании внÑÑÑенниÑ
ÑазÑеÑений имени не забÑдÑÑе добавиÑÑ Ðº ваÑей команде паÑамеÑÑ -dns=, коÑоÑÑй ÑказÑÐ²Ð°ÐµÑ Ð½Ð° Ð²Ð°Ñ Ð²Ð½ÑÑÑенний DNS-ÑеÑвеÑ. Ðа подÑобноÑÑÑми обÑаÑиÑеÑÑ ÑÑда.
ÐолÑзоваÑелÑÑкий ACL #
Ð ldap2pg вÑÑÑÐ¾ÐµÐ½Ñ ÑпиÑки ACL Ð´Ð»Ñ Ð¾Ð±ÑиÑ
обÑекÑов, ÑакиÑ
как DATABASE, SCHEMA, TABLE, FUNCTION и Ñ. д. Ð Postgres Pro еÑÑÑ Ð¼Ð½Ð¾Ð³Ð¾ дÑÑгиÑ
обÑекÑов, ÑакиÑ
как FOREIGN DATA WRAPPER, FOREIGN SERVER, FOREIGN TABLE, TYPE и Ñ. д. Ð Ñакой ÑиÑÑаÑии Ð¼Ð¾Ð¶ÐµÑ Ð²Ð¾Ð·Ð½Ð¸ÐºÐ½ÑÑÑ Ð¿Ð¾ÑÑебноÑÑÑ Ð² ÑпÑавлении полÑзоваÑелÑÑким ACL. ÐÐ»Ñ ÑÑого можно напиÑаÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑÑкий ACL.
ÐÑимеÑание
ЧÑÐ¾Ð±Ñ Ð½Ð°Ð¿Ð¸ÑаÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑÑкий ACL, ÑÑебÑÑÑÑÑ Ð½Ð°Ð²Ñки пÑодвинÑÑого полÑзоваÑелÑ. ÐеобÑ
одимо ÑазбиÑаÑÑÑÑ Ð² ÑпиÑкаÑ
ACL Postgres Pro и конÑигÑÑаÑии ldap2pg. ÐеÑед наÑалом пÑоÑиÑайÑе ÑÐ°Ð·Ð´ÐµÐ»Ñ Ð£Ð¿Ñавление пÑавами и СпÑавка по ÑÐ°Ð¹Ð»Ñ ldap2pg.yml, ÑбедиÑеÑÑ, ÑÑо Ð²Ñ Ñ
оÑоÑо понимаеÑе докÑменÑаÑÐ¸Ñ Ð¿Ð¾ ACL Postgres Pro и ÑÑо пÑава ÑÑпеÑно ÑинÑ
ÑонизиÑÐ¾Ð²Ð°Ð½Ñ Ñ ldap2pg.
ÐпÑеделиÑе полÑзоваÑелÑÑкий ACL в YAML-Ñайле конÑигÑÑаÑии.
ÐаÑÐ¸Ð°Ð½Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ #
ÐÑедположим, в ваÑей базе даннÑÑ
еÑÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑÑкий Ñип enum myenum.
CREATE TYPE public.myenum AS ENUM ('toto', 'titi', 'tata');Ðам нÑжно полÑÑиÑÑ Ð´Ð¾ÑÑÑп к ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ñавами Ð´Ð»Ñ ÑÑого обÑекÑа, в конеÑном иÑоге Ð´Ð»Ñ Ð´ÑÑÐ³Ð¸Ñ Ñипов, ÑеÑез полÑзоваÑелÑÑкий ACL.
ÐпÑеделение имени #
ÐазовиÑе Ð²Ð°Ñ ACL по клÑÑÐµÐ²Ð¾Ð¼Ñ ÑÐ»Ð¾Ð²Ñ Ð² опеÑаÑоÑе GRANT или REVOKE. Ðз GRANT USAGE ON TYPE mytype TO myrole опÑеделиÑе Ð¸Ð¼Ñ Ð´Ð»Ñ TYPE ваÑего ACL.
acls:
TYPE:
...ÐблаÑÑÑ Ð´ÐµÐ¹ÑÑÐ²Ð¸Ñ #
Postgres Pro опÑеделÑÐµÑ ÑÐ¸Ð¿Ñ Ð¿Ð¾Ð»ÑзоваÑелей в ÑÐ°Ð¼ÐºÐ°Ñ ÑÑ ÐµÐ¼Ñ. ÐоÑколÑÐºÑ ÑÑ ÐµÐ¼Ð° бÑÐ´ÐµÑ ÑÑÑко задана, огÑаниÑим дейÑÑвие ACL базой даннÑÑ .
acls:
TYPE:
scope: databaseÐÑедоÑÑавление и оÑзÑв пÑав #
ÐапиÑаÑÑ Ð¾Ð¿ÐµÑаÑоÑÑ GRANT и REVOKE легÑе вÑего. Ðа подÑобноÑÑÑми о ÑоÑмаÑе запÑоÑа обÑаÑиÑеÑÑ Ðº опиÑÐ°Ð½Ð¸Ñ Ð¿ÑедоÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ñав. ÐÑполÑзÑем поле object в паÑамеÑÑе grant, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð¼ÐµÑÑиÑÑ ÑÑда Ð¸Ð¼Ñ Ñипа. СÑ
ема public жÑÑÑко задана, о ÑÑм бÑло Ñказано вÑÑе.
acls:
TYPE:
scope: database
grant: GRANT <privilege> ON TYPE public.<object> TO <grantee>;
revoke: REVOKE <privilege> ON TYPE public.<object> FROM <grantee>;ÐÑовеÑка #
ÐапÑÐ¾Ñ Ð½Ð° пÑовеÑÐºÑ â ÑÑо ÑÐ°Ð¼Ð°Ñ ÑÐ»Ð¾Ð¶Ð½Ð°Ñ ÑаÑÑÑ. ÐÑжно ÑмеÑÑ ÑабоÑаÑÑ Ñо вÑÑÑоеннÑм ÑиÑÑемнÑм Ñипом Postgres Pro aclitem и вÑÑÑоеннÑми ÑиÑÑемнÑми ÑÑнкÑиÑми aclexplode и acldefault. СигнаÑÑÑа запÑоÑа на пÑовеÑÐºÑ Ð·Ð°Ð²Ð¸ÑÐ¸Ñ Ð¾Ñ Ð¾Ð±Ð»Ð°ÑÑи дейÑÑÐ²Ð¸Ñ ACL.
ÐÐ»Ñ Ð¾Ð±Ð»Ð°ÑÑи дейÑÑÐ²Ð¸Ñ instance:
type: ÑÑÑока, опиÑÑваÑÑÐ°Ñ Ñип пÑава как клÑÑевое Ñлово SQL.object: ÑÑÑока, опиÑÑваÑÑÐ°Ñ Ð¸Ð¼Ñ Ð¾Ð±ÑекÑа как SQL-иденÑиÑикаÑоÑ.grantee: ÑÑÑока, опиÑÑваÑÑÐ°Ñ Ð¸Ð¼Ñ Ñоли как SQL-иденÑиÑикаÑоÑ.
ÐÐ»Ñ Ð¾Ð±Ð»Ð°ÑÑи дейÑÑÐ²Ð¸Ñ database:
type: ÑÑÑока, опиÑÑваÑÑÐ°Ñ Ñип пÑава как клÑÑевое Ñлово SQL.object: ÑÑÑока, опиÑÑваÑÑÐ°Ñ Ð¸Ð¼Ñ Ð¾Ð±ÑекÑа как SQL-иденÑиÑикаÑоÑ.grantee: ÑÑÑока, опиÑÑваÑÑÐ°Ñ Ð¸Ð¼Ñ Ñоли как SQL-иденÑиÑикаÑоÑ.partial: логиÑеÑкое знаÑение, ÑказÑваÑÑее, ÑвлÑеÑÑÑ Ð»Ð¸ пÑедоÑÑавление пÑава ÑаÑÑиÑнÑм.
ÐаÑамеÑÑ partial ÑказÑÐ²Ð°ÐµÑ ldap2pg, ÑÑо нÑжно Ñнова пÑедоÑÑавиÑÑ Ð¿Ñава ALL ... IN SCHEMA. ÐоÑколÑÐºÑ Ð½Ð°Ñ ACL обÑабаÑÑÐ²Ð°ÐµÑ Ð¾Ð±ÑекÑÑ Ð¿Ð¾ одномÑ, знаÑение partial вÑегда бÑÐ´ÐµÑ false.
ldap2pg оÑпÑавлÑÐµÑ Ð¾Ð´Ð¸Ð½ паÑамеÑÑ Ð² запÑоÑе на пÑовеÑÐºÑ â акÑÑалÑнÑй ÑпиÑок Ñипов пÑав, ÑпÑавлÑемÑÑ ÐºÐ¾Ð½ÑигÑÑаÑией. СпиÑок пÑедÑÑавлÑÐµÑ Ñобой маÑÑив ÑекÑÑа. ÐжидаеÑÑÑ, ÑÑо в ÑезÑлÑÑаÑе запÑоÑа пÑава, не вклÑÑÑннÑе в ÑпиÑок, не попадÑÑ Ð² вÑбоÑкÑ.
ÐÐ»Ñ ÑпиÑка ACL TYPE пÑовеÑим пÑава Ð´Ð»Ñ Ð´Ð¾ÑÑÑпа к ÑиÑÑÐµÐ¼Ð½Ð¾Ð¼Ñ ÐºÐ°ÑÐ°Ð»Ð¾Ð³Ñ pg_type.
acls:
TYPE:
scope: database
grant: GRANT <privilege> ON <acl> public.<object> TO <grantee>;
revoke: REVOKE <privilege> ON <acl> public.<object> FROM <grantee>;
inspect: |
WITH grants AS (
SELECT typname,
(aclexplode(COALESCE(typacl, acldefault('T', typowner)))).privilege_type AS priv,
(aclexplode(COALESCE(typacl, acldefault('T', typowner)))).grantee::regrole::text AS grantee
FROM pg_catalog.pg_type
WHERE typnamespace::regnamespace = 'public'::regnamespace
AND typtype <> 'b' -- exclude base type.
)
SELECT grants.priv AS "privilege",
grants.typname AS "object",
CASE grants.grantee WHEN '-' THEN 'public' ELSE grants.grantee END AS grantee,
FALSE AS partial
FROM grants
WHERE "priv" = ANY ($1)
ORDER BY 2, 3, 1
;Ðидно, ÑÑо ÑÑо не пÑоÑÑой запÑоÑ. Ðн поддеÑживаеÑÑÑ Ð² веÑÑии Postgres Pro 17.
ÐÑполÑзование #
ТепеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ пеÑÐµÑ Ð¾Ð´Ð¸ÑÑ Ðº иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð²Ð°Ñего полÑзоваÑелÑÑкого ACL в пÑоÑиле. СÑÑлайÑеÑÑ Ð½Ð° обÑÐµÐºÑ Ð² пÑоÑиле, а не в пÑавиле пÑедоÑÑавлении пÑава.
privileges:
custom:
- type: USAGE
on: TYPE
object: myenum
rules:
- roles:
names:
- alice
grant:
privilege: custom
role: aliceРпÑоÑиле Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ даÑÑ ÑÑÑÐ»ÐºÑ Ð½Ð° вÑе ÑÐ¸Ð¿Ñ Ð²ÑÑÑнÑÑ. ÐÑи запÑÑке ldap2pg Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð²Ð½ÐµÑÐµÐ½Ñ Ð² ваÑÑ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ :
$ ldap2pg ... 16:52:02 CHANGE Would Revoke privileges. grant="USAGE ON TYPE myenum TO public" database=db0 16:52:02 CHANGE Would Grant privileges. grant="USAGE ON TYPE myenum TO alice" database=db0 16:52:02 INFO Comparison complete. searches=0 roles=1 queries=5 grants=1 16:52:02 INFO Use --real option to apply changes. 16:52:02 INFO Done. elapsed=44.345229ms mempeak=1.6MiB ldap=0s inspect=28.992071ms sync=0s
Ðа ÑÑом вÑÑ.
ÐÑладка #
ÐÑли возникла пÑоблема, изолиÑÑйÑе еÑ. ÐгÑаниÑÑÑе конÑигÑÑаÑÐ¸Ñ Ð²Ð°Ñим полÑзоваÑелÑÑким ACL. СинÑ
ÑонизиÑÑйÑе единÑÑвеннÑÑ ÑолÑ, пÑедоÑÑавÑÑе ей пÑава. Ðе иÑполÑзÑйÑе поиÑковÑе запÑоÑÑ LDAP, иÑполÑзÑйÑе ÑолÑко ÑÑаÑиÑеÑкие пÑавила. СинÑ
ÑонизиÑÑйÑе единÑÑвеннÑÑ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
. ÐклÑÑиÑе вÑвод оÑладоÑнÑÑ
ÑообÑений Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¿Ð°ÑамеÑÑа --verbose.
ldap2pg пÑоÑмаÑÑÐ¸Ð²Ð°ÐµÑ Ð¿Ð¾ оÑеÑеди Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ , заÑем ÑпиÑки ACL. ÐÐ»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ ACL вÑводиÑÑÑ ÑледÑÑÑее ÑообÑение:
РпеÑвой ÑÑÑоке Ñ Ð¸Ð½ÑоÑмаÑией о ваÑем ACL пÑиÑÑÑÑÑвÑÐµÑ Ð°ÑÑибÑÑ Ð·Ð°Ð¿Ð¸Ñей acl=TYPE.
17:13:35 DEBUG Inspecting grants. acl=TYPE scope=database database=db0
ÐаÑем идÑÑ ÑообÑÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¿ÑовеÑки: запÑÐ¾Ñ Ð¸ аÑгÑменÑÑ. ÐÐ»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ пÑедоÑÑавленного пÑава поÑвлÑеÑÑÑ ÑообÑение Found grant (найденное пÑедоÑÑавленное пÑаво)..
17:13:35 DEBUG Executing SQL query: WITH grants AS ( ... WHERE "priv" = ANY ($1) ORDER BY 2, 3, 1 ; arg=[USAGE] 17:13:35 DEBUG Found grant in Postgres instance. grant="USAGE ON TYPE myenum TO public" database=db0
ÐоÑле ÑÑого ldap2pg ÑаÑÑиÑÑÐµÑ Ð¿ÑедоÑÑавленнÑе пÑава, ÑгенеÑиÑованнÑе пÑавилом. ÐÐ»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ ÑгенеÑиÑованного пÑедоÑÑавленного пÑава вÑводиÑÑÑ ÑообÑение Wants grant (ÑÑебÑеÑÑÑ Ð¿ÑедоÑÑавиÑÑ Ð¿Ñаво )..
17:13:35 DEBUG Wants grant. grant="USAGE ON TYPE myenum TO alice" database=db0
РконÑе ldap2pg вÑÐ²Ð¾Ð´Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ, коÑоÑÑе бÑдÑÑ Ð¿ÑимененÑ.
17:13:35 CHANGE Would Revoke privileges. grant="USAGE ON TYPE myenum TO public" database=db0 17:13:35 DEBUG Would Execute SQL query: REVOKE USAGE ON TYPE public."myenum" FROM "public"; 17:13:35 CHANGE Would Grant privileges. grant="USAGE ON TYPE myenum TO alice" database=db0 17:13:35 DEBUG Would Execute SQL query: GRANT USAGE ON TYPE public."myenum" TO "alice";
Ðо завеÑÑении опеÑаÑии ldap2pg вÑÐ²Ð¾Ð´Ð¸Ñ ÑообÑении Ñ Ð·Ð°ÐºÐ»ÑÑением, даже еÑли не ÑÑебÑеÑÑÑ Ð½Ð¸ÐºÐ°ÐºÐ¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹.
17:13:35 DEBUG Privileges synchronized. acl=TYPE database=db0