polardbxengine/mysql-test/suite/sys_vars/t/binlog_encryption.test

138 lines
3.8 KiB
Plaintext

###############################################################################
# Variable Name: binlog_encryption
# Scope: global
# Access Type: dynamic
# Data Type: boolean
#
# Description: Test case for checking the behavior of dynamic system variable
# "binlog_encryption", specifically regarding:
# - Scope & access type
# - Valid & default value
# - Invalid values
# - Required privileges
#
# Reference: WL#10957
###############################################################################
# Save initial value
--let $saved_binlog_encryption= `SELECT @@global.binlog_encryption`
#
# Scope: Global only
#
SELECT COUNT(@@GLOBAL.binlog_encryption);
--error ER_INCORRECT_GLOBAL_LOCAL_VAR
SELECT COUNT(@@SESSION.binlog_encryption);
--disable_warnings
SELECT VARIABLE_NAME FROM performance_schema.global_variables WHERE VARIABLE_NAME='binlog_encryption';
SELECT VARIABLE_NAME FROM performance_schema.session_variables WHERE VARIABLE_NAME='binlog_encryption';
--enable_warnings
#
# Access Type: Dynamic
#
SET GLOBAL binlog_encryption= ON;
--let $assert_text= 'binlog_encryption is a dynamic variable'
--let $assert_cond= "[SELECT @@GLOBAL.binlog_encryption]" = "1"
--source include/assert.inc
#
# Valid values and Default value
#
SET GLOBAL binlog_encryption= OFF;
--let $assert_text= 'binlog_encryption should be OFF'
--let $assert_cond= "[SELECT @@GLOBAL.binlog_encryption]" = "0"
--source include/assert.inc
SET GLOBAL binlog_encryption= ON;
--let $assert_text= 'binlog_encryption should be ON'
--let $assert_cond= "[SELECT @@GLOBAL.binlog_encryption]" = "1"
--source include/assert.inc
SET GLOBAL binlog_encryption= 0;
--let $assert_text= 'binlog_encryption should be OFF'
--let $assert_cond= "[SELECT @@GLOBAL.binlog_encryption]" = "0"
--source include/assert.inc
SET GLOBAL binlog_encryption= 1;
--let $assert_text= 'binlog_encryption should be ON'
--let $assert_cond= "[SELECT @@GLOBAL.binlog_encryption]" = "1"
--source include/assert.inc
SET GLOBAL binlog_encryption= DEFAULT;
--let $assert_text= 'binlog_encryption should be OFF'
--let $assert_cond= "[SELECT @@GLOBAL.binlog_encryption]" = "0"
--source include/assert.inc
#
# Invalid values
#
--error ER_WRONG_VALUE_FOR_VAR
SET GLOBAL binlog_encryption= NULL;
--error ER_WRONG_VALUE_FOR_VAR
SET GLOBAL binlog_encryption= '';
--error ER_WRONG_VALUE_FOR_VAR
SET GLOBAL binlog_encryption= -1;
--error ER_WRONG_TYPE_FOR_VAR
SET GLOBAL binlog_encryption= 1.0;
--error ER_WRONG_VALUE_FOR_VAR
SET GLOBAL binlog_encryption= 'GARBAGE';
--error ER_WRONG_VALUE_FOR_VAR
SET GLOBAL binlog_encryption= 2;
--echo Expect value still set to "OFF"
SELECT @@global.binlog_encryption;
#
# Privileges
#
CREATE USER user1;
--connect(conn_user1,localhost,user1,,)
--Error ER_SPECIFIC_ACCESS_DENIED_ERROR
SET GLOBAL binlog_encryption=ON;
--error ER_SPECIFIC_ACCESS_DENIED_ERROR
ALTER INSTANCE ROTATE BINLOG MASTER KEY;
--connection default
GRANT SYSTEM_VARIABLES_ADMIN ON *.* TO user1@'%';
--connection conn_user1
# SYSTEM_VARIABLES_ADMIN is not enough
--Error ER_SPECIFIC_ACCESS_DENIED_ERROR
SET GLOBAL binlog_encryption=ON;
--error ER_SPECIFIC_ACCESS_DENIED_ERROR
ALTER INSTANCE ROTATE BINLOG MASTER KEY;
--connection default
GRANT BINLOG_ENCRYPTION_ADMIN ON *.* TO user1@'%';
--connection conn_user1
SET GLOBAL binlog_encryption=ON;
ALTER INSTANCE ROTATE BINLOG MASTER KEY;
--connection default
REVOKE SYSTEM_VARIABLES_ADMIN ON *.* FROM user1@'%';
--connection conn_user1
ALTER INSTANCE ROTATE BINLOG MASTER KEY;
# BINLOG_ENCRYPTION_ADMIN is not enough
--Error ER_SPECIFIC_ACCESS_DENIED_ERROR
SET GLOBAL binlog_encryption=OFF;
--connection default
REVOKE BINLOG_ENCRYPTION_ADMIN ON *.* FROM user1@'%';
--connection default
--disconnect conn_user1
DROP USER user1;
# Clean up
--disable_query_log
--eval SET GLOBAL binlog_encryption= $saved_binlog_encryption
--enable_query_log