summaryrefslogtreecommitdiff
path: root/mysql-test/suite/encryption/t/innodb-encryption-alter.test
blob: d9a0e4e95cd778d864bf74c32db2ce748434e5dc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
-- source include/have_innodb.inc
-- source include/have_debug.inc
-- source include/have_debug_sync.inc
-- source include/have_file_key_management_plugin.inc

#
# MDEV-8817: Failing assertion: new_state->key_version != ENCRYPTION_KEY_VERSION_INVALID
#

SET GLOBAL innodb_encrypt_tables = ON;
SET GLOBAL innodb_encryption_threads = 4;

CREATE TABLE t1 (pk INT PRIMARY KEY AUTO_INCREMENT, c VARCHAR(256)) ENGINE=INNODB ENCRYPTED=NO ENCRYPTION_KEY_ID=4;
DROP TABLE t1;
set @save_global = @@GLOBAL.innodb_default_encryption_key_id;
set innodb_default_encryption_key_id = 99;
set global innodb_default_encryption_key_id = 99;
set global innodb_default_encryption_key_id = @save_global;
--error 1005
CREATE TABLE t1 (pk INT PRIMARY KEY AUTO_INCREMENT, c VARCHAR(256)) ENGINE=INNODB;
SHOW WARNINGS;
--error 1005
CREATE TABLE t1 (pk INT PRIMARY KEY AUTO_INCREMENT, c VARCHAR(256)) ENGINE=INNODB ENCRYPTED=YES;
SHOW WARNINGS;
set innodb_default_encryption_key_id = 4;
CREATE TABLE t1 (pk INT PRIMARY KEY AUTO_INCREMENT, c VARCHAR(256)) ENGINE=INNODB ENCRYPTED=YES;
SHOW CREATE TABLE t1;
DROP TABLE t1;
CREATE TABLE t1 (pk INT PRIMARY KEY AUTO_INCREMENT, c VARCHAR(256)) ENGINE=INNODB;
SHOW CREATE TABLE t1;
CREATE TABLE t2 (pk INT PRIMARY KEY AUTO_INCREMENT, c VARCHAR(256)) ENGINE=INNODB ENCRYPTED=NO ENCRYPTION_KEY_ID=1;
--error ER_ILLEGAL_HA_CREATE_OPTION
ALTER TABLE t1 ENCRYPTION_KEY_ID=99;
SHOW WARNINGS;
set innodb_default_encryption_key_id = 1;


--disable_warnings
--disable_query_log
let $i = 400;
while ($i)
{
INSERT INTO t1 values(NULL, substring(MD5(RAND()), -128));
dec $i;
}
commit;
INSERT INTO t2 select * from t1;

--disable_abort_on_error

--connect (con1,localhost,root,,test)
--connect (con2,localhost,root,,test)

let $i = 50;
while ($i)
{
connection con1;
send ALTER TABLE t1 ENCRYPTED=NO ENCRYPTION_KEY_ID=1;
connection con2;
send ALTER TABLE t1 ENCRYPTED=YES ENCRYPTION_KEY_ID=4;
connection default;
send ALTER TABLE t2 ENCRYPTED=NO ENCRYPTION_KEY_ID=1;
connection con1;
--reap;
ALTER TABLE t1 ENCRYPTED=NO ENCRYPTION_KEY_ID=1;
connection con2;
--reap
ALTER TABLE t1 ENCRYPTED=YES ENCRYPTION_KEY_ID=4;
connection default;
--reap
ALTER TABLE t2 ENCRYPTED=YES ENCRYPTION_KEY_ID=1;
ALTER TABLE t1 ENCRYPTED=NO ENCRYPTION_KEY_ID=1;
dec $i;
}

connection default;
--disconnect con1
--disconnect con2

--enable_abort_on_error
--enable_warnings
--enable_query_log

drop table t1,t2;

#
# MDEV-17230: encryption_key_id from alter is ignored by encryption threads
#
--enable_warnings
SET GLOBAL innodb_encrypt_tables=OFF;
CREATE TABLE t1 (a int not null primary key) engine=innodb;
ALTER TABLE t1 ENCRYPTION_KEY_ID=4;
SHOW CREATE TABLE t1;
DROP TABLE t1;

CREATE TABLE t2 (a int not null primary key) engine=innodb;
ALTER TABLE t2 ENCRYPTION_KEY_ID=4, ALGORITHM=COPY;
SHOW WARNINGS;
SHOW CREATE TABLE t2;

CREATE TABLE t3 (a int not null primary key) engine=innodb ENCRYPTION_KEY_ID=4;
DROP TABLE t3;

SET GLOBAL innodb_encrypt_tables='FORCE';
--error ER_CANT_CREATE_TABLE
CREATE TABLE t1 (a int primary key) engine=innodb encrypted=no;
SHOW WARNINGS;

FLUSH TABLES;

create table t1(f1 int not null, f2 int not null)engine=innodb encrypted=yes;
insert into t1 values(1, 2), (2, 3), (4, 5), (5, 6), (7, 8);
insert into t1 select * from t1;
BEGIN;
INSERT INTO t2 VALUES (1);

connect con1, localhost, root;
SET DEBUG_SYNC = 'row_log_table_apply2_before SIGNAL done WAIT_FOR ever';
send alter table t1 force;

connection default;
SET DEBUG_SYNC = 'now WAIT_FOR done';
SET GLOBAL innodb_flush_log_at_trx_commit=1;
COMMIT;

--let $shutdown_timeout= 0
--source include/restart_mysqld.inc
disconnect con1;

select * from t1;
drop table t1,t2;

# Work around missing crash recovery at the SQL layer.
let $datadir= `select @@datadir`;
--remove_files_wildcard $datadir/test #sql-*.frm