• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

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
Разницу сами, вы уже вроде как поняли.
 
Мы в соцсетях:

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