20.5. ÐÑедопÑеделÑннÑе Ñоли #
Ð Postgres Pro имееÑÑÑ Ð½Ð°Ð±Ð¾Ñ Ð¿ÑедопÑеделÑннÑÑ
Ñолей, коÑоÑÑе даÑÑ Ð´Ð¾ÑÑÑп к некоÑоÑÑм ÑаÑÑо воÑÑÑебованнÑм, но не обÑедоÑÑÑпнÑм ÑÑнкÑиÑм и даннÑм. ÐдминиÑÑÑаÑоÑÑ (вклÑÑÐ°Ñ Ñоли Ñ Ð¿Ñавами CREATEROLE) могÑÑ Ð½Ð°Ð·Ð½Ð°ÑаÑÑ (GRANT) ÑÑи Ñоли полÑзоваÑелÑм и/или ÑолÑм в Ñвоей ÑÑеде, Ñаким обÑазом оÑкÑÑÐ²Ð°Ñ ÑÑим полÑзоваÑелÑм доÑÑÑп к Ñказанной ÑÑнкÑионалÑноÑÑи и инÑоÑмаÑии. ÐапÑимеÑ:
GRANT pg_signal_backend TO admin_user;
ÐÑедÑпÑеждение
УпÑавлÑÑÑ ÑленÑÑвом в ÑÑÐ¸Ñ ÑолÑÑ ÑледÑÐµÑ Ð¾ÑмоÑÑиÑелÑно, ÑÑÐ¾Ð±Ñ Ð¾Ð½Ð¸ иÑполÑзовалиÑÑ ÑолÑко по Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ÑÑи и ÑолÑко Ñ Ð¿Ð¾Ð½Ð¸Ð¼Ð°Ð½Ð¸ÐµÐ¼, ÑÑо они оÑкÑÑваÑÑ Ð´Ð¾ÑÑÑп к закÑÑÑой инÑоÑмаÑии.
ÐмеÑÑиеÑÑ Ð¿ÑедопÑеделÑннÑе Ñоли опиÑÐ°Ð½Ñ Ð½Ð¸Ð¶Ðµ. ÐамеÑÑÑе, ÑÑо конкÑеÑнÑе ÑазÑеÑÐµÐ½Ð¸Ñ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ из ÑÐ°ÐºÐ¸Ñ Ñолей в бÑдÑÑем могÑÑ Ð¸Ð·Ð¼ÐµÐ½ÑÑÑÑÑ Ð¿Ð¾ меÑе Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑной ÑÑнкÑионалÑноÑÑи. ÐдминиÑÑÑаÑоÑÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑледиÑÑ Ð·Ð° ÑÑими изменениÑми, пÑоÑмаÑÑÐ¸Ð²Ð°Ñ Ð·Ð°Ð¼ÐµÑÐ°Ð½Ð¸Ñ Ðº вÑпÑÑкам.
pg_checkpoint#pg_checkpointпозволÑÐµÑ Ð²ÑполнÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´ÑCHECKPOINT.pg_create_subscription#pg_create_subscriptionÑазÑеÑÐ°ÐµÑ Ð¿Ð¾Ð»ÑзоваÑелÑм Ñ Ð¿ÑавомCREATEÐ´Ð»Ñ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ Ð²ÑполнÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´ÑCREATE SUBSCRIPTION.pg_database_owner#pg_database_ownerвÑегда Ð¸Ð¼ÐµÐµÑ Ñовно одного неÑвного Ñлена: владелÑÑа ÑекÑÑей Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ . ÐÑой Ñоли нелÑÐ·Ñ Ð½Ð°Ð·Ð½Ð°ÑиÑÑ ÑленÑÑво в дÑÑÐ³Ð¸Ñ ÑолÑÑ , и Ð½Ð¸ÐºÐ°ÐºÐ°Ñ ÑÐ¾Ð»Ñ Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ñленомpg_database_owner. Ðднако, как и лÑÐ±Ð°Ñ Ð´ÑÑÐ³Ð°Ñ ÑолÑ, она Ð¼Ð¾Ð¶ÐµÑ Ð²Ð»Ð°Ð´ÐµÑÑ Ð¾Ð±ÑекÑами и полÑÑаÑÑ Ð¿Ñава доÑÑÑпа. СледоваÑелÑно, пÑава, даннÑе Ñолиpg_database_ownerв базе-Ñаблоне, пÑиобÑеÑÑÑ Ð²Ð»Ð°Ð´ÐµÐ»ÐµÑ ÐºÐ°Ð¶Ð´Ð¾Ð¹ базÑ, Ñозданной из данного Ñаблона. ÐзнаÑалÑно ÑÑа ÑÐ¾Ð»Ñ Ð²Ð»Ð°Ð´ÐµÐµÑ ÑÑ ÐµÐ¼Ð¾Ð¹public, Ñо еÑÑÑ Ð²Ð»Ð°Ð´ÐµÐ»ÐµÑ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ ÑпÑавлÑÐµÑ Ð¸ÑполÑзованием данной ÑÑ ÐµÐ¼Ñ Ð² Ñвоей базе.pg_maintain#pg_maintainпозволÑÐµÑ Ð²ÑполнÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´ÑVACUUM,ANALYZE,CLUSTER,REFRESH MATERIALIZED VIEW,REINDEXиLOCK TABLEÐ´Ð»Ñ Ð²ÑÐµÑ Ð¾ÑноÑений, как бÑдÑо ÑÐ¾Ð»Ñ Ð¸Ð¼ÐµÐµÑ Ð¿ÑаваMAINTAINна ÑÑи обÑекÑÑ.pg_monitorpg_read_all_settingspg_read_all_statspg_stat_scan_tables#ÐÑи Ñоли ÑÐ¾Ð·Ð´Ð°Ð½Ñ Ð´Ð»Ñ Ñого, ÑÑÐ¾Ð±Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸ÑÑÑаÑоÑÑ Ð¼Ð¾Ð³Ð»Ð¸ легко наÑÑÑоиÑÑ ÑÐ¾Ð»Ñ Ð´Ð»Ñ Ð¼Ð¾Ð½Ð¸ÑоÑинга ÑеÑвеÑа ÐÐ. ÐÑи Ñоли наделÑÑÑ ÑÐ²Ð¾Ð¸Ñ Ñленов набоÑом обÑÐ¸Ñ Ð¿Ñав, позволÑÑÑÐ¸Ñ ÑиÑаÑÑ ÑазлиÑнÑе полезнÑе паÑамеÑÑÑ ÐºÐ¾Ð½ÑигÑÑаÑии, ÑÑаÑиÑÑÐ¸ÐºÑ Ð¸ дÑÑгÑÑ ÑиÑÑемнÑÑ Ð¸Ð½ÑоÑмаÑиÑ, ÑÑо обÑÑно доÑÑÑпно ÑолÑко ÑÑпеÑполÑзоваÑелÑм.
pg_monitorпозволÑÐµÑ ÑиÑаÑÑ/вÑполнÑÑÑ ÑазлиÑнÑе пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸ ÑÑнкÑии мониÑоÑинга. ÐÑа ÑÐ¾Ð»Ñ Ð²ÐºÐ»ÑÑена в Ñолиpg_read_all_settings,pg_read_all_statsиpg_stat_scan_tables.pg_read_all_settingsпозволÑÐµÑ ÑиÑаÑÑ Ð²Ñе конÑигÑÑаÑионнÑе пеÑеменнÑе, даже Ñе, ÑÑо обÑÑно Ð²Ð¸Ð´Ð½Ñ ÑолÑко ÑÑпеÑполÑзоваÑелÑм.pg_read_all_statsпозволÑÐµÑ ÑиÑаÑÑ Ð²Ñе пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ pg_stat_* и иÑполÑзоваÑÑ ÑазлиÑнÑе ÑаÑÑиÑениÑ, ÑвÑзаннÑе Ñо ÑÑаÑиÑÑикой, даже Ñе, ÑÑо обÑÑно Ð²Ð¸Ð´Ð½Ñ ÑолÑко ÑÑпеÑполÑзоваÑелÑм.pg_stat_scan_tablesпозволÑÐµÑ Ð²ÑполнÑÑÑ ÑÑнкÑии мониÑоÑинга, коÑоÑÑе могÑÑ ÑÑÑанавливаÑÑ Ð±Ð»Ð¾ÐºÐ¸ÑовкиACCESS SHAREв ÑаблиÑÐ°Ñ , возможно, на длиÑелÑное вÑÐµÐ¼Ñ (напÑимеÑpgrowlocks(text)в ÑаÑÑиÑении pgrowlocks).pg_read_all_datapg_write_all_data#pg_read_all_dataпозволÑÐµÑ ÑиÑаÑÑ Ð²Ñе даннÑе (ÑаблиÑÑ, пÑедÑÑавлениÑ, поÑледоваÑелÑноÑÑи), как бÑдÑо ÑÐ¾Ð»Ñ Ð¸Ð¼ÐµÐµÑ Ð¿ÑаваSELECTна ÑÑи обÑекÑÑ Ð¸ пÑаваUSAGEна вÑе ÑÑ ÐµÐ¼Ñ. ÐÑа ÑÐ¾Ð»Ñ Ð½Ðµ Ð¾Ð±Ñ Ð¾Ð´Ð¸Ñ Ð¿Ð¾Ð»Ð¸Ñики заÑиÑÑ Ð½Ð° ÑÑовне ÑÑÑок (RLS). ÐÑли иÑполÑзÑеÑÑÑ Ð¿Ð¾Ð»Ð¸Ñика RLS, админиÑÑÑаÑÐ¾Ñ Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð´Ð°ÑÑ Ð°ÑÑибÑÑBYPASSRLSÑленам ÑÑой Ñоли.pg_write_all_dataпозволÑÐµÑ Ð·Ð°Ð¿Ð¸ÑÑваÑÑ Ð²Ñе даннÑе (ÑаблиÑÑ, пÑедÑÑавлениÑ, поÑледоваÑелÑноÑÑи), как бÑдÑо ÑÐ¾Ð»Ñ Ð¸Ð¼ÐµÐµÑ Ð¿ÑаваINSERT,UPDATEиDELETEна ÑÑи обÑекÑÑ Ð¸ пÑаваUSAGEна вÑе ÑÑ ÐµÐ¼Ñ. ÐÑа ÑÐ¾Ð»Ñ Ð½Ðµ Ð¾Ð±Ñ Ð¾Ð´Ð¸Ñ Ð¿Ð¾Ð»Ð¸Ñики заÑиÑÑ Ð½Ð° ÑÑовне ÑÑÑок (RLS). ÐÑли иÑполÑзÑеÑÑÑ Ð¿Ð¾Ð»Ð¸Ñика RLS, админиÑÑÑаÑÐ¾Ñ Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð´Ð°ÑÑ Ð°ÑÑибÑÑBYPASSRLSÑленам ÑÑой Ñоли.pg_read_server_filespg_write_server_filespg_execute_server_program#ÐÑи Ñоли пÑедназнаÑÐµÐ½Ñ Ð´Ð»Ñ Ñого, ÑÑÐ¾Ð±Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸ÑÑÑаÑоÑÑ Ð¼Ð¾Ð³Ð»Ð¸ вÑделиÑÑ Ð´Ð¾Ð²ÐµÑеннÑе, но не имеÑÑие пÑава ÑÑпеÑполÑзоваÑелей Ñоли Ð´Ð»Ñ Ð´Ð¾ÑÑÑпа к Ñайлам и запÑÑка пÑогÑамм на ÑеÑвеÑе ÐÐ Ð¾Ñ Ð¸Ð¼ÐµÐ½Ð¸ полÑзоваÑелÑ, запÑÑкаÑÑего СУÐÐ. Ðни Ð¾Ð±Ñ Ð¾Ð´ÑÑ Ð²Ñе пÑовеÑки ÑазÑеÑений на ÑÑовне Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ , а знаÑиÑ, воÑполÑзовавÑиÑÑ Ð¸Ð¼Ð¸, можно полÑÑиÑÑ Ð¿Ñава ÑÑпеÑполÑзоваÑелÑ. ÐоÑÑÐ¾Ð¼Ñ Ð½Ð°Ð·Ð½Ð°ÑаÑÑ Ð¸Ñ Ð¿Ð¾Ð»ÑзоваÑелÑм ÑледÑÐµÑ Ñо вÑей оÑÑоÑожноÑÑÑÑ.
pg_read_server_filesпозволÑÐµÑ ÑиÑаÑÑ ÑÐ°Ð¹Ð»Ñ Ð² лÑбом меÑÑе Ñайловой ÑиÑÑемÑ, кÑда Ð¸Ð¼ÐµÐµÑ Ð´Ð¾ÑÑÑп СУÐРна ÑеÑвеÑе, вÑполнÑÑCOPYи дÑÑгие ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð¸ ÑÑнкÑии Ð´Ð»Ñ ÑабоÑÑ Ñ Ñайлами.pg_write_server_filesпозволÑÐµÑ Ð·Ð°Ð¿Ð¸ÑÑваÑÑ ÑÐ°Ð¹Ð»Ñ Ð² лÑбом меÑÑе Ñайловой ÑиÑÑемÑ, кÑда Ð¸Ð¼ÐµÐµÑ Ð´Ð¾ÑÑÑп СУÐРна ÑеÑвеÑе, вÑполнÑÑCOPYи дÑÑгие ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð¸ ÑÑнкÑии Ð´Ð»Ñ ÑабоÑÑ Ñ Ñайлами.pg_execute_server_programпозволÑÐµÑ Ð²ÑполнÑÑÑ Ð¿ÑогÑÐ°Ð¼Ð¼Ñ Ð½Ð° ÑеÑвеÑе (Ð¾Ñ Ð¸Ð¼ÐµÐ½Ð¸ полÑзоваÑелÑ, запÑÑкаÑÑего СУÐÐ) Ñак же, как ÑÑо Ð´ÐµÐ»Ð°ÐµÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð°COPYи дÑÑгие ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð¸ ÑÑнкÑии, вÑполнÑÑÑие пÑогÑÐ°Ð¼Ð¼Ñ Ð½Ð° ÑÑоÑоне ÑеÑвеÑа.pg_signal_autovacuum_worker#pg_signal_autovacuum_workerпозволÑÐµÑ Ð¾ÑпÑавлÑÑÑ ÑÐ¸Ð³Ð½Ð°Ð»Ñ ÑабоÑим пÑоÑеÑÑам авÑооÑиÑÑки Ð´Ð»Ñ Ð¾ÑÐ¼ÐµÐ½Ñ ÑекÑÑей оÑиÑÑки ÑаблиÑÑ Ð¸Ð»Ð¸ завеÑÑÐµÐ½Ð¸Ñ ÐµÑ ÑеанÑа. См. ÐодÑаздел 9.28.2.pg_signal_backend#pg_signal_backendпозволÑÐµÑ Ð¾ÑпÑавлÑÑÑ ÑÐ¸Ð³Ð½Ð°Ð»Ñ Ð´ÑÑгим обÑлÑживаÑÑим пÑоÑеÑÑам Ð´Ð»Ñ Ð¾ÑÐ¼ÐµÐ½Ñ Ð·Ð°Ð¿ÑоÑа или завеÑÑÐµÐ½Ð¸Ñ ÑеанÑа. ÐбÑаÑиÑе внимание, ÑÑо ÑÑа ÑÐ¾Ð»Ñ Ð½Ðµ позволÑÐµÑ Ð¾ÑпÑавлÑÑÑ ÑÐ¸Ð³Ð½Ð°Ð»Ñ Ð¿ÑоÑеÑÑам, пÑинадлежаÑим ÑÑпеÑполÑзоваÑелÑм. См. ÐодÑаздел 9.28.2.pg_use_reserved_connections#pg_use_reserved_connectionsпозволÑÐµÑ Ð¸ÑполÑзоваÑÑ ÑлоÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑениÑ, заÑезеÑвиÑованнÑе пÑи помоÑи паÑамеÑÑа reserved_connections.pg_create_tablespace#pg_create_tablespaceпозволÑÐµÑ Ð²ÑполнÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´ÑCREATE TABLESPACEбез пÑав ÑÑпеÑполÑзоваÑелÑ.pg_manage_profiles#pg_manage_profilesпозволÑÐµÑ Ð²ÑполнÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´ÑCREATE PROFILE,ALTER PROFILEиDROP PROFILEбез пÑав ÑÑпеÑполÑзоваÑелÑ.