2011-02-02 3 views
3

Я нахожусь на MySQL 5.5 с триггером, и я хочу проверить, может ли пользователь выполнить свой запрос. Это всего лишь пример, как я могу это сделать с таким кодом?В MySQL Trigger, как получить информацию о пользователе, отправляющем запрос?

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

Предупреждение:

MySQL магазин user и host значения в с UTF8- BIN, после их снижения и USER() возврат без опускания.

Например, USER() возвращения [email protected], когда MySQL сохранила gqyy и mytinnyhost-pc.local

проблема described here (Bug #60166) возникает при использовании SUBSTRING_INDEX() внутри LOWER() с возвращением USER() хранящегося в определенном пользователе переменной

Например:

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)