You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在远程服务器的MySQL触发器中不依赖主机名校验当前用户

解决MySQL触发器中忽略主机名校验用户名的问题

要摆脱对主机名的依赖,只校验登录用户名的部分,可以用MySQL的SUBSTRING_INDEX()函数提取CURRENT_USER()返回值中的用户名部分,该函数能以指定字符为分隔符截取字符串的前半段。

修改后的触发器代码

create definer = mysqldev@localhost trigger trigger_update
    after update
    on products
    for each row
BEGIN
    DECLARE newStatus varchar(1);
    DECLARE currentUsername varchar(50); -- 新增变量存储纯用户名

    SET newStatus = NEW.status;
    -- 提取@符号前的纯用户名,不受后面主机名影响
    SET currentUsername = SUBSTRING_INDEX(CURRENT_USER(), '@', 1);

    IF newStatus = 'D' THEN -- 仅superadmin可编辑已完成任务
        IF (currentUsername != 'superadmin') THEN
            SIGNAL SQLSTATE '45000'
                SET MESSAGE_TEXT = 'Only superadmin can edit completed task !';
        END IF;
    END IF;
END;

原理说明

CURRENT_USER()返回格式固定为用户名@主机名,SUBSTRING_INDEX(CURRENT_USER(), '@', 1)会截取@符号之前的所有内容,得到纯用户名。不管远程服务器的主机名是localhost还是其他任意值,都能准确获取到登录的用户名,彻底避免了主机名变化带来的校验失效问题。

内容的提问来源于stack exchange,提问作者mstdmstd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 23:25:02