diff options
Diffstat (limited to 'mysql-test/suite/sys_vars')
15 files changed, 262 insertions, 0 deletions
diff --git a/mysql-test/suite/sys_vars/inc/secure_timestamp_func.inc b/mysql-test/suite/sys_vars/inc/secure_timestamp_func.inc new file mode 100644 index 00000000000..8bc3e42df59 --- /dev/null +++ b/mysql-test/suite/sys_vars/inc/secure_timestamp_func.inc @@ -0,0 +1,49 @@ +# +# MDEV-15923 option to control who can set session @@timestamp +# +source include/have_binlog_format_statement.inc; +source include/master-slave.inc; + +connection slave; +select @@secure_timestamp; + +### SUPER +disable_abort_on_error; +set timestamp=1234567890.101112; +enable_abort_on_error; +select if(now(6) > 20100101, 'READONLY', 'EDITABLE') as 'SUPER'; + +### non-privileged user +create user foo@127.0.0.1; +connect con2,127.0.0.1,foo,,test,$SLAVE_MYPORT; +disable_abort_on_error; +set timestamp=1234567890.101112; +enable_abort_on_error; +select if(now(6) > 20100101, 'READONLY', 'EDITABLE') as 'non-privileged'; +disconnect con2; +connection slave; +drop user foo@127.0.0.1; + +### replication +connection master; +set time_zone='+00:00'; +set timestamp=1234567890.101112; +select @@timestamp, now(6); + +create table t1 (b varchar(20), a timestamp(6) default current_timestamp(6)); +insert t1 (b) values ('replicated'); +sync_slave_with_master; +create trigger t1rbr before insert on t1 for each row set new.a=now(6); +set @@global.slave_run_triggers_for_rbr= yes; +binlog 'LQfqWg8BAAAA/AAAAAABAAABAAQAMTAuMy42LU1hcmlhREItZGVidWctbG9nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtB+paEzgNAAgAEgAEBAQEEgAA5AAEGggAAAAICAgCAAAACgoKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEwQADQgICAoKCgFlBcaR'; +binlog '0gKWSRMBAAAAMQAAAHQDAAAAAB8AAAAAAAEABHRlc3QAAnQxAAIPEQMUAAYBQFUzwA==0gKWSRcBAAAAMAAAAKQDAAAAAB8AAAAAAAEAAv/8BmJpbmxvZ0mWAtIBivg3mwo+'; +set @@global.slave_run_triggers_for_rbr= default; +select b, if(a > 20100101, 'READONLY', 'EDITABLE') as 'REPLICATION' from t1; +connection master; +#set binlog_format=row; +#insert t1 (b) values ('binlog'); +#let datadir=`select @@datadir`; +#exec $MYSQL_BINLOG $datadir/master-bin.000001; +drop table t1; + +source include/rpl_end.inc; diff --git a/mysql-test/suite/sys_vars/r/secure_timestamp_no.result b/mysql-test/suite/sys_vars/r/secure_timestamp_no.result new file mode 100644 index 00000000000..34eeb083c28 --- /dev/null +++ b/mysql-test/suite/sys_vars/r/secure_timestamp_no.result @@ -0,0 +1,40 @@ +include/master-slave.inc +[connection master] +connection slave; +select @@secure_timestamp; +@@secure_timestamp +NO +set timestamp=1234567890.101112; +select if(now(6) > 20100101, 'READONLY', 'EDITABLE') as 'SUPER'; +SUPER +EDITABLE +create user foo@127.0.0.1; +connect con2,127.0.0.1,foo,,test,$SLAVE_MYPORT; +set timestamp=1234567890.101112; +select if(now(6) > 20100101, 'READONLY', 'EDITABLE') as 'non-privileged'; +non-privileged +EDITABLE +disconnect con2; +connection slave; +drop user foo@127.0.0.1; +connection master; +set time_zone='+00:00'; +set timestamp=1234567890.101112; +select @@timestamp, now(6); +@@timestamp now(6) +1234567890.101112 2009-02-13 23:31:30.101112 +create table t1 (b varchar(20), a timestamp(6) default current_timestamp(6)); +insert t1 (b) values ('replicated'); +connection slave; +create trigger t1rbr before insert on t1 for each row set new.a=now(6); +set @@global.slave_run_triggers_for_rbr= yes; +binlog 'LQfqWg8BAAAA/AAAAAABAAABAAQAMTAuMy42LU1hcmlhREItZGVidWctbG9nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtB+paEzgNAAgAEgAEBAQEEgAA5AAEGggAAAAICAgCAAAACgoKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEwQADQgICAoKCgFlBcaR'; +binlog '0gKWSRMBAAAAMQAAAHQDAAAAAB8AAAAAAAEABHRlc3QAAnQxAAIPEQMUAAYBQFUzwA==0gKWSRcBAAAAMAAAAKQDAAAAAB8AAAAAAAEAAv/8BmJpbmxvZ0mWAtIBivg3mwo+'; +set @@global.slave_run_triggers_for_rbr= default; +select b, if(a > 20100101, 'READONLY', 'EDITABLE') as 'REPLICATION' from t1; +b REPLICATION +replicated EDITABLE +binlog EDITABLE +connection master; +drop table t1; +include/rpl_end.inc diff --git a/mysql-test/suite/sys_vars/r/secure_timestamp_rpl.result b/mysql-test/suite/sys_vars/r/secure_timestamp_rpl.result new file mode 100644 index 00000000000..e2d79745a46 --- /dev/null +++ b/mysql-test/suite/sys_vars/r/secure_timestamp_rpl.result @@ -0,0 +1,42 @@ +include/master-slave.inc +[connection master] +connection slave; +select @@secure_timestamp; +@@secure_timestamp +REPLICATION +set timestamp=1234567890.101112; +ERROR HY000: The MariaDB server is running with the --secure-timestamp=REPLICATION option so it cannot execute this statement +select if(now(6) > 20100101, 'READONLY', 'EDITABLE') as 'SUPER'; +SUPER +READONLY +create user foo@127.0.0.1; +connect con2,127.0.0.1,foo,,test,$SLAVE_MYPORT; +set timestamp=1234567890.101112; +ERROR HY000: The MariaDB server is running with the --secure-timestamp=REPLICATION option so it cannot execute this statement +select if(now(6) > 20100101, 'READONLY', 'EDITABLE') as 'non-privileged'; +non-privileged +READONLY +disconnect con2; +connection slave; +drop user foo@127.0.0.1; +connection master; +set time_zone='+00:00'; +set timestamp=1234567890.101112; +select @@timestamp, now(6); +@@timestamp now(6) +1234567890.101112 2009-02-13 23:31:30.101112 +create table t1 (b varchar(20), a timestamp(6) default current_timestamp(6)); +insert t1 (b) values ('replicated'); +connection slave; +create trigger t1rbr before insert on t1 for each row set new.a=now(6); +set @@global.slave_run_triggers_for_rbr= yes; +binlog 'LQfqWg8BAAAA/AAAAAABAAABAAQAMTAuMy42LU1hcmlhREItZGVidWctbG9nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtB+paEzgNAAgAEgAEBAQEEgAA5AAEGggAAAAICAgCAAAACgoKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEwQADQgICAoKCgFlBcaR'; +binlog '0gKWSRMBAAAAMQAAAHQDAAAAAB8AAAAAAAEABHRlc3QAAnQxAAIPEQMUAAYBQFUzwA==0gKWSRcBAAAAMAAAAKQDAAAAAB8AAAAAAAEAAv/8BmJpbmxvZ0mWAtIBivg3mwo+'; +set @@global.slave_run_triggers_for_rbr= default; +select b, if(a > 20100101, 'READONLY', 'EDITABLE') as 'REPLICATION' from t1; +b REPLICATION +replicated EDITABLE +binlog READONLY +connection master; +drop table t1; +include/rpl_end.inc diff --git a/mysql-test/suite/sys_vars/r/secure_timestamp_super.result b/mysql-test/suite/sys_vars/r/secure_timestamp_super.result new file mode 100644 index 00000000000..6fbb5e5fbf0 --- /dev/null +++ b/mysql-test/suite/sys_vars/r/secure_timestamp_super.result @@ -0,0 +1,41 @@ +include/master-slave.inc +[connection master] +connection slave; +select @@secure_timestamp; +@@secure_timestamp +SUPER +set timestamp=1234567890.101112; +select if(now(6) > 20100101, 'READONLY', 'EDITABLE') as 'SUPER'; +SUPER +EDITABLE +create user foo@127.0.0.1; +connect con2,127.0.0.1,foo,,test,$SLAVE_MYPORT; +set timestamp=1234567890.101112; +ERROR 42000: Access denied; you need (at least one of) the SUPER privilege(s) for this operation +select if(now(6) > 20100101, 'READONLY', 'EDITABLE') as 'non-privileged'; +non-privileged +READONLY +disconnect con2; +connection slave; +drop user foo@127.0.0.1; +connection master; +set time_zone='+00:00'; +set timestamp=1234567890.101112; +select @@timestamp, now(6); +@@timestamp now(6) +1234567890.101112 2009-02-13 23:31:30.101112 +create table t1 (b varchar(20), a timestamp(6) default current_timestamp(6)); +insert t1 (b) values ('replicated'); +connection slave; +create trigger t1rbr before insert on t1 for each row set new.a=now(6); +set @@global.slave_run_triggers_for_rbr= yes; +binlog 'LQfqWg8BAAAA/AAAAAABAAABAAQAMTAuMy42LU1hcmlhREItZGVidWctbG9nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtB+paEzgNAAgAEgAEBAQEEgAA5AAEGggAAAAICAgCAAAACgoKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEwQADQgICAoKCgFlBcaR'; +binlog '0gKWSRMBAAAAMQAAAHQDAAAAAB8AAAAAAAEABHRlc3QAAnQxAAIPEQMUAAYBQFUzwA==0gKWSRcBAAAAMAAAAKQDAAAAAB8AAAAAAAEAAv/8BmJpbmxvZ0mWAtIBivg3mwo+'; +set @@global.slave_run_triggers_for_rbr= default; +select b, if(a > 20100101, 'READONLY', 'EDITABLE') as 'REPLICATION' from t1; +b REPLICATION +replicated EDITABLE +binlog EDITABLE +connection master; +drop table t1; +include/rpl_end.inc diff --git a/mysql-test/suite/sys_vars/r/secure_timestamp_yes.result b/mysql-test/suite/sys_vars/r/secure_timestamp_yes.result new file mode 100644 index 00000000000..d317cfc30b2 --- /dev/null +++ b/mysql-test/suite/sys_vars/r/secure_timestamp_yes.result @@ -0,0 +1,42 @@ +include/master-slave.inc +[connection master] +connection slave; +select @@secure_timestamp; +@@secure_timestamp +YES +set timestamp=1234567890.101112; +ERROR HY000: The MariaDB server is running with the --secure-timestamp=YES option so it cannot execute this statement +select if(now(6) > 20100101, 'READONLY', 'EDITABLE') as 'SUPER'; +SUPER +READONLY +create user foo@127.0.0.1; +connect con2,127.0.0.1,foo,,test,$SLAVE_MYPORT; +set timestamp=1234567890.101112; +ERROR HY000: The MariaDB server is running with the --secure-timestamp=YES option so it cannot execute this statement +select if(now(6) > 20100101, 'READONLY', 'EDITABLE') as 'non-privileged'; +non-privileged +READONLY +disconnect con2; +connection slave; +drop user foo@127.0.0.1; +connection master; +set time_zone='+00:00'; +set timestamp=1234567890.101112; +select @@timestamp, now(6); +@@timestamp now(6) +1234567890.101112 2009-02-13 23:31:30.101112 +create table t1 (b varchar(20), a timestamp(6) default current_timestamp(6)); +insert t1 (b) values ('replicated'); +connection slave; +create trigger t1rbr before insert on t1 for each row set new.a=now(6); +set @@global.slave_run_triggers_for_rbr= yes; +binlog 'LQfqWg8BAAAA/AAAAAABAAABAAQAMTAuMy42LU1hcmlhREItZGVidWctbG9nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtB+paEzgNAAgAEgAEBAQEEgAA5AAEGggAAAAICAgCAAAACgoKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEwQADQgICAoKCgFlBcaR'; +binlog '0gKWSRMBAAAAMQAAAHQDAAAAAB8AAAAAAAEABHRlc3QAAnQxAAIPEQMUAAYBQFUzwA==0gKWSRcBAAAAMAAAAKQDAAAAAB8AAAAAAAEAAv/8BmJpbmxvZ0mWAtIBivg3mwo+'; +set @@global.slave_run_triggers_for_rbr= default; +select b, if(a > 20100101, 'READONLY', 'EDITABLE') as 'REPLICATION' from t1; +b REPLICATION +replicated READONLY +binlog READONLY +connection master; +drop table t1; +include/rpl_end.inc diff --git a/mysql-test/suite/sys_vars/r/sysvars_server_embedded.result b/mysql-test/suite/sys_vars/r/sysvars_server_embedded.result index 89b7b5c97cf..432c9f4c114 100644 --- a/mysql-test/suite/sys_vars/r/sysvars_server_embedded.result +++ b/mysql-test/suite/sys_vars/r/sysvars_server_embedded.result @@ -3540,6 +3540,20 @@ NUMERIC_BLOCK_SIZE NULL ENUM_VALUE_LIST NULL READ_ONLY YES COMMAND_LINE_ARGUMENT REQUIRED +VARIABLE_NAME SECURE_TIMESTAMP +SESSION_VALUE NULL +GLOBAL_VALUE NO +GLOBAL_VALUE_ORIGIN COMPILE-TIME +DEFAULT_VALUE NO +VARIABLE_SCOPE GLOBAL +VARIABLE_TYPE ENUM +VARIABLE_COMMENT Restricts direct setting of a session timestamp. Possible levels are: YES - timestamp cannot deviate from the system clock, REPLICATION - replication thread can adjust timestamp to match the master's, SUPER - a user with this privilege and a replication thread can adjust timestamp, NO - historical behavior, anyone can modify session timestamp +NUMERIC_MIN_VALUE NULL +NUMERIC_MAX_VALUE NULL +NUMERIC_BLOCK_SIZE NULL +ENUM_VALUE_LIST NO,SUPER,REPLICATION,YES +READ_ONLY YES +COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME SERVER_ID SESSION_VALUE 1 GLOBAL_VALUE 1 diff --git a/mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result b/mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result index 3246d00d20e..cdc2f81e088 100644 --- a/mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result +++ b/mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result @@ -4156,6 +4156,20 @@ NUMERIC_BLOCK_SIZE NULL ENUM_VALUE_LIST NULL READ_ONLY YES COMMAND_LINE_ARGUMENT REQUIRED +VARIABLE_NAME SECURE_TIMESTAMP +SESSION_VALUE NULL +GLOBAL_VALUE NO +GLOBAL_VALUE_ORIGIN COMPILE-TIME +DEFAULT_VALUE NO +VARIABLE_SCOPE GLOBAL +VARIABLE_TYPE ENUM +VARIABLE_COMMENT Restricts direct setting of a session timestamp. Possible levels are: YES - timestamp cannot deviate from the system clock, REPLICATION - replication thread can adjust timestamp to match the master's, SUPER - a user with this privilege and a replication thread can adjust timestamp, NO - historical behavior, anyone can modify session timestamp +NUMERIC_MIN_VALUE NULL +NUMERIC_MAX_VALUE NULL +NUMERIC_BLOCK_SIZE NULL +ENUM_VALUE_LIST NO,SUPER,REPLICATION,YES +READ_ONLY YES +COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME SERVER_ID SESSION_VALUE 1 GLOBAL_VALUE 1 diff --git a/mysql-test/suite/sys_vars/t/secure_timestamp_no-slave.opt b/mysql-test/suite/sys_vars/t/secure_timestamp_no-slave.opt new file mode 100644 index 00000000000..4c9000c0ebe --- /dev/null +++ b/mysql-test/suite/sys_vars/t/secure_timestamp_no-slave.opt @@ -0,0 +1 @@ +--secure-timestamp=no diff --git a/mysql-test/suite/sys_vars/t/secure_timestamp_no.test b/mysql-test/suite/sys_vars/t/secure_timestamp_no.test new file mode 100644 index 00000000000..8871666abd0 --- /dev/null +++ b/mysql-test/suite/sys_vars/t/secure_timestamp_no.test @@ -0,0 +1,4 @@ +# +# MDEV-15923 option to control who can set session @@timestamp +# +source inc/secure_timestamp_func.inc; diff --git a/mysql-test/suite/sys_vars/t/secure_timestamp_rpl-slave.opt b/mysql-test/suite/sys_vars/t/secure_timestamp_rpl-slave.opt new file mode 100644 index 00000000000..13754861d0f --- /dev/null +++ b/mysql-test/suite/sys_vars/t/secure_timestamp_rpl-slave.opt @@ -0,0 +1 @@ +--secure-timestamp=replication diff --git a/mysql-test/suite/sys_vars/t/secure_timestamp_rpl.test b/mysql-test/suite/sys_vars/t/secure_timestamp_rpl.test new file mode 100644 index 00000000000..8871666abd0 --- /dev/null +++ b/mysql-test/suite/sys_vars/t/secure_timestamp_rpl.test @@ -0,0 +1,4 @@ +# +# MDEV-15923 option to control who can set session @@timestamp +# +source inc/secure_timestamp_func.inc; diff --git a/mysql-test/suite/sys_vars/t/secure_timestamp_super-slave.opt b/mysql-test/suite/sys_vars/t/secure_timestamp_super-slave.opt new file mode 100644 index 00000000000..f747ec6c0c9 --- /dev/null +++ b/mysql-test/suite/sys_vars/t/secure_timestamp_super-slave.opt @@ -0,0 +1 @@ +--secure-timestamp=super diff --git a/mysql-test/suite/sys_vars/t/secure_timestamp_super.test b/mysql-test/suite/sys_vars/t/secure_timestamp_super.test new file mode 100644 index 00000000000..8871666abd0 --- /dev/null +++ b/mysql-test/suite/sys_vars/t/secure_timestamp_super.test @@ -0,0 +1,4 @@ +# +# MDEV-15923 option to control who can set session @@timestamp +# +source inc/secure_timestamp_func.inc; diff --git a/mysql-test/suite/sys_vars/t/secure_timestamp_yes-slave.opt b/mysql-test/suite/sys_vars/t/secure_timestamp_yes-slave.opt new file mode 100644 index 00000000000..a74d68957ef --- /dev/null +++ b/mysql-test/suite/sys_vars/t/secure_timestamp_yes-slave.opt @@ -0,0 +1 @@ +--secure-timestamp=yes diff --git a/mysql-test/suite/sys_vars/t/secure_timestamp_yes.test b/mysql-test/suite/sys_vars/t/secure_timestamp_yes.test new file mode 100644 index 00000000000..8871666abd0 --- /dev/null +++ b/mysql-test/suite/sys_vars/t/secure_timestamp_yes.test @@ -0,0 +1,4 @@ +# +# MDEV-15923 option to control who can set session @@timestamp +# +source inc/secure_timestamp_func.inc; |