【问题标题】:In a MySQL Trigger, how to get informations on the user sending the request?在 MySQL 触发器中,如何获取有关发送请求的用户的信息?
【发布时间】: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$$

【问题讨论】:

    标签: mysql sql authentication triggers mysql5


    【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 2013-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-05
      • 1970-01-01
      相关资源
      最近更新 更多