3

我在 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$$
4

1 回答 1

4

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

用户()

[编辑]

警告:

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

例如,当USER()MySQLgqyy@MyTinnyHost-PC.local存储gqyymytinnyhost-pc.local

当您使用内部 a并返回存储在用户定义的变量中时,会出现此处描述的问题(错误 #60166 )SUBSTRING_INDEX()LOWER()USER()

例如:

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)
于 2011-02-02T09:53:41.847 回答