Bug #35924 DEFINER should be stored 'quoted' in I_S

Submitted: 9 Apr 2008 8:39 Modified: 17 Oct 2008 17:24
Reporter: Peter Laursen (Basic Quality Contributor) Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Server: Information schema Severity:S2 (Serious)
Version:5.0.51a OS:Any
Assigned to: Sergei Glukhov CPU Architecture:Any
Tags: qc

[9 Apr 2008 8:39] Peter Laursen
Description:
CREATE
DEFINER = 'aa@@'@'@@bb'
VIEW `test`.`vi` 
AS
SELECT 1;

and

DELIMITER $$
CREATE
    DEFINER = 'aa@@'@'@@bb'
    TRIGGER `test`.`tr2` BEFORE INSERT
    ON `test`.`tab1`
    FOR EACH ROW BEGIN
    -- nothing
    END$$
DELIMITER ;

.. both execute.  In I_S.triggers and I_S.views tables DEFINER is stored as

"aa@@@@@bb"  without quotes.

this is ambigious.  How to tell that it is not 'aa@'@'@@@bb'  or  'aa@@@'@'@bb'

How to repeat:
see above

Suggested fix:
Store in 'user'@'host' format - with quotes.

I am setting this as 'serious' (S2) as it is not possible to generate a generic CREATE TRIGGGER statment from I_S.  And SHOW CREATE TRIGGER is not supported. Also no ALTER TRIGGER.

We want to code a client side ALTER TRIGGER functionality.  This seems impossible to do safe!
[9 Apr 2008 9:15] Valeriy Kravchuk
Thank you for a bug report. Verified just as described:

mysql> CREATE
    -> DEFINER = 'aa@@'@'@@bb'
    -> VIEW `test`.`vi`
    -> AS
    -> SELECT 1;
Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql> show warnings\G
*************************** 1. row ***************************
  Level: Note
   Code: 1449
Message: There is no 'aa@@'@'@@bb' registered
1 row in set (0.01 sec)

mysql> delimiter //
mysql> create table tab1(c1 int)//
Query OK, 0 rows affected (0.09 sec)

mysql> CREATE
    ->     DEFINER = 'aa@@'@'@@bb'
    ->     TRIGGER `test`.`tr2` BEFORE INSERT
    ->     ON `test`.`tab1`
    ->     FOR EACH ROW BEGIN
    ->     -- nothing
    ->     END//
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> show warnings\G
*************************** 1. row ***************************
  Level: Note
   Code: 1449
Message: There is no 'aa@@'@'@@bb' registered
1 row in set (0.00 sec)

mysql> select * from information_schema.triggers where trigger_name='tr2'\G
*************************** 1. row ***************************
           TRIGGER_CATALOG: NULL
            TRIGGER_SCHEMA: test
              TRIGGER_NAME: tr2
        EVENT_MANIPULATION: INSERT
      EVENT_OBJECT_CATALOG: NULL
       EVENT_OBJECT_SCHEMA: test
        EVENT_OBJECT_TABLE: tab1
              ACTION_ORDER: 0
          ACTION_CONDITION: NULL
          ACTION_STATEMENT: BEGIN

    END
        ACTION_ORIENTATION: ROW
             ACTION_TIMING: BEFORE
ACTION_REFERENCE_OLD_TABLE: NULL
ACTION_REFERENCE_NEW_TABLE: NULL
  ACTION_REFERENCE_OLD_ROW: OLD
  ACTION_REFERENCE_NEW_ROW: NEW
                   CREATED: NULL
                  SQL_MODE: STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SU
BSTITUTION
                   DEFINER: aa@@@@@bb
1 row in set, 2 warnings (7.19 sec)

mysql> select * from information_schema.views where table_name='vi'\G
*************************** 1. row ***************************
  TABLE_CATALOG: NULL
   TABLE_SCHEMA: test
     TABLE_NAME: vi
VIEW_DEFINITION:
   CHECK_OPTION: NONE
   IS_UPDATABLE: NO
        DEFINER: aa@@@@@bb
  SECURITY_TYPE: DEFINER
1 row in set, 1 warning (0.00 sec)

mysql> show create view vi\G
*************************** 1. row ***************************
       View: vi
Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`aa@@`@`@@bb` SQL SECURITY DEFIN
ER VIEW `vi` AS select 1 AS `1`
1 row in set, 1 warning (0.02 sec)

mysql> show create trigger tr2\G
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near 'trigg
er tr2' at line 1

So, there is NO workaround for triggers.
[9 Apr 2008 9:18] Peter Laursen
also mysqldump gets fooled here.

CREATE TRIGGER using  DEFINER = 'nithin@@'@'@ss'

