PostgreSQL Security Definer

установить и настроить PostgreSQL на Ubuntu База данных

В эту продвинутую и автоматизированную эпоху компьютеров и технологий каждый хочет быть в безопасности вместе со своей личной информацией. Точно так же базы данных используются для хранения информации о многих вещах, включая личную информацию о людях. Из-за большого количества информации нам также необходимо позаботиться о безопасности нашей базы данных, чтобы никто не мог использовать ее неправильно. В базе данных PostgreSQL нам приходится использовать множество встроенных баз данных для извлечения некоторых записей из таблиц и базы данных. Как и многие из этих функций, одной из них является функция определения безопасности. Как следует из названия, это должно быть что-то, связанное с определением безопасности базы данных PostgreSQL. Поскольку эта концепция уникальна, сложна и нова для большинства пользователей PostgreSQL, мы решили рассмотреть ее в рамках совершенно новой статьи. Так,

Security Definer против Security Invoker

Термин определения безопасности относится к некоторым исключительным функциям, используемым для выполнения уникальных и привилегированных задач, касающихся безопасности базы данных в PostgreSQL. Эти задачи настолько официальные и привилегированные, что не каждый пользователь может их выполнить или использовать, если он в целости и сохранности. Это можно использовать как свойство в запросе PostgreSQL при выполнении некоторых транзакций из базы данных PostgreSQL. Когда функция вызывается с привилегиями пользователя, вызвавшего эту функцию, говорят, что это свойство Security Invoker функций. С другой стороны, когда функция вызывается с правами ее реального владельца (кто создал эту функцию), говорят, что это свойство Security Definer функции.

Кто может его использовать?

В большинстве случаев функция определения безопасности может выполняться с правами ее владельца, т. е. владелец функции определения безопасности будет единственным, кто использует ее в части выполнения. С другой стороны, обычные встроенные или определяемые пользователем функции могут выполняться любым пользователем, т. е. общедоступными, если они не указаны в качестве определителей безопасности. Поскольку база данных PostgreSQL всегда соглашается на использование системных баз данных и таблиц локальными и удаленными работодателями PostgreSQL, такое использование может повлиять на выполнение функции определения безопасности, а также нанести ущерб безопасности базы данных. Существует вероятность того, что внешний пользователь может получить возможность управлять или контролировать всю базу данных PostgreSQL и ее таблицы, добавлять поврежденные данные в базу данных, используя те же права, что и владелец функции определения безопасности. Сюда, что посторонний пользователь может выполнять запросы и коды, которые он не должен выполнять. При использовании этого свойства в запросе PostgreSQL мы позволяем пользователям выполнять функции, выполняемые с правами пользователя, который их создал, и не будем использовать права пользователя, который их вызывал. Таким образом, нам нужно быть более осторожными, чем раньше, при использовании базы данных после использования Security Definer. Давайте теперь посмотрим на некоторые примеры.

Читайте также:  Установка MariaDB в Ubuntu 20.04

Пример 1

Давайте рассмотрим простой пример создания функции со свойством определителя безопасности. Мы постараемся сделать нашу функцию максимально безопасной, но при этом используем в ней функцию определения безопасности. Итак, мы начали с входа в базу данных PostgreSQL с графическим интерфейсом pgAdmin. См. вкладку «Функции» в вашей конкретной базе данных. Щелкните его правой кнопкой мыши, наведите курсор на опцию «Создать» и выберите «Функция».

ссмотрим простой пример создания функции со св

Откроется экран под названием Create-Function. Добавьте имя функции как «безопасная», выберите ее владельца и схему. Поскольку эта функция будет определять безопасность, она будет выполняться только с правами пользователя «aqsayasin».

тся экран под названием Create-Functio

В разделе «Определение» добавьте тип возвращаемого значения, язык и тип данных аргумента, который будет передан в функцию.

добавьте тип возвращаемого значения, язык

