1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-30 16:24:05 +03:00

Merge branch '10.3' into 10.4

This commit is contained in:
Oleksandr Byelkin
2020-12-25 09:13:28 +01:00
112 changed files with 1838 additions and 1257 deletions

View File

@ -6231,6 +6231,7 @@ find_field_in_table_ref(THD *thd, TABLE_LIST *table_list,
#ifndef NO_EMBEDDED_ACCESS_CHECKS
/* Check if there are sufficient access rights to the found field. */
if (check_privileges &&
!table_list->is_derived() &&
check_column_grant_in_table_ref(thd, *actual_table, name, length, fld))
fld= WRONG_GRANT;
else
@ -8092,36 +8093,23 @@ insert_fields(THD *thd, Name_resolution_context *context, const char *db_name,
#ifndef NO_EMBEDDED_ACCESS_CHECKS
/*
Ensure that we have access rights to all fields to be inserted. Under
some circumstances, this check may be skipped.
Ensure that we have access rights to all fields to be inserted
the table 'tables'. Under some circumstances, this check may be skipped.
- If any_privileges is true, skip the check.
The check is skipped in the following cases:
- If the SELECT privilege has been found as fulfilled already for both
the TABLE and TABLE_LIST objects (and both of these exist, of
course), the check is skipped.
- any_privileges is true
- If the SELECT privilege has been found fulfilled for the TABLE object
and the TABLE_LIST represents a derived table other than a view (see
below), the check is skipped.
- the table is a derived table
- If the TABLE_LIST object represents a view, we may skip checking if
the SELECT privilege has been found fulfilled for it, regardless of
the TABLE object.
- the table is a view with SELECT privilege
- If there is no TABLE object, the test is skipped if either
* the TABLE_LIST does not represent a view, or
* the SELECT privilege has been found fulfilled.
A TABLE_LIST that is not a view may be a subquery, an
information_schema table, or a nested table reference. See the comment
for TABLE_LIST.
- the table is a base table with SELECT privilege
*/
if (!((table && tables->is_non_derived() &&
(table->grant.privilege & SELECT_ACL)) ||
((!tables->is_non_derived() &&
(tables->grant.privilege & SELECT_ACL)))) &&
!any_privileges)
if (!any_privileges &&
!tables->is_derived() &&
!(tables->is_view() && (tables->grant.privilege & SELECT_ACL)) &&
!(table && (table->grant.privilege & SELECT_ACL)))
{
field_iterator.set(tables);
if (check_grant_all_columns(thd, SELECT_ACL, &field_iterator))