2011-02-02 5 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()

[EDIT]

경고 : UTF8-와의

MySQL의 저장소 userhost 값 BIN 데이터 정렬을 낮추고 나서 USER() 낮추지 않고 돌아옵니다. 만약 사용자 정의 변수 저장 USER()의 복귀와 LOWER() 내부 SUBSTRING_INDEX() 사용할 때 MySQL이 gqyymytinnyhost-pc.local를 저장 한 예를 들면

, USER()[email protected]

문제 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) 
,
관련 문제