В области кода напишите простой код. Как вы можете видеть, мы не используем здесь никакую таблицу, поэтому она кажется безвредной, когда дело доходит до ее выполнения.

области «Параметры» включите «Безопасность определителя»

В области «Параметры» включите «Безопасность определителя», чтобы включить свойство определителя безопасности.

В области «Параметры» включите «Безопасность опреде

В разделе SQL вы получите весь запрос для создания новой функции со свойством Security Definer. Владельцем этой функции будет пользователь «aqsayasin».

еле SQL вы получите весь запрос для создания новой функции

После выполнения инструкции SELECT для вызова безобидной функции, передав ей значение 15, мы получили значение 25 на выходе. Хотя это выглядит целым и невредимым, использование общедоступной схемы позволит внешним присоединяющимся/пользователям создавать новые объекты и иметь доступ к этой функции.

ыполнения инструкции SELECT для вызова безобидно

Чтобы получить информацию о вновь созданной функции определения безопасности «Безвредная», нам нужно использовать инструкцию SELECT, показанную ниже, в области запроса pgAdmin 4. Столбец «proname» показывает имя функции, т. е. безвредная, «nspname » показывает имя схемы, т. е. public, а столбец «usname» принадлежит владельцу этой функции, т. е. «aqsayasin». Вот как мы получаем информацию о функции определителя безопасности.

данной функции определения безопасности «Безвредная»

Пример 2

Функция определения безопасности также может использоваться для создания процедуры конкретным пользователем. Давайте создадим новую процедуру «sec_def», используя в ней свойство определителя безопасности. Эта процедура используется для получения значений из таблицы «Ftest» с «общедоступной» схемой. Вы должны знать, что таблица «Ftest» была сохранена в базе данных «aqsayasin», а ее владельцем является пользователь «aqsayasin».

Читайте также:  Как выполнить групповую сортировку MongoDB?

Функция определения безопасности также может использоваться д

Теперь вам нужно войти в систему из терминала оболочки PostgreSQL, чтобы добавить несколько простых команд. Итак, сначала мы вошли в базу данных «aqsayasin». После этого мы попытались соединить базу данных «aqsayasin» с пользователем «outsider» с помощью команды «\c» вместе с именем базы данных и подключаемым пользователем. Пользователь «аутсайдер» подключается к базе данных «aqsayasin».

войти в систему из терминала

Теперь пришло время вызвать процедуру «sec_def()» с помощью встроенной функции call() в оболочке терминала. Он выдаст исключение, показывающее, что «public.Ftest» не существует для нашего постороннего пользователя. Это связано с тем, что процедура создана с правами пользователя «aqsayasin», а пользователь «outsider» таких прав не имеет.

ь пришло время вызвать процедур

Если вы хотите избежать сбоев в работе базы данных PostgreSQL со стороны посторонних и ненадежных пользователей, возможно, вам придется ограничить или запретить право «записи» для этих пользователей на вставку записей в вашу базу данных в параметре «search_path». Таким образом, внешние пользователи не смогут создавать неисправные объекты для манипулирования вашей системой баз данных, ее данными и правами. Вы можете использовать временную схему «pg_temp» в конце поиска для безопасного управления в «search_path» в запросе.

Заключение

Использование свойства Security Definer в функциях для выполнения какой-либо специальной задачи — довольно мощная техника, но также и очень рискованная. Чтобы наши пользователи поняли концепцию определителя безопасности, мы попытались создать функцию и процедуру, имеющие функцию определителя безопасности в качестве свойства. Мы видели, как возникает ошибка, когда пользователь без прав владельца «определителя безопасности» пытается вызвать функцию или процедуру. Подводя итог, мы обычно предпочитаем не использовать его часто в базе данных, поскольку он может не сохраняться для базы данных PostgreSQL.

Оцените статью
bestprogrammer.ru
Добавить комментарий

Adblock
detector