Mysql
MySQL 8.0 觸發 Current_User 不工作
我有這個向表中插入一行的觸發器
CREATE DEFINER=`root`@`localhost` TRIGGER `user_log_AFTER_INSERT` AFTER INSERT ON `user_log` FOR EACH ROW BEGIN INSERT INTO audit_trail values( aud_no, ( SELECT user_acc_id from user_accounts where user_username = REPLACE( CURRENT_USER, '@localhost', '')), ( SELECT user_fname from user where user_id = ( SELECT user_acc_id from user_accounts where user_username = REPLACE( current_user(), '@localhost', ''))), current_date(), current_time(), "logs in and out"); END
我的問題是它
CURRENT_USER
不起作用,當我嘗試使用另一個帳戶時,它沒有插入正確的使用者帳戶。它的作用是,它使用帳戶root@localhost
而不是我的CURRENT_USER
.到目前為止,我已經嘗試更改
CREATE DEFINER=
root@
localhost``而不是 root 我使用不同的帳戶並且它可以工作。但我想要的是使其動態化,它必須插入對數據庫進行更改的 current_user notroot@localhost
。謝謝
current_user()
由於我無法使用並且在觸發器內獲得正確的使用者,user()
但在Stored Procedure
. 我所做的是創建一個Stored Procedure
並在觸發器中呼叫它。儲存過程
CREATE DEFINER=`root`@`localhost` PROCEDURE `insert_log`() BEGIN INSERT INTO audit_trail values( aud_no, ( SELECT user_acc_id from user_accounts where user_username = REPLACE( user(), '@localhost', '')), ( SELECT user_fname from user where user_id = ( SELECT user_acc_id from user_accounts where user_username = REPLACE( user(), '@localhost', ''))), current_date(), current_time(), "logs in and out"); END
扳機
CREATE DEFINER=`root`@`localhost` TRIGGER `user_log_AFTER_INSERT` AFTER INSERT ON `user_log` FOR EACH ROW BEGIN CALL insert_log(); END