2011-02-02 3 views
3

私はトリガを使用してMySQL 5.5を使用しています。ユーザがリクエストを行うことができるかどうかを確認したいと思います。それはちょうど例です、私はこのようなコードでどうすればいいですか?MySQL Triggerでは、リクエストを送信しているユーザーの情報を取得する方法は?

USER()

[EDIT]

警告:UTF8-とで

MySQLの店舗userhost

-- 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

[OK]を、私は解決策を見つけましたBIN照合、それらを降下させた後USER()下降することなく戻ります。

MySQLはgqyymytinnyhost-pc.local

に格納されたときに、ユーザー定義変数に格納されているUSER()のリターンとLOWER()内部SUBSTRING_INDEX()を使用する場合、例えば、USER()リターン[email protected]問題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) 
関連する問題