Bug #20570 CURRENT_USER() in a VIEW with SQL SECURITY DEFINER returns invoker name
| Submitted: | 20 Jun 2006 11:25 | Modified: | 2 Aug 2006 18:26 |
|---|---|---|---|
| Reporter: | Tomash Brechko | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | MySQL Server: Views | Severity: | S3 (Non-critical) |
| Version: | 5.0.23 | OS: | Any (any) |
| Assigned to: | Tomash Brechko | CPU Architecture: | Any |
[20 Jun 2006 11:25]
Tomash Brechko
[20 Jun 2006 11:45]
Valeriy Kravchuk
Thank you for a problem report. Verified just as described with 5.0.23-BK on Linux: openxs@suse:~/dbs/5.0> bin/mysql -uroot test; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 to server version: 5.0.23 Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> CREATE SQL SECURITY DEFINER VIEW v1 AS SELECT CURRENT_USER(); Query OK, 0 rows affected (0.00 sec) mysql> create user u1@localhost identified by 'u1'; Query OK, 0 rows affected (0.00 sec) mysql> grant all on test.* to u1; Query OK, 0 rows affected (0.00 sec) mysql> exit Bye openxs@suse:~/dbs/5.0> bin/mysql -uu1 -pu1 test Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3 to server version: 5.0.23 Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> select current_user(); +----------------+ | current_user() | +----------------+ | u1@localhost | +----------------+ 1 row in set (0.00 sec) mysql> select * from v1; +----------------+ | CURRENT_USER() | +----------------+ | u1@localhost | +----------------+ 1 row in set (0.01 sec) It is a bug, because manual clearly states (http://dev.mysql.com/doc/refman/5.0/en/information-functions.html): "As of MySQL 5.0.10, within a stored routine that is defined with the SQL SECURITY DEFINER characteristic, CURRENT_USER() returns the creator of the routine." So, why it is not the same for VIEW with SECURITY DEFINER characteristic? It is inconsistent and, thus, a bug.
[20 Jun 2006 14:44]
Tomash Brechko
It appeared that only CURRENT_USER() is affected, so the bug is renamed.
[21 Jun 2006 11: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/8008
[30 Jun 2006 14:18]
Konstantin Osipov
The approach taken in the patch is approved. There will be another patch that implements the changes proposed by Tomash.
[30 Jun 2006 19:21]
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/8569
[30 Jun 2006 20:40]
Konstantin Osipov
Did a second review.
[2 Jul 2006 10:35]
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/8612
[3 Jul 2006 12:25]
Konstantin Osipov
The final version of the patch is approved.
[2 Aug 2006 14:10]
Konstantin Osipov
Fixed in 5.0.24 and 5.1.12
[2 Aug 2006 18:26]
Paul DuBois
Noted in 5.0.24, 5.1.12 changelogs. In a view defined with SQL SECURITY DEFINER, the CURRENT_USER() function returned the invoker, not the definer.
Portions of this website are copyright © 2001, 2002 The PHP Group
Page generated in 0.043 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.