Mysql

yerke

Well-known member
28.08.2007
392
0
#1
привет знатоки 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
#2
А если просто под акаунтом yerke сделать SELECT CURRENT_USER(); ?
 
E
#4
имелось ввиду, если выполнить тот запрос, то что выдает? вне тригеров, просто так
 

yerke

Well-known member
28.08.2007
392
0
#5
имелось ввиду, если выполнить тот запрос, то что выдает? вне тригеров, просто так
вне тригеров выдает нормальное знаечние
то есть yerke@localhost под yerke

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

///

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

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




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

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

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

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

так ли это?
 

yerke

Well-known member
28.08.2007
392
0
#7
все решил проблему
вместо CURRENT_USER() надо использовать USER()
 

vital

Больной Компом Детектед
29.01.2006
2 432
33
#8
Смотрим в ман и видим
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
Разницу сами, вы уже вроде как поняли.