В MySQL Trigger, как получить информацию о пользователе, отправляющем запрос? - PullRequest
3 голосов
/ 02 февраля 2011

Я нахожусь на MySQL 5.5, с триггером, и я хочу проверить, может ли пользователь выполнить его запрос.Это просто пример, как я могу сделать с кодом, подобным этому?

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

1 Ответ

4 голосов
/ 02 февраля 2011

Хорошо, я нашел решение:

USER ()

[EDIT]

Внимание:

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

Например, USER() возвращает gqyy@MyTinnyHost-PC.local, когда MySQL сохранил gqyy и mytinnyhost-pc.local

описанная здесь проблема ( Ошибка # 60166 ) возникает, когда вы используете SUBSTRING_INDEX() внутри LOWER() с возвратом USER(), хранящимся в определяемая пользователем переменная

Например:

mysql> SET @user_at_host = 'gqyy@mytinyhost-PC.local';
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)
...