在MySQL触发器中获取CURRENT_USER会返回不正确的值

时间:2017-08-31 10:36:47

标签: mysql database

我有一个旧应用程序(没有可用的源代码)连接到高效的MySQL数据库。由于业务原因,我们必须限制对数据库的访问。出于这个原因,我编写了一个MySQL Trigger,它将限制基于ID访问数据库的用户。

用户通过具有自己的ID和私人密码的应用程序对数据库进行身份验证。

触发器内出现的问题是我有一个SELECT...WHERE子句,WHERE子句等于:SUBSTRING_INDEX(CURRENT_USER(), @, 1)

基本上每次用户在应用程序中对某个数据库/表进行点击时,我想捕获该用户(它也显示在MySQL服务器的进程中)并基于捕获执行{ {1}}语句,它将返回给定用户的唯一ID。根据该ID,将执行SELECT检查,并且将授予或撤销对保存数据的访问权。

问题是,即使我使用User X登录应用程序,MySQL的IF功能也会以某种方式捕获我的域用户,无论我做什么。它应该捕获执行该触发器的域用户。

完全触发:

CURRENT_USER()

我的同事使用他的PC /用户名通过应用程序登录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; 我的用户名被写入。不应该OUTFILE抓住他的用户名吗?

MySQL数据库的版本是:CURRENT_USER()。 我还尝试将5.1.19-beta-community-nt-debug触发器属性留空,仍然只捕获我的用户名并将其写入文件。

1 个答案:

答案 0 :(得分:9)

与wchiquto建议一样,请使用CURRENT_USER()而不是{{1}}。

在sp中,{{1}}显示了sp定义的名称。