From 420f846a1513ab5285bdaa7cfd3384669321d46b Mon Sep 17 00:00:00 2001 From: Anel Husakovic Date: Tue, 27 Jul 2021 17:37:44 +0200 Subject: MDEV-2287: Create user fails with non-descriptive error message --- mysql-test/r/create_drop_role.result | 2 +- mysql-test/r/create_drop_user.result | 6 ++-- mysql-test/r/grant.result | 6 ++-- mysql-test/r/grant2.result | 4 +-- mysql-test/r/not_embedded_server.result | 34 +++++++++++----------- mysql-test/r/plugin_auth_qa.result | 6 ++-- mysql-test/r/ps.result | 4 +-- .../suite/roles/create_and_drop_current.result | 10 +++---- mysql-test/suite/roles/create_and_drop_role.result | 4 +-- .../suite/roles/prepare_stmt_with_role.result | 2 +- mysql-test/suite/rpl/r/rpl_create_drop_role.result | 2 +- mysql-test/suite/rpl/r/rpl_create_drop_user.result | 2 +- mysql-test/suite/rpl/r/rpl_user.result | 4 +-- sql/sql_acl.cc | 19 ++++++++++-- 14 files changed, 59 insertions(+), 46 deletions(-) diff --git a/mysql-test/r/create_drop_role.result b/mysql-test/r/create_drop_role.result index 886dcfd0e72..ff367eef49d 100644 --- a/mysql-test/r/create_drop_role.result +++ b/mysql-test/r/create_drop_role.result @@ -38,7 +38,7 @@ CREATE OR REPLACE ROLE role_1; CREATE OR REPLACE ROLE IF NOT EXISTS role_1; ERROR HY000: Incorrect usage of OR REPLACE and IF NOT EXISTS CREATE ROLE role_1; -ERROR HY000: Operation CREATE ROLE failed for 'role_1' +ERROR HY000: Operation CREATE ROLE failed for 'role_1',role already exists CREATE USER u1@localhost; REVOKE SHOW DATABASES ON *.* FROM 'u1'@'localhost'; GRANT SHOW DATABASES ON *.* TO role_1; diff --git a/mysql-test/r/create_drop_user.result b/mysql-test/r/create_drop_user.result index dd75d1c257a..bfbf588f11f 100644 --- a/mysql-test/r/create_drop_user.result +++ b/mysql-test/r/create_drop_user.result @@ -25,13 +25,13 @@ DROP USER u1@localhost; ERROR HY000: Operation DROP USER failed for 'u1'@'localhost' CREATE OR REPLACE USER u1@localhost; CREATE USER u1@localhost; -ERROR HY000: Operation CREATE USER failed for 'u1'@'localhost' +ERROR HY000: Operation CREATE USER failed for 'u1'@'localhost',user already exists DROP USER u1@localhost; CREATE USER u1; CREATE USER u1, u2; -ERROR HY000: Operation CREATE USER failed for 'u1'@'%' +ERROR HY000: Operation CREATE USER failed for 'u1'@'%',user already exists CREATE USER u2; -ERROR HY000: Operation CREATE USER failed for 'u2'@'%' +ERROR HY000: Operation CREATE USER failed for 'u2'@'%',user already exists CREATE OR REPLACE USER u1 IDENTIFIED BY PASSWORD 'password', u2; ERROR HY000: Password hash should be a 41-digit hexadecimal number CREATE OR REPLACE USER u1 IDENTIFIED BY PASSWORD 'abcdefghijklmnop', u2; diff --git a/mysql-test/r/grant.result b/mysql-test/r/grant.result index bd24c5bf380..d36f4b582ea 100644 --- a/mysql-test/r/grant.result +++ b/mysql-test/r/grant.result @@ -844,11 +844,11 @@ flush privileges; create user mysqltest_8@''; create user mysqltest_8@host8; create user mysqltest_8@''; -ERROR HY000: Operation CREATE USER failed for 'mysqltest_8'@'%' +ERROR HY000: Operation CREATE USER failed for 'mysqltest_8'@'%',user already exists create user mysqltest_8; -ERROR HY000: Operation CREATE USER failed for 'mysqltest_8'@'%' +ERROR HY000: Operation CREATE USER failed for 'mysqltest_8'@'%',user already exists create user mysqltest_8@host8; -ERROR HY000: Operation CREATE USER failed for 'mysqltest_8'@'host8' +ERROR HY000: Operation CREATE USER failed for 'mysqltest_8'@'host8',user already exists select user, QUOTE(host) from mysql.user where user="mysqltest_8"; user QUOTE(host) mysqltest_8 '%' diff --git a/mysql-test/r/grant2.result b/mysql-test/r/grant2.result index ffb41c1b5f8..6307801ac4d 100644 --- a/mysql-test/r/grant2.result +++ b/mysql-test/r/grant2.result @@ -174,7 +174,7 @@ create table t1(c1 int); create table t2(c1 int, c2 int); create user 'mysqltest_1'; create user 'mysqltest_1'; -ERROR HY000: Operation CREATE USER failed for 'mysqltest_1'@'%' +ERROR HY000: Operation CREATE USER failed for 'mysqltest_1'@'%',user already exists create user 'mysqltest_2' identified by 'Mysqltest-2'; create user 'mysqltest_3' identified by password 'fffffffffffffffffffffffffffffffffffffffff'; grant select on *.* to 'mysqltest_2'; @@ -279,7 +279,7 @@ ERROR HY000: Operation DROP USER failed for 'mysqltest_1'@'%','mysqltest_2'@'%', drop user 'mysqltest_1a', 'mysqltest_2a', 'mysqltest_3a'; create user 'mysqltest_1', 'mysqltest_2', 'mysqltest_3'; create user 'mysqltest_1a', 'mysqltest_2', 'mysqltest_3a'; -ERROR HY000: Operation CREATE USER failed for 'mysqltest_2'@'%' +ERROR HY000: Operation CREATE USER failed for 'mysqltest_2'@'%',user already exists rename user 'mysqltest_1a' to 'mysqltest_1b', 'mysqltest_2a' TO 'mysqltest_2b', 'mysqltest_3a' TO 'mysqltest_3b'; ERROR HY000: Operation RENAME USER failed for 'mysqltest_2a'@'%' drop user 'mysqltest_1', 'mysqltest_2', 'mysqltest_3'; diff --git a/mysql-test/r/not_embedded_server.result b/mysql-test/r/not_embedded_server.result index ba68ca8619b..7c9126a5bcc 100644 --- a/mysql-test/r/not_embedded_server.result +++ b/mysql-test/r/not_embedded_server.result @@ -60,39 +60,39 @@ SET @@sql_mode=''; # USER NAME CONTAINING BACKSLASH IN CREATE USER OPERATION CREATE USER 'user\'s_12601974'@'localhost'; CREATE USER 'user\'s_12601974'@'localhost'; -ERROR HY000: Operation CREATE USER failed for 'user\'s_12601974'@'localhost' +ERROR HY000: Operation CREATE USER failed for 'user\'s_12601974'@'localhost',user already exists DROP USER 'user\'s_12601974'@'localhost'; CREATE USER 'user\"s_12601974'@'localhost'; CREATE USER 'user\"s_12601974'@'localhost'; -ERROR HY000: Operation CREATE USER failed for 'user\"s_12601974'@'localhost' +ERROR HY000: Operation CREATE USER failed for 'user\"s_12601974'@'localhost',user already exists DROP USER 'user\"s_12601974'@'localhost'; CREATE USER 'user\bs_12601974'@'localhost'; CREATE USER 'user\bs_12601974'@'localhost'; -ERROR HY000: Operation CREATE USER failed for 'users_12601974'@'localhost' +ERROR HY000: Operation CREATE USER failed for 'users_12601974'@'localhost',user already exists DROP USER 'user\bs_12601974'@'localhost'; CREATE USER 'user\ns_12601974'@'localhost'; CREATE USER 'user\ns_12601974'@'localhost'; -ERROR HY000: Operation CREATE USER failed for 'user\ns_12601974'@'localhost' +ERROR HY000: Operation CREATE USER failed for 'user\ns_12601974'@'localhost',user already exists DROP USER 'user\ns_12601974'@'localhost'; CREATE USER 'user\rs_12601974'@'localhost'; CREATE USER 'user\rs_12601974'@'localhost'; -ERROR HY000: Operation CREATE USER failed for 'user\rs_12601974'@'localhost' +ERROR HY000: Operation CREATE USER failed for 'user\rs_12601974'@'localhost',user already exists DROP USER 'user\rs_12601974'@'localhost'; CREATE USER 'user\ts_12601974'@'localhost'; CREATE USER 'user\ts_12601974'@'localhost'; -ERROR HY000: Operation CREATE USER failed for 'user s_12601974'@'localhost' +ERROR HY000: Operation CREATE USER failed for 'user s_12601974'@'localhost',user already exists DROP USER 'user\ts_12601974'@'localhost'; CREATE USER 'user\\s_12601974'@'localhost'; CREATE USER 'user\\s_12601974'@'localhost'; -ERROR HY000: Operation CREATE USER failed for 'user\\s_12601974'@'localhost' +ERROR HY000: Operation CREATE USER failed for 'user\\s_12601974'@'localhost',user already exists DROP USER 'user\\s_12601974'@'localhost'; CREATE USER 'user\%s_12601974'@'localhost'; CREATE USER 'user\%s_12601974'@'localhost'; -ERROR HY000: Operation CREATE USER failed for 'user\\%s_12601974'@'localhost' +ERROR HY000: Operation CREATE USER failed for 'user\\%s_12601974'@'localhost',user already exists DROP USER 'user\%s_12601974'@'localhost'; CREATE USER 'user\_s_12601974'@'localhost'; CREATE USER 'user\_s_12601974'@'localhost'; -ERROR HY000: Operation CREATE USER failed for 'user\\_s_12601974'@'localhost' +ERROR HY000: Operation CREATE USER failed for 'user\\_s_12601974'@'localhost',user already exists DROP USER 'user\_s_12601974'@'localhost'; # END OF CASE - USER NAME CONTAINING BACKSLASH IN CREATE USER OPERATION @@ -100,35 +100,35 @@ SET @@sql_mode='NO_BACKSLASH_ESCAPES'; # USER NAME CONTAINING BACKSLASH IN DROP USER OPERATION CREATE USER 'user\"s_12601974'@'localhost'; CREATE USER 'user\"s_12601974'@'localhost'; -ERROR HY000: Operation CREATE USER failed for 'user\"s_12601974'@'localhost' +ERROR HY000: Operation CREATE USER failed for 'user\"s_12601974'@'localhost',user already exists DROP USER 'user\"s_12601974'@'localhost'; CREATE USER 'user\bs_12601974'@'localhost'; CREATE USER 'user\bs_12601974'@'localhost'; -ERROR HY000: Operation CREATE USER failed for 'user\bs_12601974'@'localhost' +ERROR HY000: Operation CREATE USER failed for 'user\bs_12601974'@'localhost',user already exists DROP USER 'user\bs_12601974'@'localhost'; CREATE USER 'user\ns_12601974'@'localhost'; CREATE USER 'user\ns_12601974'@'localhost'; -ERROR HY000: Operation CREATE USER failed for 'user\ns_12601974'@'localhost' +ERROR HY000: Operation CREATE USER failed for 'user\ns_12601974'@'localhost',user already exists DROP USER 'user\ns_12601974'@'localhost'; CREATE USER 'user\rs_12601974'@'localhost'; CREATE USER 'user\rs_12601974'@'localhost'; -ERROR HY000: Operation CREATE USER failed for 'user\rs_12601974'@'localhost' +ERROR HY000: Operation CREATE USER failed for 'user\rs_12601974'@'localhost',user already exists DROP USER 'user\rs_12601974'@'localhost'; CREATE USER 'user\ts_12601974'@'localhost'; CREATE USER 'user\ts_12601974'@'localhost'; -ERROR HY000: Operation CREATE USER failed for 'user\ts_12601974'@'localhost' +ERROR HY000: Operation CREATE USER failed for 'user\ts_12601974'@'localhost',user already exists DROP USER 'user\ts_12601974'@'localhost'; CREATE USER 'user\\s_12601974'@'localhost'; CREATE USER 'user\\s_12601974'@'localhost'; -ERROR HY000: Operation CREATE USER failed for 'user\\s_12601974'@'localhost' +ERROR HY000: Operation CREATE USER failed for 'user\\s_12601974'@'localhost',user already exists DROP USER 'user\\s_12601974'@'localhost'; CREATE USER 'user\%s_12601974'@'localhost'; CREATE USER 'user\%s_12601974'@'localhost'; -ERROR HY000: Operation CREATE USER failed for 'user\%s_12601974'@'localhost' +ERROR HY000: Operation CREATE USER failed for 'user\%s_12601974'@'localhost',user already exists DROP USER 'user\%s_12601974'@'localhost'; CREATE USER 'user\_s_12601974'@'localhost'; CREATE USER 'user\_s_12601974'@'localhost'; -ERROR HY000: Operation CREATE USER failed for 'user\_s_12601974'@'localhost' +ERROR HY000: Operation CREATE USER failed for 'user\_s_12601974'@'localhost',user already exists DROP USER 'user\_s_12601974'@'localhost'; # END OF CASE - USER NAME CONTAINING BACKSLASH IN CREATE USER OPERATION diff --git a/mysql-test/r/plugin_auth_qa.result b/mysql-test/r/plugin_auth_qa.result index 4f274c45971..9f12679b44c 100644 --- a/mysql-test/r/plugin_auth_qa.result +++ b/mysql-test/r/plugin_auth_qa.result @@ -164,9 +164,9 @@ GRANT ALL PRIVILEGES ON test_user_db.* TO plug IDENTIFIED WITH 'test_plugin_serv DROP USER plug; GRANT ALL PRIVILEGES ON test_user_db.* TO plug IDENTIFIED WITH test_plugin_server AS 'plug_dest'; CREATE USER plug IDENTIFIED WITH 'test_plugin_server' AS 'plug_dest'; -ERROR HY000: Operation CREATE USER failed for 'plug'@'%' +ERROR HY000: Operation CREATE USER failed for 'plug'@'%',user already exists CREATE USER plug IDENTIFIED WITH 'test_plugin_server'; -ERROR HY000: Operation CREATE USER failed for 'plug'@'%' +ERROR HY000: Operation CREATE USER failed for 'plug'@'%',user already exists DROP USER plug; CREATE USER plug IDENTIFIED WITH 'test_plugin_server' AS 'plug_dest'; SELECT user,plugin,authentication_string,password FROM mysql.user WHERE user != 'root'; @@ -179,7 +179,7 @@ plug *939AEE68989794C0F408277411C26055CDF41119 DROP USER plug; GRANT ALL PRIVILEGES ON test_user_db.* TO plug IDENTIFIED WITH test_plugin_server AS 'plug_dest'; CREATE USER plug IDENTIFIED BY 'plug_dest_passwd'; -ERROR HY000: Operation CREATE USER failed for 'plug'@'%' +ERROR HY000: Operation CREATE USER failed for 'plug'@'%',user already exists DROP USER plug; CREATE USER plug IDENTIFIED WITH 'test_plugin_server' AS 'plug_dest'; CREATE USER plug_dest IDENTIFIED WITH 'test_plugin_server' AS 'plug_dest'; diff --git a/mysql-test/r/ps.result b/mysql-test/r/ps.result index f1f779ef03f..5c03556826b 100644 --- a/mysql-test/r/ps.result +++ b/mysql-test/r/ps.result @@ -2673,7 +2673,7 @@ call proc_1(); drop user pstest_xyz@localhost; call proc_1(); call proc_1(); -ERROR HY000: Operation CREATE USER failed for 'pstest_xyz'@'localhost' +ERROR HY000: Operation CREATE USER failed for 'pstest_xyz'@'localhost',user already exists drop user pstest_xyz@localhost; call proc_1(); drop user pstest_xyz@localhost; @@ -2689,7 +2689,7 @@ execute abc; drop user pstest_xyz@localhost; execute abc; execute abc; -ERROR HY000: Operation CREATE USER failed for 'pstest_xyz'@'localhost' +ERROR HY000: Operation CREATE USER failed for 'pstest_xyz'@'localhost',user already exists drop user pstest_xyz@localhost; execute abc; drop user pstest_xyz@localhost; diff --git a/mysql-test/suite/roles/create_and_drop_current.result b/mysql-test/suite/roles/create_and_drop_current.result index 7e847677364..0c770ca70c1 100644 --- a/mysql-test/suite/roles/create_and_drop_current.result +++ b/mysql-test/suite/roles/create_and_drop_current.result @@ -1,13 +1,13 @@ create user foo@localhost; grant create user on *.* to foo@localhost; create user current_user; -ERROR HY000: Operation CREATE USER failed for CURRENT_USER +ERROR HY000: Operation CREATE USER failed for CURRENT_USER,user already exists create user current_role; -ERROR HY000: Operation CREATE USER failed for CURRENT_ROLE +ERROR HY000: Operation CREATE USER failed for CURRENT_ROLE,user already exists create role current_user; ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'current_user' at line 1 create role current_role; -ERROR HY000: Operation CREATE ROLE failed for CURRENT_ROLE +ERROR HY000: Operation CREATE ROLE failed for CURRENT_ROLE,role already exists drop user current_user; drop user current_role; ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'current_role' at line 1 @@ -26,9 +26,9 @@ select current_role(); current_role() r1 create user current_role; -ERROR HY000: Operation CREATE USER failed for CURRENT_ROLE +ERROR HY000: Operation CREATE USER failed for CURRENT_ROLE,user already exists create role current_role; -ERROR HY000: Operation CREATE ROLE failed for CURRENT_ROLE +ERROR HY000: Operation CREATE ROLE failed for CURRENT_ROLE,role already exists drop user current_role; ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'current_role' at line 1 drop role current_role; diff --git a/mysql-test/suite/roles/create_and_drop_role.result b/mysql-test/suite/roles/create_and_drop_role.result index b13f6eb4cb8..2ab418ef14b 100644 --- a/mysql-test/suite/roles/create_and_drop_role.result +++ b/mysql-test/suite/roles/create_and_drop_role.result @@ -15,9 +15,9 @@ drop role test_role1; drop role test_role2, test_role3; create role test_role1; create role test_role1; -ERROR HY000: Operation CREATE ROLE failed for 'test_role1' +ERROR HY000: Operation CREATE ROLE failed for 'test_role1',role already exists create role test_role1, test_role2; -ERROR HY000: Operation CREATE ROLE failed for 'test_role1' +ERROR HY000: Operation CREATE ROLE failed for 'test_role1',role already exists select user, host, is_role from user where user like 'test%'; user host is_role test_role1 Y diff --git a/mysql-test/suite/roles/prepare_stmt_with_role.result b/mysql-test/suite/roles/prepare_stmt_with_role.result index b2af23c8fbb..073d4363990 100644 --- a/mysql-test/suite/roles/prepare_stmt_with_role.result +++ b/mysql-test/suite/roles/prepare_stmt_with_role.result @@ -22,7 +22,7 @@ GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION GRANT PROXY ON ''@'%' TO 'root'@'localhost' WITH GRANT OPTION # Test reexecution. EXECUTE stmtCreateRole; -ERROR HY000: Operation CREATE ROLE failed for 'developers' +ERROR HY000: Operation CREATE ROLE failed for 'developers',role already exists # # Now grant the role to the test user. # diff --git a/mysql-test/suite/rpl/r/rpl_create_drop_role.result b/mysql-test/suite/rpl/r/rpl_create_drop_role.result index 7a733614012..b20387369ce 100644 --- a/mysql-test/suite/rpl/r/rpl_create_drop_role.result +++ b/mysql-test/suite/rpl/r/rpl_create_drop_role.result @@ -29,7 +29,7 @@ role_2 role_3 connection master; CREATE ROLE role_2; -ERROR HY000: Operation CREATE ROLE failed for 'role_2' +ERROR HY000: Operation CREATE ROLE failed for 'role_2',role already exists connection slave; SELECT User FROM mysql.user WHERE is_role='Y' ORDER BY User; User diff --git a/mysql-test/suite/rpl/r/rpl_create_drop_user.result b/mysql-test/suite/rpl/r/rpl_create_drop_user.result index f8cc271e8cf..ab8ed10c115 100644 --- a/mysql-test/suite/rpl/r/rpl_create_drop_user.result +++ b/mysql-test/suite/rpl/r/rpl_create_drop_user.result @@ -46,7 +46,7 @@ u1 *A9A5EF53CE2EFAA6F4A746D63A917B2370971A7E u2 connection master; CREATE USER u1@localhost; -ERROR HY000: Operation CREATE USER failed for 'u1'@'localhost' +ERROR HY000: Operation CREATE USER failed for 'u1'@'localhost',user already exists DROP USER u3@localhost; ERROR HY000: Operation DROP USER failed for 'u3'@'localhost' connection slave; diff --git a/mysql-test/suite/rpl/r/rpl_user.result b/mysql-test/suite/rpl/r/rpl_user.result index 2a8bf69501c..488d93fdc6e 100644 --- a/mysql-test/suite/rpl/r/rpl_user.result +++ b/mysql-test/suite/rpl/r/rpl_user.result @@ -11,9 +11,9 @@ set session sql_log_bin=1; connection master; create user 'foo'@'fakehost'; create user 'foo'@'fakehost', 'bar'@'fakehost'; -ERROR HY000: Operation CREATE USER failed for 'foo'@'fakehost' +ERROR HY000: Operation CREATE USER failed for 'foo'@'fakehost',user already exists create user 'foo'@'fakehost', 'bar'@'fakehost'; -ERROR HY000: Operation CREATE USER failed for 'foo'@'fakehost','bar'@'fakehost' +ERROR HY000: Operation CREATE USER failed for 'foo'@'fakehost','bar'@'fakehost',user already exists connection slave; select Host,User from mysql.user where Host='fakehost'; Host User diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc index 89fecc92e9b..c7966c0caa9 100644 --- a/sql/sql_acl.cc +++ b/sql/sql_acl.cc @@ -10353,6 +10353,9 @@ bool mysql_create_user(THD *thd, List &list, bool handle_as_role) if (result) { + const char *c= (handle_as_role) ? "role already exists" : \ + "user already exists"; + append_str(&wrong_users, c, strlen(c)); my_error(ER_CANNOT_USER, MYF(0), (handle_as_role) ? "CREATE ROLE" : "CREATE USER", wrong_users.c_ptr_safe()); @@ -10463,10 +10466,14 @@ bool mysql_drop_user(THD *thd, List &list, bool handle_as_role) mysql_mutex_unlock(&acl_cache->lock); - if (result) + if (result){ + const char *c= (handle_as_role) ? "role doesn't exist" : \ + "user doesn't exist"; + append_str(&wrong_users, c, strlen(c)); my_error(ER_CANNOT_USER, MYF(0), (handle_as_role) ? "DROP ROLE" : "DROP USER", wrong_users.c_ptr_safe()); + } if (binlog) result |= write_bin_log(thd, FALSE, thd->query(), thd->query_length()); @@ -10556,9 +10563,11 @@ bool mysql_rename_user(THD *thd, List &list) mysql_mutex_unlock(&acl_cache->lock); - if (result) + if (result){ + const char *c= "user doesn't exist"; + append_str(&wrong_users, c, strlen(c)); my_error(ER_CANNOT_USER, MYF(0), "RENAME USER", wrong_users.c_ptr_safe()); - + } if (some_users_renamed && mysql_bin_log.is_open()) result |= write_bin_log(thd, FALSE, thd->query(), thd->query_length()); @@ -10621,6 +10630,8 @@ int mysql_alter_user(THD* thd, List &users_list) /* 'if exists' flag leads to warnings instead of errors. */ if (thd->lex->create_info.if_exists()) { + const char *c= "user doesn't exist"; + append_str(&wrong_users, c, strlen(c)); push_warning_printf(thd, Sql_condition::WARN_LEVEL_NOTE, ER_CANNOT_USER, ER_THD(thd, ER_CANNOT_USER), @@ -10629,6 +10640,8 @@ int mysql_alter_user(THD* thd, List &users_list) } else { + const char *c= "user doesn't exist"; + append_str(&wrong_users, c, strlen(c)); my_error(ER_CANNOT_USER, MYF(0), "ALTER USER", wrong_users.c_ptr_safe()); -- cgit v1.2.1