summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mysql-test/r/read_only.result11
-rw-r--r--mysql-test/t/read_only.test13
-rw-r--r--sql/sql_parse.cc1
3 files changed, 25 insertions, 0 deletions
diff --git a/mysql-test/r/read_only.result b/mysql-test/r/read_only.result
index 2d0f9d730fd..4afddab6851 100644
--- a/mysql-test/r/read_only.result
+++ b/mysql-test/r/read_only.result
@@ -162,3 +162,14 @@ delete from mysql.columns_priv where User like 'mysqltest_%';
flush privileges;
drop database mysqltest_db1;
set global read_only= @start_read_only;
+#
+# MDEV-16987 - ALTER DATABASE possible in read-only mode
+#
+GRANT ALTER ON test1.* TO user1@localhost;
+CREATE DATABASE test1;
+SET GLOBAL read_only=1;
+ALTER DATABASE test1 CHARACTER SET utf8;
+ERROR HY000: The MariaDB server is running with the --read-only option so it cannot execute this statement
+SET GLOBAL read_only=0;
+DROP DATABASE test1;
+DROP USER user1@localhost;
diff --git a/mysql-test/t/read_only.test b/mysql-test/t/read_only.test
index eb9bea803c2..dd9d6430172 100644
--- a/mysql-test/t/read_only.test
+++ b/mysql-test/t/read_only.test
@@ -310,3 +310,16 @@ set global read_only= @start_read_only;
# Wait till all disconnects are completed
--source include/wait_until_count_sessions.inc
+--echo #
+--echo # MDEV-16987 - ALTER DATABASE possible in read-only mode
+--echo #
+GRANT ALTER ON test1.* TO user1@localhost;
+CREATE DATABASE test1;
+SET GLOBAL read_only=1;
+change_user user1;
+--error ER_OPTION_PREVENTS_STATEMENT
+ALTER DATABASE test1 CHARACTER SET utf8;
+change_user root;
+SET GLOBAL read_only=0;
+DROP DATABASE test1;
+DROP USER user1@localhost;
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index 9f8a625325f..95243ead2fe 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -831,6 +831,7 @@ static bool deny_updates_if_read_only_option(THD *thd, TABLE_LIST *all_tables)
DBUG_RETURN(FALSE);
if (lex->sql_command == SQLCOM_CREATE_DB ||
+ lex->sql_command == SQLCOM_ALTER_DB ||
lex->sql_command == SQLCOM_DROP_DB)
DBUG_RETURN(TRUE);