我有一个旧的应用程序(无源代码可用),它连接到一个高效的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