Mysql

MySQL 8.0 觸發 Current_User 不工作

  • October 10, 2018

我有這個向表中插入一行的觸發器

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 not root@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

引用自:https://dba.stackexchange.com/questions/219731