Spec-Zone.ru › MariaDB

Привилегии хранимых процедур

Важно внимательно рассмотреть привилегии, связанные с хранимыми функциями и хранимыми процедурами. Следующее — объяснение их работы.

Создание хранимых процедур

  • Для создания хранимой процедуры требуется привилегия CREATE ROUTINE. Привилегия SUPER необходима, если объявлен DEFINER, который не является учётной записью создателя (см. оператор DEFINER ниже). Привилегия SUPER также необходима, если используется двоичное протоколирование на основе инструкций. Подробнее см. Двоичное протоколирование хранимых процедур.

Изменение хранимых процедур

  • Для внесения изменений в хранимую процедуру или её удаления необходима привилегия ALTER ROUTINE. Создатель процедуры временно получает эту привилегию, если пытается изменить или удалить созданную им процедуру, если переменная automatic_sp_privileges не установлена в 0 (по умолчанию она равна 1).
  • Привилегия SUPER также необходима, если используется двоичное протоколирование на основе инструкций. Подробнее см. Двоичное протоколирование хранимых процедур.

Выполнение хранимых процедур

  • Для выполнения хранимой процедуры требуется привилегия EXECUTE. Эта привилегия также временно предоставляется создателю, если он пытается выполнить свою процедуру, если переменная automatic_sp_privileges не установлена в 0.
  • SQL SECURITY clause (по умолчанию DEFINER) определяет, какие привилегии используются при вызове процедуры. Если SQL SECURITY равно INVOKER, тело функции будет оцениваться с привилегиями пользователя, вызвавшего функцию. Если SQL SECURITY равно DEFINER, тело функции всегда оценивается с привилегиями учётной записи создателя. DEFINER — значение по умолчанию. Таким образом, по умолчанию пользователи, имеющие доступ к базе данных, связанной с хранимой процедурой, также могут выполнить эту процедуру и потенциально выполнить операции, на которые у них обычно нет разрешений.
  • Создателем процедуры является учётная запись, которая выполнила инструкцию CREATE FUNCTION или CREATE PROCEDURE, независимо от того, указан ли DEFINER. По умолчанию создатель — это создатель, если не указано иное.
  • Сервер автоматически изменяет привилегии в таблице mysql.proc по мере необходимости, но не будет проверять ручные изменения.

Оператор DEFINER

Если он опущен, DEFINER рассматривается как учётная запись, которая создала хранимую процедуру или представление. Если учётная запись, создающая процедуру, имеет привилегию SUPER, может быть указана другая учётная запись в качестве DEFINER.

Оператор SQL SECURITY

Этот оператор определяет контекст, в котором будет выполняться хранимая процедура или представление. Он может принимать два значения — DEFINER или INVOKER. DEFINER — это учётная запись, указанная как DEFINER, когда была создана хранимая процедура или представление (см. предыдущий раздел). INVOKER — это учётная запись, вызывающая процедуру или представление.

Например, предположим, что процедура, созданная суперпользователем, указанным как DEFINER, удаляет все записи из таблицы. Если SQL SECURITY=DEFINER, любой, кто выполняет процедуру, независимо от того, имеет ли он привилегии удаления, сможет удалить записи. Если SQL SECURITY = INVOKER, процедура удалит записи только в том случае, если у учётной записи, вызывающей процедуру, есть разрешение на это.

INVOKER обычно менее рискованно, так как пользователь не может выполнить операции, на которые он обычно не имеет права. Однако нередко учётные записи имеют относительно ограниченные разрешения, но им специально предоставляется доступ к процедурам, которые затем вызываются в контексте DEFINER.

Удаление хранимых процедур

Все привилегии, относящиеся к хранимой процедуре, будут удалены при выполнении DROP FUNCTION или DROP ROUTINE. Однако если используется CREATE OR REPLACE FUNCTION или CREATE OR REPLACE PROCEDURE для удаления и замены процедуры, любые привилегии, относящиеся к этой процедуре, не будут удалены.

См. также

  • Изменение DEFINER хранимых процедур MySQL и т. д. - запись на сайте maria.com о том, что нужно сделать после удаления пользователя и необходимости изменения DEFINER для всех баз данных, которые в настоящее время настроены на этого удаленного пользователя.
Содержимое, воспроизводимое на этом сайте, является собственностью соответствующих владельцев, и это содержание не проходит предварительной проверки со стороны MariaDB. Мнения, информация и мнения, выраженные в этом содержании, не обязательно отражают точку зрения MariaDB или любой другой стороны.

© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/stored-routine-privileges/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API