| Bug #24158 | SET PASSWORD in binary log fails under ANSI_QUOTES | ||
|---|---|---|---|
| Submitted: | 10 Nov 2006 0:22 | Modified: | 7 Feb 2007 11:50 |
| Reporter: | Kolbe Kegel | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | MySQL Server: Replication | Severity: | S2 (Serious) |
| Version: | 5.0.28, 5.1 | OS: | Linux (Linux) |
| Assigned to: | Alexander Barkov | CPU Architecture: | Any |
[28 Nov 2006 6:09]
Alexander Barkov
Versions 4.1 and 5.1 are affected as well.
[28 Nov 2006 12:36]
Alexander Barkov
Won't fix in 4.1, only 5.0 and higher will be fixed.
[30 Nov 2006 7:07]
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/16186 ChangeSet@1.2310, 2006-11-30 11:08:23+04:00, bar@mysql.com +3 -0 Bug#24158 SET PASSWORD in binary log fails under ANSI_QUOTES Problem: ``SET PASSWORD FOR foo@localhost'' was written into binary log using double quites: ``SET PASSWORD FOR "foo"@"localhost"...''. If sql_mode was set to ANSI_QUOTES, parser on slave considered "foo" and "localhost" as identifiers instead of strigns constants, so it failed to parse, generated syntax error and slave then stopped. Fix: changing binary log entries to use single quotes: ``SET PASSWORD FOR 'foo'@'localhost'...'' not to depend on ANSI_QUOTES.
[8 Dec 2006 12:18]
Alexander Barkov
Pushed into 5.0.32-rpl Pushed into 5.1.14-rpl
[18 Jan 2007 15:30]
Lars Thalmann
Pushed into 5.0.36, 5.1.15
[7 Feb 2007 11:50]
MC Brown
A note has been added to the 5.1.15 and 5.0.36 changelogs.

Description: The arguments of the SET PASSWORD statement are written to the binary log using double-quotes. The resulting statement cannot be replicated when the ANSI_QUOTES SQL Mode is enabled. How to repeat: SET PASSWORD = password('test'); # mysqlbinlog ./data/*bin.0* | grep 'SET PASSWORD' | tail -n 1 SET sql_mode = ''; SHOW VARIABLES LIKE 'sql_mode'; SET PASSWORD FOR "root"@"localhost"="*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29"; SET sql_mode = 'ANSI_QUOTES'; SHOW VARIABLES LIKE 'sql_mode'; SET PASSWORD FOR "root"@"localhost"="*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29"; mysql 5.0.28-enterprise-gpl-log (root) [test]> SET PASSWORD FOR "root"@"localhost"="*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29"; Query OK, 0 rows affected (0.00 sec) mysql 5.0.28-enterprise-gpl-log (root) [test]> SET sql_mode = 'ANSI_QUOTES'; Query OK, 0 rows affected (0.00 sec) mysql 5.0.28-enterprise-gpl-log (root) [test]> SHOW VARIABLES LIKE 'sql_mode'; +---------------+-------------+ | Variable_name | Value | +---------------+-------------+ | sql_mode | ANSI_QUOTES | +---------------+-------------+ 1 row in set (0.00 sec) mysql 5.0.28-enterprise-gpl-log (root) [test]> SET PASSWORD FOR "root"@"localhost"="*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29"; 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 '*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29"' at line 1 Suggested fix: All strings written to the binary log should be quoted using single-quotes.