50.1. ÐезопаÑное пÑоекÑиÑование модÑÐ»Ñ Ð¿ÑовеÑки #
ÐÑедÑпÑеждение
ÐеÑед ÑеализаÑией модÑÐ»Ñ Ð¿ÑовеÑки внимаÑелÑно изÑÑиÑе веÑÑ Ð¼Ð°ÑеÑиал ÑÑого Ñаздела. ÐекоÑÑекÑно ÑабоÑаÑÑий модÑÐ»Ñ Ð¿ÑовеÑки поÑенÑиалÑно опаÑнее полного оÑÑÑÑÑÑÐ²Ð¸Ñ Ð°ÑÑенÑиÑикаÑии. Ðн не ÑолÑко ÑоздаÑÑ Ð»Ð¾Ð¶Ð½Ð¾Ðµ ÑÑвÑÑво безопаÑноÑÑи, но и Ð¼Ð¾Ð¶ÐµÑ ÑпоÑобÑÑвоваÑÑ Ð°Ñакам на дÑÑгие компоненÑÑ ÑкоÑиÑÑÐµÐ¼Ñ OAuth.
50.1.1. ÐадаÑи модÑÐ»Ñ Ð¿ÑовеÑки #
ХоÑÑ Ð¿Ð¾Ð´Ñ Ð¾Ð´Ñ Ðº пÑовеÑке Ñокенов могÑÑ Ð¾ÑлиÑаÑÑÑÑ Ð² завиÑимоÑÑи Ð¾Ñ Ð¼Ð¾Ð´Ñлей, как пÑавило, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ вÑполниÑÑ ÑÑи обоÑобленнÑÑ Ð´ÐµÐ¹ÑÑвиÑ:
- ÐÑовеÑка Ñокена
РпеÑвÑÑ Ð¾ÑеÑÐµÐ´Ñ Ð¼Ð¾Ð´ÑÐ»Ñ Ð¿ÑовеÑки должен ÑбедиÑÑÑÑ, ÑÑо пÑедÑÑавленнÑй Ñокен дейÑÑвиÑелÑно ÑвлÑеÑÑÑ Ñокеном Ñипа bearer Ð´Ð»Ñ Ð°ÑÑенÑиÑикаÑии клиенÑа. СпоÑоб вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÑÑой пÑовеÑки завиÑÐ¸Ñ Ð¾Ñ Ð¿Ð¾ÑÑавÑика, но обÑÑно вклÑÑÐ°ÐµÑ Ð»Ð¸Ð±Ð¾ кÑипÑогÑаÑиÑеÑкие опеÑаÑии, подÑвеÑждаÑÑие, ÑÑо Ñокен бÑл Ñоздан довеÑенной ÑÑоÑоной (оÑлайн-пÑовеÑка), либо пеÑедаÑÑ Ñокена ÑÑой довеÑенной ÑÑоÑоне Ð´Ð»Ñ Ð¿ÑовеÑки (онлайн-пÑовеÑка).
Ðнлайн-пÑовеÑка, обÑÑно ÑеализÑÐµÐ¼Ð°Ñ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¸Ð½ÑÑоÑпекÑии Ñокена OAuth, ÑÑебÑÐµÑ Ð¾Ñ Ð¼Ð¾Ð´ÑÐ»Ñ Ð¿ÑовеÑки менÑÑе Ñагов и позволÑÐµÑ ÑенÑÑализованно оÑзÑваÑÑ ÑÐ¾ÐºÐµÐ½Ñ Ð² ÑлÑÑае Ð¸Ñ ÐºÐ¾Ð¼Ð¿ÑомеÑаÑии или оÑибоÑной вÑдаÑи. Ðднако пÑи Ñаком Ð¿Ð¾Ð´Ñ Ð¾Ð´Ðµ модÑÐ»Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ ÑовеÑÑаÑÑ ÐºÐ°Ðº минимÑм один ÑеÑевой запÑÐ¾Ñ Ð¿Ñи каждой попÑÑке аÑÑенÑиÑикаÑии (вÑе Ñакие запÑоÑÑ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð·Ð°Ð²ÐµÑÑаÑÑÑÑ Ð² ÑеÑение заданного authentication_timeout). ÐÑоме Ñого, поÑÑавÑик Ð¼Ð¾Ð¶ÐµÑ Ð½Ðµ пÑедоÑÑавлÑÑÑ ÐºÐ¾Ð½ÐµÑнÑе ÑоÑки инÑÑоÑпекÑии Ð´Ð»Ñ Ð²Ð½ÐµÑÐ½Ð¸Ñ ÑеÑвеÑов ÑеÑÑÑÑов.
ÐÑлайн-пÑовеÑка гоÑаздо Ñложнее и обÑÑно ÑÑебÑеÑ, ÑÑÐ¾Ð±Ñ Ð¼Ð¾Ð´ÑÐ»Ñ Ð¿ÑовеÑки вÑл ÑпиÑок довеÑеннÑÑ ÐºÐ»ÑÑей подпиÑи поÑÑавÑика и пÑовеÑÑл кÑипÑогÑаÑиÑеÑкÑÑ Ð¿Ð¾Ð´Ð¿Ð¸ÑÑ Ñокена вмеÑÑе Ñ ÐµÐ³Ð¾ ÑодеÑжимÑм. ÐÑи ÑеализаÑии модÑÐ»Ñ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ ÑÑÑого ÑледоваÑÑ Ð¸Ð½ÑÑÑÑкÑиÑм поÑÑавÑика, вклÑÑÐ°Ñ Ð¿ÑовеÑÐºÑ Ð¸Ð·Ð´Ð°ÑÐµÐ»Ñ («ÐÑкÑда ÑÑÐ¾Ñ Ñокен?»), аÑдиÑоÑии («ÐÐ»Ñ ÐºÐ¾Ð³Ð¾ пÑедназнаÑен ÑÑÐ¾Ñ Ñокен?») и ÑÑока дейÑÑÐ²Ð¸Ñ («Ðогда можно иÑполÑзоваÑÑ Ñокен?»). ÐоÑколÑÐºÑ Ð¿Ñи ÑÑом меÑоде модÑÐ»Ñ Ð¸ поÑÑавÑик не взаимодейÑÑвÑÑÑ, ÑенÑÑализовано оÑозваÑÑ ÑÐ¾ÐºÐµÐ½Ñ Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾. ÐаÑианÑÑ ÑеализаÑии модÑÐ»Ñ Ð¾Ñлайн-пÑовеÑки могÑÑ Ñакже вводиÑÑ Ð¾Ð³ÑаниÑÐµÐ½Ð¸Ñ Ð½Ð° макÑималÑнÑй ÑÑок дейÑÑÐ²Ð¸Ñ Ñокена.
ÐÑли Ñокен нелÑÐ·Ñ Ð¿ÑовеÑиÑÑ, модÑÐ»Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ немедленно завеÑÑиÑÑ ÑабоÑÑ Ñ Ð¾Ñибкой. ÐалÑнейÑÐ°Ñ Ð°ÑÑенÑиÑикаÑÐ¸Ñ Ð¸ авÑоÑизаÑÐ¸Ñ Ð»Ð¸ÑÐµÐ½Ñ ÑмÑÑла, еÑли Ñокен Ñипа bearer не бÑл вÑдан довеÑенной ÑÑоÑоной.
- ÐвÑоÑизаÑÐ¸Ñ ÐºÐ»Ð¸ÐµÐ½Ñа
Ðалее модÑÐ»Ñ Ð¿ÑовеÑки должен ÑбедиÑÑÑÑ, ÑÑо конеÑнÑй полÑзоваÑÐµÐ»Ñ Ð¿ÑедоÑÑавил клиенÑÑ ÑазÑеÑение на доÑÑÑп к ÑеÑвеÑÑ Ð¾Ñ Ñвоего имени. ÐбÑÑно на ÑÑом ÑÑапе пÑовеÑÑÑÑÑÑ Ð½Ð°Ð·Ð½Ð°ÑеннÑе ÑÐ¾ÐºÐµÐ½Ñ Ð¾Ð±Ð»Ð°ÑÑи доÑÑÑпа, ÑÑÐ¾Ð±Ñ ÑбедиÑÑÑÑ, ÑÑо они обеÑпеÑиваÑÑ Ð´Ð¾ÑÑÑп к базе даннÑÑ ÑоглаÑно ÑекÑÑим паÑамеÑÑам HBA.
Ð¦ÐµÐ»Ñ ÑÑого Ñага â пÑедоÑвÑаÑиÑÑ Ð¿Ð¾Ð»ÑÑение Ñокена клиенÑом OAuth под ложнÑм пÑедлогом. ÐÑли модÑÐ»Ñ Ð¿ÑовеÑки ÑÑебÑеÑ, ÑÑÐ¾Ð±Ñ Ð¾Ð±Ð»Ð°ÑÑи доÑÑÑпа вÑÐµÑ Ñокенов обеÑпеÑивали доÑÑÑп к базе даннÑÑ , в пÑоÑеÑÑе аÑÑенÑиÑикаÑии поÑÑавÑик должен Ñвно запÑоÑиÑÑ Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ ÑазÑеÑение на Ñакой доÑÑÑп. ÐÑо даÑÑ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð¾ÑклониÑÑ Ð·Ð°Ð¿ÑоÑ, еÑли ÐºÐ»Ð¸ÐµÐ½Ñ Ð½Ðµ должен иÑполÑзоваÑÑ ÐµÐ³Ð¾ ÑÑÑÑнÑе даннÑе Ð´Ð»Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑÐµÐ½Ð¸Ñ Ðº базе даннÑÑ .
ХоÑÑ Ð°Ð²ÑоÑизаÑÐ¸Ñ ÐºÐ»Ð¸ÐµÐ½Ñов без Ñвного ÑÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð¾Ð±Ð»Ð°ÑÑей доÑÑÑпа возможна пÑи налиÑии дополниÑелÑной инÑоÑмаÑии о ÑазвÑÑнÑÑой аÑÑ Ð¸ÑекÑÑÑе, Ñакой Ð¿Ð¾Ð´Ñ Ð¾Ð´ иÑклÑÑÐ°ÐµÑ Ð¸Ð· пÑоÑеÑÑа полÑзоваÑелÑ. ÐÑо лиÑÐ°ÐµÑ ÐµÐ³Ð¾ возможноÑÑи обнаÑÑживаÑÑ Ð¾Ñибки ÑазвÑÑÑÑÐ²Ð°Ð½Ð¸Ñ Ð¸ позволÑÐµÑ Ð·Ð»Ð¾ÑмÑÑленникам незамеÑно иÑполÑзоваÑÑ Ð¿Ð¾Ð´Ð¾Ð±Ð½Ñе оÑибки. ÐоÑÑÑп к базе даннÑÑ Ð´Ð¾Ð»Ð¶ÐµÐ½ бÑÑÑ ÑÑÑого огÑаниÑен ÑолÑко довеÑеннÑми клиенÑами [17], еÑли Ñ Ð¿Ð¾Ð»ÑзоваÑелей не запÑаÑиваÑÑÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе облаÑÑи доÑÑÑпа.
Ðаже в ÑлÑÑае неÑдаÑной авÑоÑизаÑии модÑÐ»Ñ Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑодолжиÑÑ Ð¿Ð¾Ð»ÑÑаÑÑ Ð´Ð°Ð½Ð½Ñе Ð´Ð»Ñ Ð°ÑÑенÑиÑикаÑии Ð¾Ñ Ñокена Ñ ÑелÑÑ Ð°ÑдиÑа и оÑладки.
- ÐÑÑенÑиÑикаÑÐ¸Ñ ÐºÐ¾Ð½ÐµÑного полÑзоваÑелÑ
РзаклÑÑение модÑÐ»Ñ Ð¿ÑовеÑки должен опÑеделиÑÑ Ð¸Ð´ÐµÐ½ÑиÑикаÑÐ¾Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ð´Ð»Ñ Ñокена, либо запÑоÑив ÑÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ñ Ð¿Ð¾ÑÑавÑика, либо Ð¸Ð·Ð²Ð»ÐµÐºÐ°Ñ ÐµÑ Ð¸Ð· Ñамого Ñокена, и веÑнÑÑÑ ÑÑÐ¾Ñ Ð¸Ð´ÐµÐ½ÑиÑикаÑÐ¾Ñ ÑеÑвеÑÑ. СеÑÐ²ÐµÑ Ð·Ð°Ñем пÑÐ¸Ð¼ÐµÑ Ð¾ÐºÐ¾Ð½ÑаÑелÑное ÑеÑение об авÑоÑизаÑии, иÑполÑзÑÑ ÐºÐ¾Ð½ÑигÑÑаÑÐ¸Ñ HBA. ÐденÑиÑикаÑÐ¾Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ð¼Ð¾Ð¶Ð½Ð¾ запÑоÑиÑÑ Ð² ÑÐ°Ð¼ÐºÐ°Ñ ÑеанÑа, вÑзвав ÑÑнкÑиÑ
system_user. Также он бÑÐ´ÐµÑ ÑегиÑÑÑиÑоваÑÑÑÑ Ð² жÑÑнале ÑеÑвеÑа, еÑли вклÑÑÑн паÑамеÑÑ log_connections.РазнÑе поÑÑавÑики могÑÑ Ð·Ð°Ð¿Ð¸ÑÑваÑÑ ÑазлиÑнÑе даннÑе об аÑÑенÑиÑикаÑии конеÑного полÑзоваÑелÑ, коÑоÑÑе обÑÑно назÑваÑÑ ÑÑвеÑждениÑми. Ðак пÑавило, поÑÑавÑики докÑменÑиÑÑÑÑ, какие из ÑÑÐ¸Ñ ÑÑвеÑждений доÑÑаÑоÑно надÑжнÑ, ÑÑÐ¾Ð±Ñ Ð¸ÑполÑзоваÑÑ Ð¸Ñ Ð¿Ñи пÑинÑÑии ÑеÑений об авÑоÑизаÑии, а какие â неÑ. ÐапÑимеÑ, веÑоÑÑно, неÑелеÑообÑазно иÑполÑзоваÑÑ Ð¿Ð¾Ð»Ð½Ð¾Ðµ Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ð² каÑеÑÑве иденÑиÑикаÑоÑа Ð´Ð»Ñ Ð°ÑÑенÑиÑикаÑии, Ñак как многие поÑÑавÑики позволÑÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑм пÑоизволÑно менÑÑÑ Ð¾ÑобÑажаемое имÑ. РконеÑном ÑÑÑÑе, вÑÐ±Ð¾Ñ ÐºÐ¾Ð½ÐºÑеÑного ÑÑвеÑÐ¶Ð´ÐµÐ½Ð¸Ñ (или Ð¸Ñ ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð°Ñии) завиÑÐ¸Ñ Ð¾Ñ ÑеализаÑии поÑÑавÑика и ÑÑебований пÑиложениÑ.
ÐбÑаÑиÑе внимание, ÑÑо возможен Ñакже анонимнÑй Ð²Ñ Ð¾Ð´ и Ð²Ñ Ð¾Ð´ в ÑиÑÑÐµÐ¼Ñ Ð¿Ð¾Ð´ пÑевдонимом пÑи вклÑÑÑнном делегиÑовании ÑопоÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑзоваÑелей (Ñм. ÐодÑаздел 50.1.3).
50.1.2. ÐбÑие ÑекомендаÑии по напиÑÐ°Ð½Ð¸Ñ ÐºÐ¾Ð´Ð° #
ÐÑи ÑеализаÑии пÑовеÑки Ñокенов ÑазÑабоÑÑикам Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ ÑÑиÑÑваÑÑ ÑледÑÑÑее:
- ÐонÑиденÑиалÑноÑÑÑ Ñокенов
ÐодÑли не Ð´Ð¾Ð»Ð¶Ð½Ñ Ð·Ð°Ð¿Ð¸ÑÑваÑÑ ÑÐ¾ÐºÐµÐ½Ñ Ð¸Ð»Ð¸ Ð¸Ñ ÑаÑÑи в жÑÑнал ÑеÑвеÑа. ÐÑо пÑавило дейÑÑвÑеÑ, даже еÑли модÑÐ»Ñ ÑÑиÑÐ°ÐµÑ Ñокен недейÑÑвиÑелÑнÑм. ÐлоÑмÑÑленник, коÑоÑÑй Ð¼Ð¾Ð¶ÐµÑ Ð¿ÐµÑенапÑавиÑÑ ÐºÐ»Ð¸ÐµÐ½Ñа на подделÑного поÑÑавÑика, не должен имеÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð¿Ð¾Ð»ÑÑиÑÑ ÑÑÐ¾Ñ (а в ином ÑлÑÑае и дейÑÑвиÑелÑнÑй) Ñокен Ñ Ð´Ð¸Ñка.
РеализаÑии, коÑоÑÑе пеÑедаÑÑ ÑÐ¾ÐºÐµÐ½Ñ Ð¿Ð¾ ÑеÑи (напÑимеÑ, Ð´Ð»Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¾Ð½Ð»Ð°Ð¹Ð½-пÑовеÑки Ñокена Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¿Ð¾ÑÑавÑика), Ð´Ð¾Ð»Ð¶Ð½Ñ Ð°ÑÑенÑиÑиÑиÑоваÑÑ ÑдалÑннÑÑ ÑÑоÑÐ¾Ð½Ñ Ð¸ обеÑпеÑиваÑÑ Ð½Ð°Ð´ÑжнÑÑ ÑÑанÑпоÑÑнÑÑ Ð·Ð°ÑиÑÑ.
- ÐÑоÑоколиÑование ÑобÑÑий
ÐодÑли пÑовеÑки могÑÑ Ð¸ÑполÑзоваÑÑ Ñе же ÑÑедÑÑва пÑоÑоколиÑованиÑ, ÑÑо и ÑÑандаÑÑнÑе ÑаÑÑиÑениÑ. Ðднако пÑавила вÑдаÑи запиÑей жÑÑнала клиенÑÑ Ð½Ð° ÑÑапе аÑÑенÑиÑикаÑии подклÑÑÐµÐ½Ð¸Ñ Ð¸Ð¼ÐµÑÑ Ñвои оÑобенноÑÑи. ÐообÑе говоÑÑ, ÑÑÐ¾Ð±Ñ Ð¸Ð·Ð±ÐµÐ¶Ð°ÑÑ ÑÑеÑки инÑоÑмаÑии неаÑÑенÑиÑиÑиÑованнÑм клиенÑам, модÑли Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¿ÑоÑоколиÑоваÑÑ Ð¿ÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ð¿ÑовеÑки Ñ ÑÑовнем
COMMERRORи завеÑÑаÑÑ ÑабоÑÑ ÑÑаÑнÑм обÑазом, вмеÑÑо Ñого ÑÑÐ¾Ð±Ñ Ð·Ð°Ð¿Ð¸ÑÑваÑÑ ÑобÑÑÐ¸Ñ Ñ ÑÑовнемERROR/FATALи иниÑииÑоваÑÑ ÑаÑкÑÑÑÐºÑ ÑÑека.- ÐозможноÑÑÑ Ð¿ÑеÑÑваниÑ
ЧÑÐ¾Ð±Ñ ÑеÑÐ²ÐµÑ Ð¼Ð¾Ð³ коÑÑекÑно обÑабаÑÑваÑÑ Ñайм-аÑÑÑ Ð°ÑÑенÑиÑикаÑии и ÑÐ¸Ð³Ð½Ð°Ð»Ñ Ð¾ÑÑановки Ð¾Ñ pg_ctl, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð° возможноÑÑÑ Ð¿ÑеÑÑваÑÑ ÑабоÑÑ Ð¼Ð¾Ð´Ñлей по ÑигналÑ. ÐапÑимеÑ, блокиÑÑÑÑие вÑÐ·Ð¾Ð²Ñ ÑокеÑов, как пÑавило, ÑледÑÐµÑ Ð·Ð°Ð¼ÐµÐ½ÑÑÑ ÐºÐ¾Ð´Ð¾Ð¼, коÑоÑÑй обÑабаÑÑÐ²Ð°ÐµÑ ÐºÐ°Ðº ÑобÑÑÐ¸Ñ ÑокеÑов, Ñак и пÑеÑÑÐ²Ð°Ð½Ð¸Ñ Ð±ÐµÐ· ÑÑловий гонки (напÑимеÑ, ÑÑнкÑии
WaitLatchOrSocket(),WaitEventSetWait()и дÑÑгие), а длиÑелÑнÑе ÑÐ¸ÐºÐ»Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¿ÐµÑиодиÑеÑки вÑзÑваÑÑCHECK_FOR_INTERRUPTS(). ÐеÑоблÑдение ÑÑÐ¸Ñ ÑекомендаÑий Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑивеÑÑи к ÑомÑ, ÑÑо некоÑоÑÑе ÑеанÑÑ Ð¾Ð±ÑлÑживаÑÑÐ¸Ñ Ð¿ÑоÑеÑÑов пеÑеÑÑанÑÑ Ð¾ÑвеÑаÑÑ.- ТеÑÑиÑование
ÐбÑÑм ÑеÑÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑиÑÑÐµÐ¼Ñ OAuth вÑÑ Ð¾Ð´Ð¸Ñ Ð´Ð°Ð»ÐµÐºÐ¾ за Ñамки данной докÑменÑаÑии, однако, как минимÑм, негаÑивное ÑеÑÑиÑование ÑледÑÐµÑ ÑÑиÑаÑÑ Ð¾Ð±ÑзаÑелÑнÑм. СпÑоекÑиÑоваÑÑ Ð¼Ð¾Ð´ÑлÑ, коÑоÑÑй пÑопÑÑÐºÐ°ÐµÑ Ð°Ð²ÑоÑизованнÑÑ Ð¿Ð¾Ð»ÑзоваÑелей, доволÑно пÑоÑÑо. Ðо оÑÐ½Ð¾Ð²Ð½Ð°Ñ Ð·Ð°Ð´Ð°Ñа ÑиÑÑÐµÐ¼Ñ Ð·Ð°ÐºÐ»ÑÑаеÑÑÑ Ð² Ñом, ÑÑÐ¾Ð±Ñ Ð½Ðµ допÑÑÑиÑÑ Ð½ÐµÐ°Ð²ÑоÑизованнÑÑ Ð¿Ð¾Ð»ÑзоваÑелей.
- ÐокÑменÑаÑиÑ
ÐÑи ÑеализаÑии модÑлей пÑовеÑки ÑледÑÐµÑ Ð´Ð¾ÐºÑменÑиÑоваÑÑ ÑодеÑжимое и ÑоÑÐ¼Ð°Ñ Ð°ÑÑенÑиÑиÑиÑованного иденÑиÑикаÑоÑа, коÑоÑÑй пеÑедаÑÑÑÑ ÑеÑвеÑÑ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ конеÑного полÑзоваÑÐµÐ»Ñ (напÑимеÑ, ÑвлÑеÑÑÑ Ð»Ð¸ ÑÑÐ¾Ñ Ð¸Ð´ÐµÐ½ÑиÑикаÑÐ¾Ñ Ð°Ð´ÑеÑом ÑлекÑÑонной поÑÑÑ, иденÑиÑикаÑоÑом оÑганизаÑии или UUID). ÐÑа инÑоÑмаÑÐ¸Ñ Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾ÑÑебоваÑÑÑÑ Ð°Ð´Ð¼Ð¸Ð½Ð¸ÑÑÑаÑоÑам баз даннÑÑ Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñайлов ÑопоÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ pg_ident. Также должно бÑÑÑ Ñказано, безопаÑно ли иÑполÑзоваÑÑ Ð¼Ð¾Ð´ÑÐ»Ñ Ð² Ñежиме
delegate_ident_mapping=1, и ÐºÐ°ÐºÐ°Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑÐ½Ð°Ñ ÐºÐ¾Ð½ÑигÑÑаÑÐ¸Ñ Ð´Ð»Ñ ÑÑого Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð°.
50.1.3. ÐвÑоÑизаÑÐ¸Ñ Ð¿Ð¾Ð»ÑзоваÑелей (делегиÑование ÑопоÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑзоваÑелей) #
ÐÑновнÑм ÑезÑлÑÑаÑом ÑабоÑÑ Ð¼Ð¾Ð´ÑÐ»Ñ Ð¿ÑовеÑки ÑвлÑеÑÑÑ Ð¸Ð´ÐµÐ½ÑиÑикаÑÐ¾Ñ Ð¿Ð¾Ð»ÑзоваÑелÑ, коÑоÑÑй ÑеÑÐ²ÐµÑ Ð·Ð°Ñем ÑÑÐ°Ð²Ð½Ð¸Ð²Ð°ÐµÑ Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñми в pg_ident.conf ÑопоÑÑавлениÑми и опÑеделÑеÑ, ÑазÑеÑено ли подклÑÑение конеÑÐ½Ð¾Ð¼Ñ Ð¿Ð¾Ð»ÑзоваÑелÑ. Ðднако OAuth Ñам по Ñебе ÑвлÑеÑÑÑ Ð¸Ð½ÑÑаÑÑÑÑкÑÑÑой авÑоÑизаÑии, и ÑÐ¾ÐºÐµÐ½Ñ Ð¼Ð¾Ð³ÑÑ ÑодеÑжаÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ пÑаваÑ
полÑзоваÑелÑ. ÐапÑимеÑ, Ñокен Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ подÑазделениÑÑ
оÑганизаÑии, к коÑоÑÑм пÑÐ¸Ð½Ð°Ð´Ð»ÐµÐ¶Ð¸Ñ Ð¿Ð¾Ð»ÑзоваÑелÑ, или пеÑеÑиÑлÑÑÑ Ñоли, коÑоÑÑе могÑÑ Ð±ÑÑÑ Ð½Ð°Ð·Ð½Ð°ÑÐµÐ½Ñ Ð¿Ð¾Ð»ÑзоваÑелÑ. ÐÑблиÑоваÑÑ ÑÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð² локалÑнÑÑ
ÑайлаÑ
ÑопоÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑзоваÑелей Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ ÑеÑвеÑа Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð½ÐµÐ¶ÐµÐ»Ð°ÑелÑно.
ЧÑÐ¾Ð±Ñ Ð¿Ð¾Ð»Ð½Ð¾ÑÑÑÑ Ð¾Ð±Ð¾Ð¹Ñи ÑопоÑÑавление имÑн полÑзоваÑелей и пеÑедаÑÑ Ð¼Ð¾Ð´ÑÐ»Ñ Ð¿ÑовеÑки дополниÑелÑнÑÑ Ð·Ð°Ð´Ð°ÑÑ Ð¿Ð¾ авÑоÑизаÑии подклÑÑений полÑзоваÑелей, HBA можно наÑÑÑоиÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¿Ð°ÑамеÑÑа delegate_ident_mapping. ÐÑи ÑÑом модÑÐ»Ñ Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑ Ð¾Ð±Ð»Ð°ÑÑи дейÑÑÐ²Ð¸Ñ Ñокенов или ÑавнознаÑнÑй меÑод, ÑÑÐ¾Ð±Ñ Ð¾Ð¿ÑеделиÑÑ, ÑазÑеÑено ли полÑзоваÑÐµÐ»Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑаÑÑÑÑ Ð¿Ð¾Ð´ запÑаÑиваемой ÑолÑÑ. ÐденÑиÑикаÑÐ¾Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ð±ÑÐ´ÐµÑ Ð¿Ð¾-пÑÐµÐ¶Ð½ÐµÐ¼Ñ Ð·Ð°Ð¿Ð¸ÑÑваÑÑÑÑ ÑеÑвеÑом, но не бÑÐ´ÐµÑ Ð²Ð»Ð¸ÑÑÑ Ð½Ð° ÑеÑение о пÑодолжении подклÑÑениÑ.
ÐÑи иÑполÑзовании данной ÑÑ ÐµÐ¼Ñ Ð°ÑÑенÑиÑикаÑÐ¸Ñ Ñама по Ñебе ÑвлÑеÑÑÑ Ð½ÐµÐ¾Ð±ÑзаÑелÑной. Ðока модÑÐ»Ñ ÑообÑÐ°ÐµÑ Ð¾Ð± авÑоÑизаÑии подклÑÑениÑ, Ð²Ñ Ð¾Ð´ бÑÐ´ÐµÑ Ð¿Ñодолжен даже пÑи оÑÑÑÑÑÑвии заÑегиÑÑÑиÑованного иденÑиÑикаÑоÑа полÑзоваÑелÑ. ÐÑо позволÑÐµÑ ÑеализоваÑÑ Ð°Ð½Ð¾Ð½Ð¸Ð¼Ð½Ñй доÑÑÑп к базе даннÑÑ Ð¸Ð»Ð¸ доÑÑÑп под пÑевдонимом, пÑи коÑоÑÑÑ ÑÑоÑонний поÑÑавÑик вÑполнÑÐµÑ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼ÑÑ Ð°ÑÑенÑиÑикаÑиÑ, но не пеÑедаÑÑ ÑеÑвеÑÑ Ð¸Ð½ÑоÑмаÑиÑ, иденÑиÑиÑиÑÑÑÑÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑ. ÐекоÑоÑÑе поÑÑавÑики могÑÑ ÑоздаваÑÑ Ð²Ð¼ÐµÑÑо ÑÑого анонимизиÑованнÑй иденÑиÑикаÑионнÑй Ð½Ð¾Ð¼ÐµÑ Ð´Ð»Ñ Ð¿Ð¾ÑледÑÑÑего аÑдиÑа.
ÐелегиÑование ÑопоÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑзоваÑелей обеÑпеÑÐ¸Ð²Ð°ÐµÑ Ð¼Ð°ÐºÑималÑнÑÑ Ð°ÑÑ Ð¸ÑекÑÑÑнÑÑ Ð³Ð¸Ð±ÐºÐ¾ÑÑÑ, но в Ñо же вÑÐµÐ¼Ñ Ð¿ÑевÑаÑÐ°ÐµÑ Ð¼Ð¾Ð´ÑÐ»Ñ Ð¿ÑовеÑки в единÑÑ ÑоÑÐºÑ Ð¾Ñказа Ð´Ð»Ñ Ð°Ð²ÑоÑизаÑии подклÑÑений. ÐÑименÑйÑе ÑÑÐ¾Ñ Ð¿Ð¾Ð´Ñ Ð¾Ð´ Ñ Ð¾ÑÑоÑожноÑÑÑÑ.
[17] «ÐовеÑеннÑм» ÑÑиÑаеÑÑÑ Ñакой ÐºÐ»Ð¸ÐµÐ½Ñ OAuth, коÑоÑÑй конÑÑолиÑÑеÑÑÑ Ñой же оÑганизаÑией, ÑÑо и ÑеÑÐ²ÐµÑ Postgres Pro. СледÑÐµÑ Ð¾ÑмеÑиÑÑ, ÑÑо клиенÑÑкий поÑок авÑоÑизаÑии ÑÑÑÑойÑÑва, поддеÑживаемÑй libpq, не вÑегда ÑооÑвеÑÑÑвÑÐµÑ ÑÑÐ¾Ð¼Ñ ÑÑебованиÑ, поÑколÑÐºÑ Ð¾Ð½ пÑедназнаÑен Ð´Ð»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿ÑблиÑнÑми или недовеÑеннÑми клиенÑами.