mirror of
https://github.com/MariaDB/server.git
synced 2025-08-31 22:22:30 +03:00
Reworked the implementation of create role and drop role.
Also fixed issue with drop role not clearing internal memory entry for that role. The issue was due to a condition introduced in handle_grant_data Updated testsuite to also check the possible error conditions.
This commit is contained in:
committed by
Sergei Golubchik
parent
db850c525f
commit
ce4851c3d0
@@ -3728,22 +3728,26 @@ end_with_restore_list:
|
||||
}
|
||||
#ifndef NO_EMBEDDED_ACCESS_CHECKS
|
||||
case SQLCOM_CREATE_USER:
|
||||
case SQLCOM_CREATE_ROLE:
|
||||
{
|
||||
if (check_access(thd, INSERT_ACL, "mysql", NULL, NULL, 1, 1) &&
|
||||
check_global_access(thd,CREATE_USER_ACL))
|
||||
break;
|
||||
/* Conditionally writes to binlog */
|
||||
if (!(res= mysql_create_user(thd, lex->users_list)))
|
||||
if (!(res= mysql_create_user(thd, lex->users_list,
|
||||
lex->sql_command == SQLCOM_CREATE_ROLE)))
|
||||
my_ok(thd);
|
||||
break;
|
||||
}
|
||||
case SQLCOM_DROP_USER:
|
||||
case SQLCOM_DROP_ROLE:
|
||||
{
|
||||
if (check_access(thd, DELETE_ACL, "mysql", NULL, NULL, 1, 1) &&
|
||||
check_global_access(thd,CREATE_USER_ACL))
|
||||
break;
|
||||
/* Conditionally writes to binlog */
|
||||
if (!(res= mysql_drop_user(thd, lex->users_list)))
|
||||
if (!(res= mysql_drop_user(thd, lex->users_list,
|
||||
lex->sql_command == SQLCOM_DROP_ROLE)))
|
||||
my_ok(thd);
|
||||
break;
|
||||
}
|
||||
@@ -3757,26 +3761,6 @@ end_with_restore_list:
|
||||
my_ok(thd);
|
||||
break;
|
||||
}
|
||||
case SQLCOM_CREATE_ROLE:
|
||||
{
|
||||
if (check_access(thd, INSERT_ACL, "mysql", NULL, NULL, 1, 1) &&
|
||||
check_global_access(thd,CREATE_USER_ACL))
|
||||
break;
|
||||
/* Conditionally writes to binlog */
|
||||
if (!(res= mysql_create_role(thd, lex->users_list)))
|
||||
my_ok(thd);
|
||||
break;
|
||||
}
|
||||
case SQLCOM_DROP_ROLE:
|
||||
{
|
||||
if (check_access(thd, DELETE_ACL, "mysql", NULL, NULL, 1, 1) &&
|
||||
check_global_access(thd,CREATE_USER_ACL))
|
||||
break;
|
||||
/* Conditionally writes to binlog */
|
||||
if (!(res= mysql_drop_role(thd, lex->users_list)))
|
||||
my_ok(thd);
|
||||
break;
|
||||
}
|
||||
case SQLCOM_REVOKE_ALL:
|
||||
{
|
||||
if (check_access(thd, UPDATE_ACL, "mysql", NULL, NULL, 1, 1) &&
|
||||
|
Reference in New Issue
Block a user