2011-02-02 104 views
3

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

回答

4

好,我已经找到了解决方案:

USER()

[编辑]

警告:

MySQL的商店userhost值与UTF8- BIN归类后,降低他们和USER()返回时没有降低。

例如,USER()返回[email protected]当MySQL的已存储gqyymytinnyhost-pc.local

当使用SUBSTRING_INDEX()一个LOWER()内侧的USER()存储在用户定义的变量返回一个问题described hereBug #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) 
相关问题