在 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 排序规则将 user
和 host
值存储在降低它们之后,USER()
返回而不降低它们。
例如,当 MySQL 存储了 gqyy
和 mytinnyhost-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 触发器中,如何获取有关发送请求的用户的信息?的主要内容,如果未能解决你的问题,请参考以下文章