我有一个旧应用程序(没有可用的源代码)连接到高效的MySQL数据库.由于业务原因,我们必须限制对数据库的访问.出于这个原因,我编写了一个MySQL Trigger,它将限制基于ID访问数据库的用户.
用户通过具有自己的ID和私有密码的应用程序对数据库进行身份验证.
触发器内出现的问题是我有一个SELECT...WHERE子句,该WHERE子句等于:SUBSTRING_INDEX(CURRENT_USER(), @, 1)
基本上每当用户在应用程序中对某个数据库/表进行命中时,我想捕获该用户(这也显示在MySQL服务器的进程中)并基于捕获执行SELECT将返回的语句该给定用户的唯一ID.根据该ID,IF将执行检查,并将授予或撤销对保存数据的访问权限.
问题是,即使我使用User X登录应用程序CURRENT_USER(),MySQL 的功能也会以某种方式捕获我的域用户,无论我做什么.它应该捕获执行该触发器的域用户.
完全触发:
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;
Run Code Online (Sandbox Code Playgroud)
我的同事使用他的PC /用户名通过应用程序登录到MySQL数据库,仍然在OUTFILE我的用户名中写入.不应该CURRENT_USER()捕获他的用户名?
MySQL数据库的版本是:5.1.19-beta-community-nt-debug.我还尝试将Definer触发器属性保留为空,仍然只捕获我的用户名并将其写入文件.