在 MySQL 触发器中,如何获取有关发送请求的用户的信息?

Posted

技术标签:

【中文标题】在 MySQL 触发器中,如何获取有关发送请求的用户的信息?【英文标题】:In a MySQL Trigger, how to get informations on the user sending the request? 【发布时间】:2011-06-19 20:24:41 【问题描述】:

我在 mysql 5.5 上,有一个触发器,我想检查用户是否可以执行它的请求。这只是一个例子,我该如何处理这样的代码?

-- Trigger DDL Statements
DELIMITER $$

USE `database`$$

CREATE TRIGGER TBI_TEST BEFORE INSERT
ON tb_test FOR EACH ROW
BEGIN
  DECLARE ER_BAD_USER CONDITION FOR SQLSTATE '45000';

  IF NEW.host != HOW TO KNOW THE HOST PART OF THE CURRENT USER? THEN
    SIGNAL ER_BAD_USER 
        SET MESSAGE_TEXT = 'forbidden', MYSQL_ERRNO = 401;
  END IF;
END$$

【问题讨论】:

【参考方案1】:

好的,我找到了解决方案:

USER()

[编辑]

警告:

MySQL 使用 UTF8-BIN 排序规则将 userhost 值存储在降低它们之后,USER() 返回而不降低它们。

例如,当 MySQL 存储了 gqyymytinnyhost-pc.local 时,USER() 返回 gqyy@MyTinnyHost-PC.local

当您在LOWER() 中使用SUBSTRING_INDEX() 并返回存储在用户定义的变量中的USER() 时,会出现问题described here (Bug #60166)

例如:

mysql> SET @user_at_host = 'gqyy@mytinyhost-PC.local';
Query OK, 0 rows affected (0,00 sec)

mysql> SELECT LOWER(SUBSTRING_INDEX(@user_at_host, '@', -1));
+------------------------------------------------+
| LOWER(SUBSTRING_INDEX(@user_at_host, '@', -1)) |
+------------------------------------------------+
| mytinyhost-pc. ocal                            |
+------------------------------------------------+
1 row in set (0,00 sec)

【讨论】:

以上是关于在 MySQL 触发器中,如何获取有关发送请求的用户的信息?的主要内容,如果未能解决你的问题,请参考以下文章

vue中的ajax请求

如何在同一GET请求中呈现文件并将数据发送到页面

如何在类方法中触发hangfire而不向触发它发送请求

如何获取有关数据库列更改的通知

如果子项从 RTK 查询中的获取请求更新,我如何更新列表中的数据

WordPress - 如何阻止 Gutenberg Block 触发多个 GET 请求?