在MySQL触发器中,如何获取发送请求的用户信息?
问题描述:
我在MySQL 5.5上,有一个触发器,我想检查用户是否可以请求。这只是一个例子,我该如何处理这样的代码?在MySQL触发器中,如何获取发送请求的用户信息?
-- 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的商店user
和host
值与UTF8- BIN归类后,降低他们和USER()
返回时没有降低。
例如,USER()
返回[email protected]
当MySQL的已存储gqyy
和mytinnyhost-pc.local
当使用SUBSTRING_INDEX()
一个LOWER()
内侧的USER()
存储在用户定义的变量返回一个问题described here(Bug #60166)产生
例如:
mysql> SET @user_at_host = '[email protected]';
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)