221 lines
7.3 KiB
Plaintext
221 lines
7.3 KiB
Plaintext
# restart: --no-console --log-error=ERROR_LOG_FILE
|
|
SELECT @@global.innodb_redo_log_encrypt ;
|
|
@@global.innodb_redo_log_encrypt
|
|
0
|
|
SET GLOBAL innodb_redo_log_encrypt = 1;
|
|
SET GLOBAL innodb_undo_log_encrypt = 1;
|
|
UNINSTALL PLUGIN keyring_file;
|
|
ERROR 42000: PLUGIN keyring_file does not exist
|
|
CREATE TABLE tne_1(c1 INT, c2 varchar(2000)) ENGINE = InnoDB;
|
|
INSERT INTO tne_1 VALUES (1,REPEAT('a',1990)),(2,REPEAT('b',1990)),(100,REPEAT('c',1990));
|
|
SELECT c1,LEFT(c2,10) FROM tne_1;
|
|
c1 LEFT(c2,10)
|
|
1 aaaaaaaaaa
|
|
2 bbbbbbbbbb
|
|
100 cccccccccc
|
|
DROP TABLE tne_1;
|
|
# Stop the MTR default DB server
|
|
Pattern "Can\'t set redo log tablespace to be encrypted" found
|
|
# create bootstrap file
|
|
# Prepare new datadir
|
|
# Run the bootstrap command with keyring
|
|
# Starting server with keyring plugin
|
|
SELECT @@global.innodb_redo_log_encrypt;
|
|
@@global.innodb_redo_log_encrypt
|
|
0
|
|
SET GLOBAL innodb_redo_log_encrypt = 1;
|
|
SELECT @@global.innodb_undo_log_encrypt;
|
|
@@global.innodb_undo_log_encrypt
|
|
0
|
|
SET GLOBAL innodb_undo_log_encrypt = 1;
|
|
SELECT @@global.innodb_undo_log_encrypt;
|
|
@@global.innodb_undo_log_encrypt
|
|
1
|
|
INSTALL PLUGIN keyring_file SONAME 'keyring_file.so';
|
|
ERROR HY000: Function 'keyring_file' already exists
|
|
SET GLOBAL innodb_redo_log_encrypt = 0;
|
|
SELECT @@global.innodb_redo_log_encrypt;
|
|
@@global.innodb_redo_log_encrypt
|
|
0
|
|
SET GLOBAL innodb_undo_log_encrypt = 0;
|
|
SELECT @@global.innodb_undo_log_encrypt;
|
|
@@global.innodb_undo_log_encrypt
|
|
0
|
|
INSTALL PLUGIN keyring_file SONAME 'keyring_file.so';
|
|
ERROR HY000: Function 'keyring_file' already exists
|
|
DROP TABLE IF EXISTS t1;
|
|
DROP DATABASE IF EXISTS tde_db;
|
|
CREATE DATABASE tde_db;
|
|
USE tde_db;
|
|
CREATE TABLE tde_db.t_encrypt(c2 INT NOT NULL PRIMARY KEY,
|
|
c3 LONGBLOB
|
|
) ENCRYPTION="Y" ENGINE = InnoDB;
|
|
CREATE TABLE tde_db.t_non_encrypt(c2 INT NOT NULL PRIMARY KEY,
|
|
c3 LONGBLOB
|
|
) ENGINE = InnoDB;
|
|
CREATE PROCEDURE tde_db.populate_table_set_redo_encrypt(IN table_name VARCHAR(50))
|
|
begin
|
|
declare i int default 1;
|
|
declare has_error int default 0;
|
|
DECLARE CONTINUE HANDLER FOR 1062 SET has_error = 1;
|
|
while (i <= 2000) DO
|
|
SET @sql_text = CONCAT('INSERT INTO ',table_name, '(c2,c3) VALUES (' , i,',' ,'CONCAT(REPEAT("a",6*512*512)))');
|
|
PREPARE stmt FROM @sql_text;
|
|
EXECUTE stmt;
|
|
set i = i + 1;
|
|
IF i%10 = 0 THEN SET GLOBAL innodb_redo_log_encrypt = 1;
|
|
END IF;
|
|
IF i%20 = 0 THEN SET GLOBAL innodb_redo_log_encrypt = 0;
|
|
END IF;
|
|
IF i%15 = 0 THEN SET GLOBAL innodb_undo_log_encrypt = 1;
|
|
END IF;
|
|
IF i%30 = 0 THEN SET GLOBAL innodb_undo_log_encrypt = 0;
|
|
END IF;
|
|
end while;
|
|
end|
|
|
CREATE PROCEDURE tde_db.update_table(IN table_name VARCHAR(50))
|
|
begin
|
|
declare i int default 1;
|
|
declare has_error int default 0;
|
|
DECLARE CONTINUE HANDLER FOR 1062 SET has_error = 1;
|
|
while (i <= 2000) DO
|
|
SET @sql_text = CONCAT('UPDATE ',table_name, ' SET c2 = c2 * -1 ORDER BY RAND() LIMIT 2');
|
|
PREPARE stmt FROM @sql_text;
|
|
EXECUTE stmt;
|
|
set i = i + 1;
|
|
end while;
|
|
end|
|
|
CREATE PROCEDURE tde_db.delete_table(IN table_name VARCHAR(50))
|
|
begin
|
|
declare i int default 1;
|
|
declare has_error int default 0;
|
|
DECLARE CONTINUE HANDLER FOR 1062 SET has_error = 1;
|
|
while (i <= 2000) DO
|
|
SET @sql_text = CONCAT('DELETE FROM ',table_name, ' ORDER BY RAND() LIMIT 2');
|
|
PREPARE stmt FROM @sql_text;
|
|
EXECUTE stmt;
|
|
set i = i + 1;
|
|
end while;
|
|
end|
|
|
CREATE PROCEDURE tde_db.transaction_table(IN table_name VARCHAR(50))
|
|
begin
|
|
declare i int default 1;
|
|
declare iflag int default -1;
|
|
declare has_error int default 0;
|
|
DECLARE CONTINUE HANDLER FOR 1062 SET has_error = 1;
|
|
SET i = 3000;
|
|
START TRANSACTION;
|
|
while (i <= 9000) DO
|
|
SET @sql_text = CONCAT('INSERT INTO ',table_name, '(c2,c3) VALUES (' , i,',' ,'CONCAT(REPEAT("a",6*512*512)))');
|
|
PREPARE stmt FROM @sql_text;
|
|
EXECUTE stmt;
|
|
SET @sql_text = CONCAT('UPDATE ',table_name, ' SET c2 = c2 * -1 ORDER BY RAND() LIMIT 2');
|
|
PREPARE stmt FROM @sql_text;
|
|
EXECUTE stmt;
|
|
set i = i + 1;
|
|
IF i%10 = 0 THEN SET GLOBAL innodb_redo_log_encrypt = 1;
|
|
END IF;
|
|
IF i%20 = 0 THEN SET GLOBAL innodb_redo_log_encrypt = 0;
|
|
END IF;
|
|
IF i%15 = 0 THEN SET GLOBAL innodb_undo_log_encrypt = 1;
|
|
END IF;
|
|
IF i%30 = 0 THEN SET GLOBAL innodb_undo_log_encrypt = 0;
|
|
END IF;
|
|
IF i%10 = 0 THEN
|
|
SET @sql_text = CONCAT('DELETE FROM ',table_name, ' ORDER BY RAND() LIMIT 2');
|
|
PREPARE stmt FROM @sql_text;
|
|
EXECUTE stmt;
|
|
START TRANSACTION;
|
|
SET iflag = -1 * iflag;
|
|
END IF;
|
|
IF i%9 = 0 THEN
|
|
IF iflag < 0 THEN
|
|
COMMIT;
|
|
ELSE
|
|
ROLLBACK;
|
|
END IF;
|
|
END IF;
|
|
end while;
|
|
end|
|
|
CREATE PROCEDURE tde_db.create_table_rotate_key()
|
|
begin
|
|
declare i int default 1;
|
|
declare has_error int default 0;
|
|
DECLARE CONTINUE HANDLER FOR 1062 SET has_error = 1;
|
|
while (i <= 2000) DO
|
|
IF i%10 = 0 THEN
|
|
SET @sql_text = CONCAT('CREATE TABLE ',CONCAT('tde_db.t_non_encrypt_',encrypt,'_',i),' (c1 INT) ' ,' ENGINE=InnoDB');
|
|
ELSE
|
|
SET @sql_text = CONCAT('CREATE TABLE ',CONCAT('tde_db.t_encrypt_',encrypt,'_',i),' (c1 INT) ENCRYPTION="Y"' ,' ENGINE=InnoDB');
|
|
END IF;
|
|
PREPARE stmt FROM @sql_text;
|
|
EXECUTE stmt;
|
|
DEALLOCATE PREPARE stmt;
|
|
ALTER INSTANCE ROTATE INNODB MASTER KEY;
|
|
set i = i + 1;
|
|
end while;
|
|
end|
|
|
CREATE PROCEDURE tde_db.query_table(IN table_name VARCHAR(50))
|
|
begin
|
|
declare i int default 1;
|
|
declare has_error int default 0;
|
|
DECLARE CONTINUE HANDLER FOR 1062 SET has_error = 1;
|
|
while (i <= 2000) DO
|
|
SET @sql_text = CONCAT('SELECT * FROM ',table_name, ' ORDER BY RAND() LIMIT 2');
|
|
PREPARE stmt FROM @sql_text;
|
|
EXECUTE stmt;
|
|
set i = i + 1;
|
|
end while;
|
|
end|
|
|
# In connection con1 - Running insert with redo_log_encrypt variable
|
|
call tde_db.populate_table_set_redo_encrypt('tde_db.t_encrypt');
|
|
# In connection con2 - Running insert on non encrypt table
|
|
call tde_db.populate_table_set_redo_encrypt('tde_db.t_non_encrypt');
|
|
# Starting server with keyring plugin
|
|
SELECT COUNT(*)>0 FROM tde_db.t_encrypt;
|
|
COUNT(*)>0
|
|
#
|
|
SELECT COUNT(*)>0 FROM tde_db.t_non_encrypt;
|
|
COUNT(*)>0
|
|
#
|
|
DELETE FROM tde_db.t_encrypt;
|
|
DELETE FROM tde_db.t_non_encrypt;
|
|
# In connection con1 - Running insert with redo_log_encrypt variable
|
|
call tde_db.populate_table_set_redo_encrypt('tde_db.t_encrypt');
|
|
# In connection con2 - Running insert on non encrypt table
|
|
call tde_db.populate_table_set_redo_encrypt('tde_db.t_non_encrypt');
|
|
# In connection con3 - Running update on encrypt
|
|
call tde_db.table_update('tde_db.t_encrypt');
|
|
# In connection con4 - Running update non encrypt
|
|
call tde_db.table_update('tde_db.t_non_encrypt');
|
|
# In connection con5 - Running delete on encrypt
|
|
call tde_db.table_delete('tde_db.t_encrypt');
|
|
# In connection con6 - Running delete on non encrypt
|
|
call tde_db.table_delete('tde_db.t_non_encrypt');
|
|
# In connection con7 - Running transaction on encrypt
|
|
call tde_db.transaction_table('tde_db.t_encrypt');
|
|
# In connection con8 - Running transaction on non encrypt
|
|
call tde_db.transaction_table('tde_db.t_non_encrypt');
|
|
# In connection con9 - Running create encrypt and non encrypt table with rotate key
|
|
call tde_db.create_table_rotate_key();
|
|
# In connection con10 - Running query on encrypt table
|
|
call tde_db.query_table('tde_db.t_encrypt');
|
|
# In connection con11 - Running query on non encrypt table
|
|
call tde_db.query_table('tde_db.t_non_encrypt');
|
|
# Starting server with keyring plugin
|
|
SELECT COUNT(*) > 1 FROM tde_db.t_encrypt;
|
|
COUNT(*) > 1
|
|
#
|
|
SELECT COUNT(*) > 1 FROM tde_db.t_non_encrypt;
|
|
COUNT(*) > 1
|
|
#
|
|
# In connection con1 - Running insert with redo_log_encrypt variable
|
|
call tde_db.populate_table_set_redo_encrypt('tde_db.t_encrypt');
|
|
# In connection con2 - Running insert on non encrypt table
|
|
call tde_db.populate_table_set_redo_encrypt('tde_db.t_non_encrypt');
|
|
DROP DATABASE tde_db;
|
|
# restart
|
|
#
|
|
# Cleanup
|
|
#
|