gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 06:32:49 26 4
gpt4 key购买 nike

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

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

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

基本上每次用户在应用程序中对某个数据库/表进行命中时,我都想捕获该用户(它也显示在 MySQL 服务器的进程中)并基于捕获执行 SELECT 语句,它将返回给定用户的唯一 ID。根据该 ID,将执行 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;

我的同事使用他的 PC/用户名通过应用程序登录到 MySQL 数据库,并且仍然在 OUTFILE 中写入了我的用户名。 CURRENT_USER() 不应该获取他的用户名吗?

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

最佳答案

像 wchiquto 建议的那样,使用 USER() 而不是 CURRENT_USER()

在 sp 中,CURRENT_USER() 表示 sp 定义者的名称。

关于mysql - 在 MySQL 触发器中获取 CURRENT_USER 返回不正确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45979390/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com