1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-08 11:22:35 +03:00

MDEV-35617: DROP USER should leave no active session for that user

DROP USER looks for sessions by the do-be-dropped user and if found:
* fails with ER_CANNOT_USER in Oracle mode
* continues with ER_ACTIVE_CONNECTIONS_FOR_USER_TO_DROP warning otherwise

Every user being dropped is marked with flag that disallow establishing
a new connections on behalf this user.
This commit is contained in:
Dmitry Shulga
2025-05-28 00:05:05 +07:00
parent e3d9369774
commit ce7ab467db
51 changed files with 410 additions and 6 deletions

View File

@@ -1,4 +1,5 @@
--source include/not_ubsan.inc
--source include/count_sessions.inc
let $REGEX_VERSION_ID=/$mysql_get_server_version/VERSION_ID/;
let $REGEX_PASSWORD_LAST_CHANGED=/password_last_changed": [0-9]*/password_last_changed": #/;
@@ -48,6 +49,7 @@ show create user mysqltest1;
--echo # name does not match, password bad = failure
--error 1
--exec $try_auth -u mysqltest1 -pbad
--source include/wait_until_count_sessions.inc
--replace_result $dreplace "drop user 'USER'"
eval $dreplace, mysqltest1;
@@ -68,6 +70,7 @@ show create user mysqltest1;
--echo # name does not match, password bad = failure
--error 1
--exec $try_auth -u mysqltest1 -pbad
--source include/wait_until_count_sessions.inc
--replace_result $dreplace "drop user 'USER'"
eval $dreplace, mysqltest1;
@@ -88,6 +91,7 @@ show create user mysqltest1;
--echo # name does not match, password bad = failure
--error 1
--exec $try_auth -u mysqltest1 -pbad
--source include/wait_until_count_sessions.inc
--replace_result $dreplace "drop user 'USER'"
eval $dreplace, mysqltest1;
@@ -108,6 +112,7 @@ show create user mysqltest1;
--echo # name does not match, password bad = failure
--error 1
--exec $try_auth -u mysqltest1 -pbad
--source include/wait_until_count_sessions.inc
--replace_result $dreplace "drop user 'USER'"
eval $dreplace, mysqltest1;
@@ -130,6 +135,7 @@ show create user mysqltest1;
--echo # name does not match, password bad = failure
--error 1
--exec $try_auth -u mysqltest1 -pbad
--source include/wait_until_count_sessions.inc
--replace_result $dreplace "drop user 'USER'"
eval $dreplace, mysqltest1;
@@ -146,6 +152,7 @@ show create user mysqltest1;
--echo # password bad = failure
--error 1
--exec $try_auth -u mysqltest1 -pbad
--source include/wait_until_count_sessions.inc
drop user mysqltest1;
#
@@ -198,6 +205,7 @@ show create user mysqltest1;
--echo # SET PASSWORD helps
set password for mysqltest1 = password('bla');
--exec $try_auth -u mysqltest1 -pbla
--source include/wait_until_count_sessions.inc
--replace_result $dreplace "drop user 'USER'"
eval $dreplace, mysqltest1;
@@ -219,6 +227,7 @@ show create user mysqltest1;
--exec $try_auth -u mysqltest1 -pgood --plugin-dir=$plugindir/no
--echo # no plugin, second password works = ok
--exec $try_auth -u mysqltest1 -pworks --plugin-dir=$plugindir/no
--source include/wait_until_count_sessions.inc
drop user mysqltest1;
uninstall soname 'auth_ed25519';

View File

@@ -1,5 +1,6 @@
let $PAM_PLUGIN_VERSION= $AUTH_PAM_SO;
--source pam_init.inc
--source include/count_sessions.inc
--write_file $MYSQLTEST_VARDIR/tmp/pam_good.txt
not very secret challenge
@@ -83,6 +84,7 @@ alter user test_pam password expire;
--error 1
--exec $MYSQL_TEST -u test_pam -pgoodpassword < $MYSQLTEST_VARDIR/tmp/pam_good2.txt
--source include/wait_until_count_sessions.inc
drop user test_pam;
drop user pam_test;
create user PAM_TEST identified via pam using 'mariadb_mtr';
@@ -104,6 +106,7 @@ set global pam_winbind_workaround=1;
--remove_file $MYSQLTEST_VARDIR/tmp/pam_good2.txt
--remove_file $MYSQLTEST_VARDIR/tmp/pam_bad.txt
--remove_file $MYSQLTEST_VARDIR/tmp/pam_ugly.txt
--source include/wait_until_count_sessions.inc
drop user PAM_TEST;
--echo #
@@ -121,6 +124,7 @@ show create user;
EOF
--exec $MYSQL_TEST -u pam_test < $MYSQLTEST_VARDIR/tmp/setpwd.txt
--remove_file $MYSQLTEST_VARDIR/tmp/setpwd.txt
--source include/wait_until_count_sessions.inc
drop user pam_test;
let $count_sessions= 1;

View File

@@ -1,5 +1,6 @@
source include/platform.inc;
source include/not_embedded.inc;
source include/count_sessions.inc;
if (`select count(*) = 0 from information_schema.plugins where plugin_name = 'parsec'`)
{
@@ -41,6 +42,7 @@ if ($MTR_COMBINATION_WIN) {
--echo # mysql -utest1 -ppwd --ssl-verify-server-cert -e "select test.have_ssl()"
--exec $MYSQL --protocol tcp $host -utest1 -ppwd --ssl-verify-server-cert -e "select test.have_ssl()" 2>&1
source include/wait_until_count_sessions.inc;
drop function have_ssl;
drop user test1@'%';
@@ -57,4 +59,5 @@ disconnect con4;
--error ER_ACCESS_DENIED_ERROR
connect con5, localhost, test2, "wrong_pwd";
connection default;
source include/wait_until_count_sessions.inc;
drop user test2@'%';