summaryrefslogtreecommitdiff
path: root/sql/sql_update.cc
diff options
context:
space:
mode:
authorevgen@moonbone.local <>2007-05-11 23:19:11 +0400
committerevgen@moonbone.local <>2007-05-11 23:19:11 +0400
commit34f478121f4e0b374c8cb1885bf08ca48ec669c6 (patch)
treec1a6ef79fc28e911c7f4656d693d37ef057e1d61 /sql/sql_update.cc
parentefb13e1bfe9b7e438325e85cae51d1bf9de476ad (diff)
downloadmariadb-git-34f478121f4e0b374c8cb1885bf08ca48ec669c6.tar.gz
Bug#27878: Unchecked privileges on a view referring to a table from another
database. If a user has a right to update anything in the current database then the access was granted and further checks of access rights for underlying tables wasn't done correctly. The check is done before a view is opened and thus no check of access rights for underlying tables can be carried out. This allows a user to update through a view a table from another database for which he hasn't enough rights. Now the mysql_update() and the mysql_test_update() functions are forces re-checking of access rights after a view is opened.
Diffstat (limited to 'sql/sql_update.cc')
-rw-r--r--sql/sql_update.cc5
1 files changed, 3 insertions, 2 deletions
diff --git a/sql/sql_update.cc b/sql/sql_update.cc
index e17c71ae541..222e33345cc 100644
--- a/sql/sql_update.cc
+++ b/sql/sql_update.cc
@@ -173,8 +173,9 @@ int mysql_update(THD *thd,
table->quick_keys.clear_all();
#ifndef NO_EMBEDDED_ACCESS_CHECKS
- /* TABLE_LIST contain right privilages request */
- want_privilege= table_list->grant.want_privilege;
+ /* Force privilege re-checking for views after they have been opened. */
+ want_privilege= (table_list->view ? UPDATE_ACL :
+ table_list->grant.want_privilege);
#endif
if (mysql_prepare_update(thd, table_list, &conds, order_num, order))
DBUG_RETURN(1);