我有一箇舊的應用程序(無源代碼可用),它連接到一個高效的MySQL數據庫。由於商業原因,我們必須限制對數據庫的訪問。由於這個原因,我寫了一個MySQL觸發器,它會根據ID限制有權訪問數據庫的用戶。在MySQL中獲取CURRENT_USER觸發返回不正確的值
用戶通過應用程序使用自己的ID和他們的私人密碼對數據庫進行身份驗證。
這個問題似乎觸發內部被我有一個SELECT...WHERE
子句和WHERE
條款等於:一擊是在某個數據庫/表用戶在我想申請做SUBSTRING_INDEX(CURRENT_USER(), @, 1)
基本上每次捕獲該用戶(也顯示在MySQL服務器的進程中),並基於捕獲執行一個SELECT
語句,該語句將返回該給定用戶的唯一標識。根據該ID a IF
檢查將被執行,保存數據的訪問權將被授予或撤銷。
問題是,即使我使用用戶X登錄應用程序,MySQL的CURRENT_USER()
函數以某種方式捕獲我的域用戶,不管我做什麼。它應該捕獲執行該觸發器的域用戶。
全部觸發:
DROP TRIGGER dbname.disable_order_insert_trigger;
DELIMITER $
use dbname$
CREATE TRIGGER disable_order_insert_trigger BEFORE INSERT ON
dbname.dbtable
FOR EACH ROW
BEGIN
DECLARE compCode INT unsigned DEFAULT 0;
SET @compCode = 1;
SELECT COMPCODE
INTO @compCode
FROM dbname.user_info_table
WHERE dbname.user_info_table.USERID = SUBSTRING_INDEX(CURRENT_USER(), "@", 1)
AND dbname.user_info_table.COMPCODE = 1172 LIMIT 1;
SELECT CURRENT_USER() INTO OUTFILE 'C:\\temp\\compCode.txt';
IF @compCode = 1172 THEN
CALL something;
END IF;
END;
$
DELIMITER ;
SHOW TRIGGERS;
我的同事登錄到MySQL數據庫通過應用程序中使用他在OUTFILE
我的用戶名被寫入PC /用戶名和仍在。 CURRENT_USER()
不應該捕獲他的用戶名?
MySQL數據庫的版本是:5.1.19-beta-community-nt-debug
。 我也嘗試將Definer
觸發器屬性留空,仍然只有我的用戶名被捕獲並寫入文件。
你使用什麼樣的應用程序編程語言和DBMS訪問包? (例如,php/mysqli,java/connector.j,c#/ connector.net)。什麼是您的*應用程序*所使用的連接字符串或證書,而不是您的*應用程序的用戶*來訪問您的數據庫? –
@ O.Jones,它可能是一個帶有一些非常老的本地連接器的VB6傳統應用程序。我們沒有可用的源代碼。 – darksleep
請嘗試:[USER()](https://dev.mysql.com/doc/refman/5.7/en/information-functions.html#function_user)功能。 – wchiquito