MySQL dump dumps as  DEFINER=`nithin@@@`@`ss`

I think that it is 'assumed' that hostname cannot start with @.  Why then let it create?
[21 Apr 2008 10:23] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/45752

ChangeSet@1.2611, 2008-04-21 15:14:58+05:00, gluh@mysql.com +5 -0
  Bug#35924 DEFINER should be stored 'quoted' in I_S
  The '@' symbol can not be used in the host name according to rfc952.
  The fix:
  added function check_host_name(LEX_STRING *str)
  which checks that all symbols in host name string are valid and
  host name length is not more than max host name length(HOSTNAME_LENGTH).
[23 Apr 2008 9:39] Alexander Nozdrin
Review comments sent over the email. Patch is approved with a few changes.
[23 Apr 2008 10:33] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/45878

ChangeSet@1.2611, 2008-04-23 15:25:07+05:00, gluh@mysql.com +5 -0
  Bug#35924 DEFINER should be stored 'quoted' in I_S
  The '@' symbol can not be used in the host name according to rfc952.
  The fix:
  added function check_host_name(LEX_STRING *str)
  which checks that all symbols in host name string are valid and
  host name length is not more than max host name length
  (just moved check_string_length() function from the parser into check_host_name()).
[2 Oct 2008 11:58] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/55067

2694 Sergey Glukhov	2008-10-02
      Bug#35924 DEFINER should be stored 'quoted' in I_S
      The '@' symbol can not be used in the host name according to rfc952.
      The fix:
      added function check_host_name(LEX_STRING *str)
      which checks that all symbols in host name string are valid and
      host name length is not more than max host name length
      (just moved check_string_length() function from the parser into check_host_name()).
[2 Oct 2008 14:16] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/55086

2694 Sergey Glukhov	2008-10-02
      Bug#35924 DEFINER should be stored 'quoted' in I_S
      The '@' symbol can not be used in the host name according to rfc952.
      The fix:
      added function check_host_name(LEX_STRING *str)
      which checks that all symbols in host name string are valid and
      host name length is not more than max host name length
      (just moved check_string_length() function from the parser into check_host_name()).
[9 Oct 2008 17:28] Bugs System
Pushed into 5.0.72  (revid:sergey.glukhov@sun.com-20081002115752-s1coraxbp7gg2z2a) (version source revid:vvaintroub@mysql.com-20081002154837-s9bff7wyoftpkjf3) (pib:4)
[9 Oct 2008 17:43] Bugs System
Pushed into 5.1.30  (revid:sergey.glukhov@sun.com-20081002115752-s1coraxbp7gg2z2a) (version source revid:mats@sun.com-20081008113713-2vxny72m5w1tywoi) (pib:4)
[15 Oct 2008 15:03] Paul DuBois
This is actually pushed to 5.1.29, not 5.1.30.
[16 Oct 2008 14:56] Paul DuBois
Noted in 5.0.72, 5.1.29 changelogs.

Hostname values in SQL statements were not being checked for '@',
which is illegal according to RFC952.

Setting report to NDI pending push into 6.0.x.
[17 Oct 2008 16:46] Bugs System
Pushed into 6.0.8-alpha  (revid:sergey.glukhov@sun.com-20081002115752-s1coraxbp7gg2z2a) (version source revid:sergey.glukhov@sun.com-20081002140357-1fa0k9axkespo07x) (pib:5)
[17 Oct 2008 17:24] Paul DuBois
Noted in 6.0.8 changelog.
[28 Oct 2008 21:06] Bugs System
Pushed into 5.1.29-ndb-6.2.17  (revid:sergey.glukhov@sun.com-20081002115752-s1coraxbp7gg2z2a) (version source revid:tomas.ulin@sun.com-20081028140209-u4emkk1xphi5tkfb) (pib:5)
[28 Oct 2008 22:25] Bugs System
Pushed into 5.1.29-ndb-6.3.19  (revid:sergey.glukhov@sun.com-20081002115752-s1coraxbp7gg2z2a) (version source revid:tomas.ulin@sun.com-20081028194045-0353yg8cvd2c7dd1) (pib:5)
[1 Nov 2008 9:51] Bugs System
Pushed into 5.1.29-ndb-6.4.0  (revid:sergey.glukhov@sun.com-20081002115752-s1coraxbp7gg2z2a) (version source revid:jonas@mysql.com-20081101082305-qx5a1bj0z7i8ueys) (pib:5)

Portions of this website are copyright © 2001, 2002 The PHP Group

Page generated in 0.049 sec. using MySQL 8.4.7-u6-cloud

Timestamp references displayed by the system are UTC.
Content reproduced on this site is the property of the respective copyright holders.
It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.