mirror of
https://github.com/MariaDB/server.git
synced 2025-07-27 18:02:13 +03:00
Bug#27145 EXTRA_ACL troubles
The flag EXTRA_ACL is used in conjugation with our access checks, yet it is not clear what impact this flag has. This is a code clean up which replaces use of EXTRA_ACL with an explicit function parameter. The patch also fixes privilege checks for: - SHOW CREATE TABLE: The new privilege requirement is any privilege on the table-level. - CHECKSUM TABLE: Requires SELECT on the table level. - SHOW CREATE VIEW: Requires SHOW_VIEW and SELECT on the table level (just as the manual claims) - SHOW INDEX: Requires any privilege on any column combination.
This commit is contained in:
@ -1336,7 +1336,7 @@ static int mysql_test_select(Prepared_statement *stmt,
|
||||
ulong privilege= lex->exchange ? SELECT_ACL | FILE_ACL : SELECT_ACL;
|
||||
if (tables)
|
||||
{
|
||||
if (check_table_access(thd, privilege, tables, UINT_MAX, FALSE))
|
||||
if (check_table_access(thd, privilege, tables, FALSE, UINT_MAX, FALSE))
|
||||
goto error;
|
||||
}
|
||||
else if (check_access(thd, privilege, any_db,0,0,0,0))
|
||||
@ -1405,7 +1405,8 @@ static bool mysql_test_do_fields(Prepared_statement *stmt,
|
||||
THD *thd= stmt->thd;
|
||||
|
||||
DBUG_ENTER("mysql_test_do_fields");
|
||||
if (tables && check_table_access(thd, SELECT_ACL, tables, UINT_MAX, FALSE))
|
||||
if (tables && check_table_access(thd, SELECT_ACL, tables, FALSE,
|
||||
UINT_MAX, FALSE))
|
||||
DBUG_RETURN(TRUE);
|
||||
|
||||
if (open_normal_and_derived_tables(thd, tables, 0))
|
||||
@ -1436,8 +1437,9 @@ static bool mysql_test_set_fields(Prepared_statement *stmt,
|
||||
THD *thd= stmt->thd;
|
||||
set_var_base *var;
|
||||
|
||||
if ((tables && check_table_access(thd, SELECT_ACL, tables, UINT_MAX, FALSE))
|
||||
|| open_normal_and_derived_tables(thd, tables, 0))
|
||||
if ((tables && check_table_access(thd, SELECT_ACL, tables, FALSE,
|
||||
UINT_MAX, FALSE)) ||
|
||||
open_normal_and_derived_tables(thd, tables, 0))
|
||||
goto error;
|
||||
|
||||
while ((var= it++))
|
||||
@ -1472,7 +1474,8 @@ static bool mysql_test_call_fields(Prepared_statement *stmt,
|
||||
THD *thd= stmt->thd;
|
||||
Item *item;
|
||||
|
||||
if ((tables && check_table_access(thd, SELECT_ACL, tables, UINT_MAX, FALSE)) ||
|
||||
if ((tables && check_table_access(thd, SELECT_ACL, tables, FALSE,
|
||||
UINT_MAX, FALSE)) ||
|
||||
open_normal_and_derived_tables(thd, tables, 0))
|
||||
goto err;
|
||||
|
||||
|
Reference in New Issue
Block a user