• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Mysql

  • Автор темы yerke
  • Дата начала
Y

yerke

привет знатоки MySQL

есть в таблице mySQL такой тригер
PHP:
DELIMITER |
CREATE TRIGGER `tbi_pd_edu_forms` BEFORE INSERT
ON `PD_EDU_FORMS` FOR EACH ROW
BEGIN
SET NEW.IS_DELETED = 0;

SET NEW.CREATED_BY_MYSQL_ACCOUNT = CURRENT_USER();
SET NEW.CREATION_DATETIME = NOW();

SET NEW.LAST_MODIFIED_BY_MYSQL_ACCOUNT = CURRENT_USER();
SET NEW.LAST_MODIFIED_DATETIME = NOW();
END; |
DELIMITER;

захожу в базу под root добавляю запись, потом смотрю на поле CREATED_BY_MYSQL_ACCOUNT, там значение "root@localhos" - все норма

потом захожу в базу по акаунтом yerke, делаю то же самое, но поле CREATED_BY_MYSQL_ACCOUNT ново созданный записи все ровно содержить значение "root@localhost"


так вопрос почему функция CURRENT_USER() всегда возвращает "root@hostname"
 
E

etc

А если просто под акаунтом yerke сделать SELECT CURRENT_USER(); ?
 
E

etc

имелось ввиду, если выполнить тот запрос, то что выдает? вне тригеров, просто так
 
Y

yerke

имелось ввиду, если выполнить тот запрос, то что выдает? вне тригеров, просто так

вне тригеров выдает нормальное знаечние
то есть yerke@localhost под yerke

а тригере root@localhost под yerke

///

просто хотелось дать поработать самой системе
щоб она автоматом фиксировала время и автора записи

а не все эти данные ИНСЕРТИРОВАТЬ в ручную ))




Добавлено: ___________________________
а я понял логику системы

(1) yerke делает инсерт в базу

(2) а система поднимет тригера под root-ом
до того как данные yerke инсертится в базу

(3) тригер перехватыват данные yerke и выполняет свои действия
и делает оканчательный инсерт (в это время тригер уже запущен под рутом и тек юзер тоже рут)

так ли это?
 
E

etc

а если в тригере указать DEFINER = CURRENT_USER
 
Y

yerke

все решил проблему
вместо CURRENT_USER() надо использовать USER()
 
V

vital

Смотрим в ман и видим
CURRENT_USER(), CURRENT_USER The authenticated user name and host name
блаблаблабл
аWithin a stored program or view, CURRENT_USER() returns the account for the user who defined the object (as given by its DEFINER value). For stored procedures and functions and views defined with the SQL SECURITY INVOKER characteristic, CURRENT_USER() returns the object's invoker.
USER() The user name and host name provided by the client
Разницу сами, вы уже вроде как поняли.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!