2011-02-02 102 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) 
相關問題