3

私はトリガーを使用して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$$
4

1 に答える 1

4

わかりました、私は解決策を見つけました:

ユーザー()

[編集]

警告:

MySQL ストアuserhost値は UTF8-BIN 照合で格納され、値を下げた後、値USER()を下げずに戻ります。

たとえば、MySQL が保存されたときにUSER()戻ります。gqyy@MyTinnyHost-PC.localgqyymytinnyhost-pc.local

ここで説明されている問題( Bug #60166 ) は、ユーザー定義変数に格納された戻り値を使用してSUBSTRING_INDEX()内部で aを使用すると発生します。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)
于 2011-02-02T09:53:41.847 に答える