Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
Как сделать проверку прав доступа на выполнение триггеров и процедур, а также проверку наличия самих триггеров и процедур? Те. скажем если триггер или процедура есть, то не добавляю ее
Неактивен
Боги MySQL, явите мне свои знания, пожалуйста.
Неактивен
1. на выполнение триггеров отдельных прав нет, если есть права на изменение данных, то триггеры автоматически будут выполняться
на выполнение процедуры - EXECUTE
2. https://dev.mysql.com/doc/mysql/en/routines-table.html
Неактивен
проверка прав - show grants
Неактивен
Спасибо большое, а как проверить есть триггер или процедура или нету. Чтобы ошибку не выдало и не выбило во время выполнения?
Еще такой вопрос работаю через heidiSQL и смотрю те же триггеры прописываются в таблице information_schema и отдельно вижу их с своей таблице. Может это ссылка на нее я не знаю. Но скажем если пользователь очистил таблицу, не выйдет так, что триггер не будет создаваться удаляться или работать, из-за того, что он частично удален.
Неактивен
platedz написал:
Спасибо большое, а как проверить есть триггер или процедура или нету. Чтобы ошибку не выдало и не выбило во время выполнения?
проверка существования через information_schema
platedz написал:
если пользователь очистил таблицу, не выйдет так, что триггер не будет создаваться удаляться или работать, из-за того, что он частично удален.
нет, очистка таблицы не может частично удалить триггер
Неактивен
А к information_schema у пользователя же тоже может не быть доступа?
Неактивен
Подскажите, а как создать триггер в хранимой процедуре?
Неактивен
platedz написал:
А к information_schema у пользователя же тоже может не быть доступа?
ёмнип, нет.
она доступна всегда
platedz написал:
Подскажите, а как создать триггер в хранимой процедуре?
crete trigger ...
с использованием prepare, см https://webew.ru/articles/178.webew
Неактивен
Спасибо огромное. Попробую
Неактивен
Что-то не выходит, даже вне процедуры
SET @var = concat('DELIMITER | DROP TRIGGER IF EXISTS `trig`; CREATE TRIGGER `trig` BEFORE INSERT ON `table` FOR EACH ROW BEGIN IF (select count(*) from `table`)>99 THEN SIGNAL SQLSTATE \'45000\';END IF;END|');
PREPARE zxc FROM @var;
EXECUTE zxc;
Хотя так работает
DELIMITER | DROP TRIGGER IF EXISTS `trig`; CREATE TRIGGER `trig` BEFORE INSERT ON `table` FOR EACH ROW BEGIN IF (select count(*) from `table`)>99 THEN SIGNAL SQLSTATE '45000';END IF;END|
Подскажите, пожалуйста. В чем беда?
Неактивен
был не прав, оказывается триггер нельзя создать внутри процедуры
Error Code: 1303. Can't create a TRIGGER from within another stored routine
Неактивен
Так он и без процедуры не создается. Даже просто через PREPARE. Пишет ошибка синтаксиса
Неактивен
потому что DELIMITER внутри PREPARE нельзя
Неактивен
Ясно и на том спасибо. Т.е. триггер в процедуре никак создать не получится.
Неактивен
Страниц: 1