87 changed files with 1806 additions and 350 deletions
-
8client/mysql.cc
-
8client/mysqladmin.cc
-
19client/mysqlbinlog.cc
-
8client/mysqlcheck.c
-
8client/mysqldump.c
-
8client/mysqlimport.c
-
8client/mysqlshow.c
-
8client/mysqlslap.c
-
8client/mysqltest.cc
-
6cmake/install_layout.cmake
-
8extra/mariabackup/xtrabackup.cc
-
9include/m_string.h
-
2include/mysql.h.pp
-
2include/typelib.h
-
3libmysqld/libmysqld.c
-
24mysql-test/r/func_set.result
-
25mysql-test/r/group_by.result
-
15mysql-test/r/having.result
-
13mysql-test/r/join_outer.result
-
13mysql-test/r/join_outer_jcl6.result
-
14mysql-test/r/view.result
-
6mysql-test/suite/innodb/r/innodb-autoinc.result
-
29mysql-test/suite/innodb/r/innodb-index-debug.result
-
5mysql-test/suite/innodb/t/innodb-autoinc.test
-
39mysql-test/suite/innodb/t/innodb-index-debug.test
-
7mysql-test/suite/mariabackup/apply-log-only-incr.result
-
7mysql-test/suite/mariabackup/apply-log-only-incr.test
-
37mysql-test/suite/parts/inc/part_alter_values.inc
-
44mysql-test/suite/parts/r/partition_alter_innodb.result
-
44mysql-test/suite/parts/r/partition_alter_maria.result
-
44mysql-test/suite/parts/r/partition_alter_myisam.result
-
4mysql-test/suite/parts/t/partition_alter_innodb.test
-
3mysql-test/suite/parts/t/partition_alter_maria.test
-
18mysql-test/suite/parts/t/partition_alter_myisam.test
-
19mysql-test/suite/plugins/r/binlog-simple_plugin_check.result
-
31mysql-test/suite/plugins/t/binlog-simple_plugin_check.test
-
543mysql-test/suite/roles/flush_roles-12366.result
-
379mysql-test/suite/roles/flush_roles-12366.test
-
52mysql-test/suite/roles/set_role-13655.result
-
49mysql-test/suite/roles/set_role-13655.test
-
18mysql-test/t/func_set.test
-
26mysql-test/t/group_by.test
-
17mysql-test/t/having.test
-
14mysql-test/t/join_outer.test
-
12mysql-test/t/view.test
-
2mysql-test/t/xml.test
-
6mysys/my_default.c
-
2mysys/my_malloc.c
-
12mysys/typelib.c
-
4scripts/mysqld_safe.sh
-
2scripts/wsrep_sst_xtrabackup-v2.sh
-
7sql-common/client.c
-
2sql/events.cc
-
3sql/filesort.cc
-
2sql/filesort_utils.cc
-
3sql/item.cc
-
13sql/item_cmpfunc.cc
-
1sql/item_cmpfunc.h
-
2sql/item_sum.cc
-
21sql/mysqld.cc
-
20sql/partition_info.cc
-
1sql/partition_info.h
-
48sql/share/errmsg-utf8.txt
-
77sql/sql_acl.cc
-
49sql/sql_connect.cc
-
11sql/sql_partition.cc
-
8sql/sql_yacc.yy
-
8sql/table.cc
-
6storage/innobase/include/trx0rec.h
-
2storage/innobase/include/trx0sys.ic
-
33storage/innobase/row/row0log.cc
-
6storage/innobase/trx/trx0rec.cc
-
2storage/innobase/trx/trx0sys.cc
-
3storage/xtradb/fil/fil0fil.cc
-
6storage/xtradb/include/trx0rec.h
-
3storage/xtradb/include/trx0sys.ic
-
33storage/xtradb/row/row0log.cc
-
6storage/xtradb/trx/trx0rec.cc
-
5storage/xtradb/trx/trx0sys.cc
-
2strings/CMakeLists.txt
-
8strings/ctype-tis620.c
-
6strings/my_vsnprintf.c
-
41strings/str_alloc.c
-
9strings/xml.c
-
15support-files/CMakeLists.txt
-
1support-files/sysusers.conf.in
-
1support-files/tmpfiles.conf.in
@ -0,0 +1,37 @@ |
|||
--echo # |
|||
--echo # MDEV-14641 Incompatible key or row definition between the MariaDB .frm file and the information in the storage engine |
|||
--echo # |
|||
|
|||
--eval CREATE TABLE t1 (i INT) ENGINE=$engine PARTITION BY LIST(i) (PARTITION p0 VALUES IN (1), PARTITION p1 VALUES IN (2)); |
|||
ALTER TABLE t1 ROW_FORMAT=COMPRESSED; |
|||
ALTER TABLE t1 DROP PARTITION p1; |
|||
SELECT * FROM t1; |
|||
|
|||
# Cleanup |
|||
DROP TABLE t1; |
|||
|
|||
|
|||
--echo # |
|||
--echo # MDEV-13788 Server crash when issuing bad SQL partition syntax |
|||
--echo # |
|||
|
|||
--eval CREATE TABLE t1 (id int, d date) ENGINE=$engine PARTITION BY RANGE COLUMNS(d) (PARTITION p1 VALUES LESS THAN (MAXVALUE)) |
|||
SHOW CREATE TABLE t1; |
|||
--error ER_PARTITION_REQUIRES_VALUES_ERROR |
|||
ALTER TABLE t1 REORGANIZE PARTITION p1 INTO |
|||
( |
|||
PARTITION p2, /* Notice no values */ |
|||
PARTITION p3 VALUES LESS THAN (MAXVALUE) |
|||
); |
|||
DROP TABLE t1; |
|||
|
|||
|
|||
--eval CREATE TABLE t1 (id int, d date) ENGINE=$engine PARTITION BY LIST (id) (PARTITION p1 VALUES IN (1,2,3)) |
|||
SHOW CREATE TABLE t1; |
|||
--error ER_PARTITION_REQUIRES_VALUES_ERROR |
|||
ALTER TABLE t1 REORGANIZE PARTITION p1 INTO |
|||
( |
|||
PARTITION p2, /* Notice no values */ |
|||
PARTITION p3 VALUES IN (4,5,6) |
|||
); |
|||
DROP TABLE t1; |
@ -0,0 +1,44 @@ |
|||
# |
|||
# MDEV-14641 Incompatible key or row definition between the MariaDB .frm file and the information in the storage engine |
|||
# |
|||
CREATE TABLE t1 (i INT) ENGINE=InnoDB PARTITION BY LIST(i) (PARTITION p0 VALUES IN (1), PARTITION p1 VALUES IN (2));; |
|||
ALTER TABLE t1 ROW_FORMAT=COMPRESSED; |
|||
ALTER TABLE t1 DROP PARTITION p1; |
|||
SELECT * FROM t1; |
|||
i |
|||
DROP TABLE t1; |
|||
# |
|||
# MDEV-13788 Server crash when issuing bad SQL partition syntax |
|||
# |
|||
CREATE TABLE t1 (id int, d date) ENGINE=InnoDB PARTITION BY RANGE COLUMNS(d) (PARTITION p1 VALUES LESS THAN (MAXVALUE)); |
|||
SHOW CREATE TABLE t1; |
|||
Table Create Table |
|||
t1 CREATE TABLE `t1` ( |
|||
`id` int(11) DEFAULT NULL, |
|||
`d` date DEFAULT NULL |
|||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
|||
PARTITION BY RANGE COLUMNS(`d`) |
|||
(PARTITION `p1` VALUES LESS THAN (MAXVALUE) ENGINE = InnoDB) |
|||
ALTER TABLE t1 REORGANIZE PARTITION p1 INTO |
|||
( |
|||
PARTITION p2, /* Notice no values */ |
|||
PARTITION p3 VALUES LESS THAN (MAXVALUE) |
|||
); |
|||
ERROR HY000: Syntax error: RANGE PARTITIONING requires definition of VALUES LESS THAN for each partition |
|||
DROP TABLE t1; |
|||
CREATE TABLE t1 (id int, d date) ENGINE=InnoDB PARTITION BY LIST (id) (PARTITION p1 VALUES IN (1,2,3)); |
|||
SHOW CREATE TABLE t1; |
|||
Table Create Table |
|||
t1 CREATE TABLE `t1` ( |
|||
`id` int(11) DEFAULT NULL, |
|||
`d` date DEFAULT NULL |
|||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
|||
PARTITION BY LIST (`id`) |
|||
(PARTITION `p1` VALUES IN (1,2,3) ENGINE = InnoDB) |
|||
ALTER TABLE t1 REORGANIZE PARTITION p1 INTO |
|||
( |
|||
PARTITION p2, /* Notice no values */ |
|||
PARTITION p3 VALUES IN (4,5,6) |
|||
); |
|||
ERROR HY000: Syntax error: LIST PARTITIONING requires definition of VALUES IN for each partition |
|||
DROP TABLE t1; |
@ -1,10 +1,44 @@ |
|||
CREATE TABLE t1 (i INT) ENGINE=MYISAM |
|||
PARTITION BY LIST(i) ( |
|||
PARTITION p0 VALUES IN (1), |
|||
PARTITION p1 VALUES IN (2) |
|||
); |
|||
# |
|||
# MDEV-14641 Incompatible key or row definition between the MariaDB .frm file and the information in the storage engine |
|||
# |
|||
CREATE TABLE t1 (i INT) ENGINE=MyISAM PARTITION BY LIST(i) (PARTITION p0 VALUES IN (1), PARTITION p1 VALUES IN (2));; |
|||
ALTER TABLE t1 ROW_FORMAT=COMPRESSED; |
|||
ALTER TABLE t1 DROP PARTITION p1; |
|||
SELECT * FROM t1; |
|||
i |
|||
DROP TABLE t1; |
|||
# |
|||
# MDEV-13788 Server crash when issuing bad SQL partition syntax |
|||
# |
|||
CREATE TABLE t1 (id int, d date) ENGINE=MyISAM PARTITION BY RANGE COLUMNS(d) (PARTITION p1 VALUES LESS THAN (MAXVALUE)); |
|||
SHOW CREATE TABLE t1; |
|||
Table Create Table |
|||
t1 CREATE TABLE `t1` ( |
|||
`id` int(11) DEFAULT NULL, |
|||
`d` date DEFAULT NULL |
|||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
|||
PARTITION BY RANGE COLUMNS(`d`) |
|||
(PARTITION `p1` VALUES LESS THAN (MAXVALUE) ENGINE = MyISAM) |
|||
ALTER TABLE t1 REORGANIZE PARTITION p1 INTO |
|||
( |
|||
PARTITION p2, /* Notice no values */ |
|||
PARTITION p3 VALUES LESS THAN (MAXVALUE) |
|||
); |
|||
ERROR HY000: Syntax error: RANGE PARTITIONING requires definition of VALUES LESS THAN for each partition |
|||
DROP TABLE t1; |
|||
CREATE TABLE t1 (id int, d date) ENGINE=MyISAM PARTITION BY LIST (id) (PARTITION p1 VALUES IN (1,2,3)); |
|||
SHOW CREATE TABLE t1; |
|||
Table Create Table |
|||
t1 CREATE TABLE `t1` ( |
|||
`id` int(11) DEFAULT NULL, |
|||
`d` date DEFAULT NULL |
|||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
|||
PARTITION BY LIST (`id`) |
|||
(PARTITION `p1` VALUES IN (1,2,3) ENGINE = MyISAM) |
|||
ALTER TABLE t1 REORGANIZE PARTITION p1 INTO |
|||
( |
|||
PARTITION p2, /* Notice no values */ |
|||
PARTITION p3 VALUES IN (4,5,6) |
|||
); |
|||
ERROR HY000: Syntax error: LIST PARTITIONING requires definition of VALUES IN for each partition |
|||
DROP TABLE t1; |
@ -0,0 +1,4 @@ |
|||
--source include/have_innodb.inc |
|||
--source include/have_partition.inc |
|||
--let $engine=InnoDB |
|||
--source inc/part_alter_values.inc |
@ -1,17 +1,3 @@ |
|||
# |
|||
# MDEV-14641 Incompatible key or row definition between the MariaDB .frm file and the information in the storage engine |
|||
# |
|||
|
|||
--source include/have_partition.inc |
|||
|
|||
CREATE TABLE t1 (i INT) ENGINE=MYISAM |
|||
PARTITION BY LIST(i) ( |
|||
PARTITION p0 VALUES IN (1), |
|||
PARTITION p1 VALUES IN (2) |
|||
); |
|||
ALTER TABLE t1 ROW_FORMAT=COMPRESSED; |
|||
ALTER TABLE t1 DROP PARTITION p1; |
|||
SELECT * FROM t1; |
|||
|
|||
# Cleanup |
|||
DROP TABLE t1; |
|||
--let $engine=MyISAM |
|||
--source inc/part_alter_values.inc |
@ -0,0 +1,19 @@ |
|||
INSTALL SONAME "simple_password_check"; |
|||
SELECT PLUGIN_NAME FROM INFORMATION_SCHEMA.PLUGINS |
|||
WHERE PLUGIN_NAME='simple_password_check'; |
|||
PLUGIN_NAME |
|||
simple_password_check |
|||
# |
|||
# MDEV-14031 Password policy causes replication failure |
|||
# |
|||
CREATE USER user1@localhost IDENTIFIED BY 'BsG9#9.cem#!85'; |
|||
CREATE USER user2@localhost IDENTIFIED BY 'bsg9#d.cem#!85'; |
|||
ERROR HY000: Your password does not satisfy the current policy requirements |
|||
DROP USER user1@localhost; |
|||
include/show_binlog_events.inc |
|||
Log_name Pos Event_type Server_id End_log_pos Info |
|||
master-bin.000001 # Gtid # # GTID #-#-# |
|||
master-bin.000001 # Query # # use `test`; CREATE USER user1@localhost IDENTIFIED BY 'BsG9#9.cem#!85' |
|||
master-bin.000001 # Gtid # # GTID #-#-# |
|||
master-bin.000001 # Query # # use `test`; DROP USER user1@localhost |
|||
UNINSTALL PLUGIN simple_password_check; |
@ -0,0 +1,31 @@ |
|||
--source include/not_embedded.inc |
|||
--source include/have_binlog_format_statement.inc |
|||
|
|||
if (!$SIMPLE_PASSWORD_CHECK_SO) { |
|||
skip No SIMPLE_PASSWORD_CHECK plugin; |
|||
} |
|||
|
|||
INSTALL SONAME "simple_password_check"; |
|||
SELECT PLUGIN_NAME FROM INFORMATION_SCHEMA.PLUGINS |
|||
WHERE PLUGIN_NAME='simple_password_check'; |
|||
|
|||
|
|||
--echo # |
|||
--echo # MDEV-14031 Password policy causes replication failure |
|||
--echo # |
|||
|
|||
--disable_query_log |
|||
RESET MASTER; # get rid of previous tests binlog |
|||
--enable_query_log |
|||
|
|||
CREATE USER user1@localhost IDENTIFIED BY 'BsG9#9.cem#!85'; |
|||
|
|||
--error ER_NOT_VALID_PASSWORD |
|||
CREATE USER user2@localhost IDENTIFIED BY 'bsg9#d.cem#!85'; |
|||
|
|||
DROP USER user1@localhost; |
|||
|
|||
--let $binlog_file = LAST |
|||
source include/show_binlog_events.inc; |
|||
|
|||
UNINSTALL PLUGIN simple_password_check; |
@ -0,0 +1,543 @@ |
|||
# |
|||
# MDEV-12366: FLUSH PRIVILEGES can break hierarchy of roles |
|||
# |
|||
# This testcase contains a user, who is granted a master role |
|||
# operations_cluster. operations_cluster is granted 8 different roles |
|||
# who in turn each have 4 different roles granted to them. |
|||
# |
|||
# Only the leaf roles contain privileges to access databases. |
|||
# Make sure the user has access to all databases if the master role |
|||
# is granted to him. |
|||
# |
|||
CREATE USER u; |
|||
CREATE ROLE operations_cluster; |
|||
GRANT operations_cluster TO u; |
|||
CREATE DATABASE bob_live_sg; |
|||
CREATE TABLE bob_live_sg.a (i INT(10)); |
|||
CREATE TABLE bob_live_sg.b (i INT(10)); |
|||
CREATE TABLE bob_live_sg.c (i INT(10)); |
|||
CREATE TABLE bob_live_sg.d (i INT(10)); |
|||
CREATE DATABASE oms_live_sg; |
|||
CREATE TABLE oms_live_sg.a (i INT(10)); |
|||
CREATE TABLE oms_live_sg.b (i INT(10)); |
|||
CREATE TABLE oms_live_sg.c (i INT(10)); |
|||
CREATE TABLE oms_live_sg.d (i INT(10)); |
|||
CREATE DATABASE bob_live_ph; |
|||
CREATE TABLE bob_live_ph.a (i INT(10)); |
|||
CREATE TABLE bob_live_ph.b (i INT(10)); |
|||
CREATE TABLE bob_live_ph.c (i INT(10)); |
|||
CREATE TABLE bob_live_ph.d (i INT(10)); |
|||
CREATE DATABASE oms_live_ph; |
|||
CREATE TABLE oms_live_ph.a (i INT(10)); |
|||
CREATE TABLE oms_live_ph.b (i INT(10)); |
|||
CREATE TABLE oms_live_ph.c (i INT(10)); |
|||
CREATE TABLE oms_live_ph.d (i INT(10)); |
|||
CREATE DATABASE bob_live_id; |
|||
CREATE TABLE bob_live_id.a (i INT(10)); |
|||
CREATE TABLE bob_live_id.b (i INT(10)); |
|||
CREATE TABLE bob_live_id.c (i INT(10)); |
|||
CREATE TABLE bob_live_id.d (i INT(10)); |
|||
CREATE DATABASE oms_live_id; |
|||
CREATE TABLE oms_live_id.a (i INT(10)); |
|||
CREATE TABLE oms_live_id.b (i INT(10)); |
|||
CREATE TABLE oms_live_id.c (i INT(10)); |
|||
CREATE TABLE oms_live_id.d (i INT(10)); |
|||
CREATE DATABASE bob_live_hk; |
|||
CREATE TABLE bob_live_hk.a (i INT(10)); |
|||
CREATE TABLE bob_live_hk.b (i INT(10)); |
|||
CREATE TABLE bob_live_hk.c (i INT(10)); |
|||
CREATE TABLE bob_live_hk.d (i INT(10)); |
|||
CREATE DATABASE oms_live_hk; |
|||
CREATE TABLE oms_live_hk.a (i INT(10)); |
|||
CREATE TABLE oms_live_hk.b (i INT(10)); |
|||
CREATE TABLE oms_live_hk.c (i INT(10)); |
|||
CREATE TABLE oms_live_hk.d (i INT(10)); |
|||
CREATE DATABASE bob_live_vn; |
|||
CREATE TABLE bob_live_vn.a (i INT(10)); |
|||
CREATE TABLE bob_live_vn.b (i INT(10)); |
|||
CREATE TABLE bob_live_vn.c (i INT(10)); |
|||
CREATE TABLE bob_live_vn.d (i INT(10)); |
|||
CREATE DATABASE oms_live_vn; |
|||
CREATE TABLE oms_live_vn.a (i INT(10)); |
|||
CREATE TABLE oms_live_vn.b (i INT(10)); |
|||
CREATE TABLE oms_live_vn.c (i INT(10)); |
|||
CREATE TABLE oms_live_vn.d (i INT(10)); |
|||
CREATE DATABASE bob_live_tw; |
|||
CREATE TABLE bob_live_tw.a (i INT(10)); |
|||
CREATE TABLE bob_live_tw.b (i INT(10)); |
|||
CREATE TABLE bob_live_tw.c (i INT(10)); |
|||
CREATE TABLE bob_live_tw.d (i INT(10)); |
|||
CREATE DATABASE oms_live_tw; |
|||
CREATE TABLE oms_live_tw.a (i INT(10)); |
|||
CREATE TABLE oms_live_tw.b (i INT(10)); |
|||
CREATE TABLE oms_live_tw.c (i INT(10)); |
|||
CREATE TABLE oms_live_tw.d (i INT(10)); |
|||
CREATE DATABASE bob_live_my; |
|||
CREATE TABLE bob_live_my.a (i INT(10)); |
|||
CREATE TABLE bob_live_my.b (i INT(10)); |
|||
CREATE TABLE bob_live_my.c (i INT(10)); |
|||
CREATE TABLE bob_live_my.d (i INT(10)); |
|||
CREATE DATABASE oms_live_my; |
|||
CREATE TABLE oms_live_my.a (i INT(10)); |
|||
CREATE TABLE oms_live_my.b (i INT(10)); |
|||
CREATE TABLE oms_live_my.c (i INT(10)); |
|||
CREATE TABLE oms_live_my.d (i INT(10)); |
|||
CREATE DATABASE bob_live_th; |
|||
CREATE TABLE bob_live_th.a (i INT(10)); |
|||
CREATE TABLE bob_live_th.b (i INT(10)); |
|||
CREATE TABLE bob_live_th.c (i INT(10)); |
|||
CREATE TABLE bob_live_th.d (i INT(10)); |
|||
CREATE DATABASE oms_live_th; |
|||
CREATE TABLE oms_live_th.a (i INT(10)); |
|||
CREATE TABLE oms_live_th.b (i INT(10)); |
|||
CREATE TABLE oms_live_th.c (i INT(10)); |
|||
CREATE TABLE oms_live_th.d (i INT(10)); |
|||
CREATE ROLE a_sg; |
|||
CREATE ROLE b_sg; |
|||
CREATE ROLE c_sg; |
|||
CREATE ROLE d_sg; |
|||
CREATE ROLE operations_sg; |
|||
GRANT a_sg TO operations_sg; |
|||
GRANT b_sg TO operations_sg; |
|||
GRANT c_sg TO operations_sg; |
|||
GRANT d_sg TO operations_sg; |
|||
GRANT SELECT ON bob_live_sg.a TO a_sg; |
|||
GRANT SELECT ON bob_live_sg.b TO b_sg; |
|||
GRANT SELECT ON bob_live_sg.c TO c_sg; |
|||
GRANT SELECT ON bob_live_sg.d TO d_sg; |
|||
GRANT SELECT ON oms_live_sg.a TO a_sg; |
|||
GRANT SELECT ON oms_live_sg.b TO b_sg; |
|||
GRANT SELECT ON oms_live_sg.c TO c_sg; |
|||
GRANT SELECT ON oms_live_sg.d TO d_sg; |
|||
CREATE ROLE a_ph; |
|||
CREATE ROLE b_ph; |
|||
CREATE ROLE c_ph; |
|||
CREATE ROLE d_ph; |
|||
CREATE ROLE operations_ph; |
|||
GRANT a_ph TO operations_ph; |
|||
GRANT b_ph TO operations_ph; |
|||
GRANT c_ph TO operations_ph; |
|||
GRANT d_ph TO operations_ph; |
|||
GRANT SELECT ON bob_live_ph.a TO a_ph; |
|||
GRANT SELECT ON bob_live_ph.b TO b_ph; |
|||
GRANT SELECT ON bob_live_ph.c TO c_ph; |
|||
GRANT SELECT ON bob_live_ph.d TO d_ph; |
|||
GRANT SELECT ON oms_live_ph.a TO a_ph; |
|||
GRANT SELECT ON oms_live_ph.b TO b_ph; |
|||
GRANT SELECT ON oms_live_ph.c TO c_ph; |
|||
GRANT SELECT ON oms_live_ph.d TO d_ph; |
|||
CREATE ROLE a_id; |
|||
CREATE ROLE b_id; |
|||
CREATE ROLE c_id; |
|||
CREATE ROLE d_id; |
|||
CREATE ROLE operations_id; |
|||
GRANT a_id TO operations_id; |
|||
GRANT b_id TO operations_id; |
|||
GRANT c_id TO operations_id; |
|||
GRANT d_id TO operations_id; |
|||
GRANT SELECT ON bob_live_id.a TO a_id; |
|||
GRANT SELECT ON bob_live_id.b TO b_id; |
|||
GRANT SELECT ON bob_live_id.c TO c_id; |
|||
GRANT SELECT ON bob_live_id.d TO d_id; |
|||
GRANT SELECT ON oms_live_id.a TO a_id; |
|||
GRANT SELECT ON oms_live_id.b TO b_id; |
|||
GRANT SELECT ON oms_live_id.c TO c_id; |
|||
GRANT SELECT ON oms_live_id.d TO d_id; |
|||
CREATE ROLE a_hk; |
|||
CREATE ROLE b_hk; |
|||
CREATE ROLE c_hk; |
|||
CREATE ROLE d_hk; |
|||
CREATE ROLE operations_hk; |
|||
GRANT a_hk TO operations_hk; |
|||
GRANT b_hk TO operations_hk; |
|||
GRANT c_hk TO operations_hk; |
|||
GRANT d_hk TO operations_hk; |
|||
GRANT SELECT ON bob_live_hk.a TO a_hk; |
|||
GRANT SELECT ON bob_live_hk.b TO b_hk; |
|||
GRANT SELECT ON bob_live_hk.c TO c_hk; |
|||
GRANT SELECT ON bob_live_hk.d TO d_hk; |
|||
GRANT SELECT ON oms_live_hk.a TO a_hk; |
|||
GRANT SELECT ON oms_live_hk.b TO b_hk; |
|||
GRANT SELECT ON oms_live_hk.c TO c_hk; |
|||
GRANT SELECT ON oms_live_hk.d TO d_hk; |
|||
CREATE ROLE a_vn; |
|||
CREATE ROLE b_vn; |
|||
CREATE ROLE c_vn; |
|||
CREATE ROLE d_vn; |
|||
CREATE ROLE operations_vn; |
|||
GRANT a_vn TO operations_vn; |
|||
GRANT b_vn TO operations_vn; |
|||
GRANT c_vn TO operations_vn; |
|||
GRANT d_vn TO operations_vn; |
|||
GRANT SELECT ON bob_live_vn.a TO a_vn; |
|||
GRANT SELECT ON bob_live_vn.b TO b_vn; |
|||
GRANT SELECT ON bob_live_vn.c TO c_vn; |
|||
GRANT SELECT ON bob_live_vn.d TO d_vn; |
|||
GRANT SELECT ON oms_live_vn.a TO a_vn; |
|||
GRANT SELECT ON oms_live_vn.b TO b_vn; |
|||
GRANT SELECT ON oms_live_vn.c TO c_vn; |
|||
GRANT SELECT ON oms_live_vn.d TO d_vn; |
|||
CREATE ROLE a_tw; |
|||
CREATE ROLE b_tw; |
|||
CREATE ROLE c_tw; |
|||
CREATE ROLE d_tw; |
|||
CREATE ROLE operations_tw; |
|||
GRANT a_tw TO operations_tw; |
|||
GRANT b_tw TO operations_tw; |
|||
GRANT c_tw TO operations_tw; |
|||
GRANT d_tw TO operations_tw; |
|||
GRANT SELECT ON bob_live_tw.a TO a_tw; |
|||
GRANT SELECT ON bob_live_tw.b TO b_tw; |
|||
GRANT SELECT ON bob_live_tw.c TO c_tw; |
|||
GRANT SELECT ON bob_live_tw.d TO d_tw; |
|||
GRANT SELECT ON oms_live_tw.a TO a_tw; |
|||
GRANT SELECT ON oms_live_tw.b TO b_tw; |
|||
GRANT SELECT ON oms_live_tw.c TO c_tw; |
|||
GRANT SELECT ON oms_live_tw.d TO d_tw; |
|||
CREATE ROLE a_my; |
|||
CREATE ROLE b_my; |
|||
CREATE ROLE c_my; |
|||
CREATE ROLE d_my; |
|||
CREATE ROLE operations_my; |
|||
GRANT a_my TO operations_my; |
|||
GRANT b_my TO operations_my; |
|||
GRANT c_my TO operations_my; |
|||
GRANT d_my TO operations_my; |
|||
GRANT SELECT ON bob_live_my.a TO a_my; |
|||
GRANT SELECT ON bob_live_my.b TO b_my; |
|||
GRANT SELECT ON bob_live_my.c TO c_my; |
|||
GRANT SELECT ON bob_live_my.d TO d_my; |
|||
GRANT SELECT ON oms_live_my.a TO a_my; |
|||
GRANT SELECT ON oms_live_my.b TO b_my; |
|||
GRANT SELECT ON oms_live_my.c TO c_my; |
|||
GRANT SELECT ON oms_live_my.d TO d_my; |
|||
CREATE ROLE a_th; |
|||
CREATE ROLE b_th; |
|||
CREATE ROLE c_th; |
|||
CREATE ROLE d_th; |
|||
CREATE ROLE operations_th; |
|||
GRANT a_th TO operations_th; |
|||
GRANT b_th TO operations_th; |
|||
GRANT c_th TO operations_th; |
|||
GRANT d_th TO operations_th; |
|||
GRANT SELECT ON bob_live_th.a TO a_th; |
|||
GRANT SELECT ON bob_live_th.b TO b_th; |
|||
GRANT SELECT ON bob_live_th.c TO c_th; |
|||
GRANT SELECT ON bob_live_th.d TO d_th; |
|||
GRANT SELECT ON oms_live_th.a TO a_th; |
|||
GRANT SELECT ON oms_live_th.b TO b_th; |
|||
GRANT SELECT ON oms_live_th.c TO c_th; |
|||
GRANT SELECT ON oms_live_th.d TO d_th; |
|||
GRANT operations_sg TO operations_cluster; |
|||
GRANT operations_ph TO operations_cluster; |
|||
GRANT operations_id TO operations_cluster; |
|||
GRANT operations_hk TO operations_cluster; |
|||
GRANT operations_vn TO operations_cluster; |
|||
GRANT operations_tw TO operations_cluster; |
|||
GRANT operations_my TO operations_cluster; |
|||
GRANT operations_th TO operations_cluster; |
|||
connect con1,localhost,u,,; |
|||
SHOW DATABASES; |
|||
Database |
|||
information_schema |
|||
test |
|||
SET ROLE operations_cluster; |
|||
SHOW DATABASES; |
|||
Database |
|||
bob_live_hk |
|||
bob_live_id |
|||
bob_live_my |
|||
bob_live_ph |
|||
bob_live_sg |
|||
bob_live_th |
|||
bob_live_tw |
|||
bob_live_vn |
|||
information_schema |
|||
oms_live_hk |
|||
oms_live_id |
|||
oms_live_my |
|||
oms_live_ph |
|||
oms_live_sg |
|||
oms_live_th |
|||
oms_live_tw |
|||
oms_live_vn |
|||
test |
|||
SELECT COUNT(1) FROM oms_live_sg.a; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_sg.b; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_sg.c; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_sg.d; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_ph.a; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_ph.b; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_ph.c; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_ph.d; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_id.a; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_id.b; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_id.c; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_id.d; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_hk.a; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_hk.b; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_hk.c; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_hk.d; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_vn.a; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_vn.b; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_vn.c; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_vn.d; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_tw.a; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_tw.b; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_tw.c; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_tw.d; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_my.a; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_my.b; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_my.c; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_my.d; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_th.a; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_th.b; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_th.c; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_th.d; |
|||
COUNT(1) |
|||
0 |
|||
connect con2,localhost,root,,; |
|||
FLUSH PRIVILEGES; |
|||
connect con3,localhost,u,,; |
|||
SHOW DATABASES; |
|||
Database |
|||
information_schema |
|||
test |
|||
SET ROLE operations_cluster; |
|||
SHOW DATABASES; |
|||
Database |
|||
bob_live_hk |
|||
bob_live_id |
|||
bob_live_my |
|||
bob_live_ph |
|||
bob_live_sg |
|||
bob_live_th |
|||
bob_live_tw |
|||
bob_live_vn |
|||
information_schema |
|||
oms_live_hk |
|||
oms_live_id |
|||
oms_live_my |
|||
oms_live_ph |
|||
oms_live_sg |
|||
oms_live_th |
|||
oms_live_tw |
|||
oms_live_vn |
|||
test |
|||
SELECT COUNT(1) FROM oms_live_sg.a; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_sg.b; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_sg.c; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_sg.d; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_ph.a; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_ph.b; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_ph.c; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_ph.d; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_id.a; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_id.b; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_id.c; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_id.d; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_hk.a; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_hk.b; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_hk.c; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_hk.d; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_vn.a; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_vn.b; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_vn.c; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_vn.d; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_tw.a; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_tw.b; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_tw.c; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_tw.d; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_my.a; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_my.b; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_my.c; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_my.d; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_th.a; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_th.b; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_th.c; |
|||
COUNT(1) |
|||
0 |
|||
SELECT COUNT(1) FROM oms_live_th.d; |
|||
COUNT(1) |
|||
0 |
|||
connect con4,localhost,root,,; |
|||
DROP DATABASE bob_live_sg; |
|||
DROP DATABASE oms_live_sg; |
|||
DROP DATABASE bob_live_ph; |
|||
DROP DATABASE oms_live_ph; |
|||
DROP DATABASE bob_live_id; |
|||
DROP DATABASE oms_live_id; |
|||
DROP DATABASE bob_live_hk; |
|||
DROP DATABASE oms_live_hk; |
|||
DROP DATABASE bob_live_vn; |
|||
DROP DATABASE oms_live_vn; |
|||
DROP DATABASE bob_live_tw; |
|||
DROP DATABASE oms_live_tw; |
|||
DROP DATABASE bob_live_my; |
|||
DROP DATABASE oms_live_my; |
|||
DROP DATABASE bob_live_th; |
|||
DROP DATABASE oms_live_th; |
|||
DROP ROLE operations_sg; |
|||
DROP ROLE a_sg; |
|||
DROP ROLE b_sg; |
|||
DROP ROLE c_sg; |
|||
DROP ROLE d_sg; |
|||
DROP ROLE operations_ph; |
|||
DROP ROLE a_ph; |
|||
DROP ROLE b_ph; |
|||
DROP ROLE c_ph; |
|||
DROP ROLE d_ph; |
|||
DROP ROLE operations_id; |
|||
DROP ROLE a_id; |
|||
DROP ROLE b_id; |
|||
DROP ROLE c_id; |
|||
DROP ROLE d_id; |
|||
DROP ROLE operations_hk; |
|||
DROP ROLE a_hk; |
|||
DROP ROLE b_hk; |
|||
DROP ROLE c_hk; |
|||
DROP ROLE d_hk; |
|||
DROP ROLE operations_vn; |
|||
DROP ROLE a_vn; |
|||
DROP ROLE b_vn; |
|||
DROP ROLE c_vn; |
|||
DROP ROLE d_vn; |
|||
DROP ROLE operations_tw; |
|||
DROP ROLE a_tw; |
|||
DROP ROLE b_tw; |
|||
DROP ROLE c_tw; |
|||
DROP ROLE d_tw; |
|||
DROP ROLE operations_my; |
|||
DROP ROLE a_my; |
|||
DROP ROLE b_my; |
|||
DROP ROLE c_my; |
|||
DROP ROLE d_my; |
|||
DROP ROLE operations_th; |
|||
DROP ROLE a_th; |
|||
DROP ROLE b_th; |
|||
DROP ROLE c_th; |
|||
DROP ROLE d_th; |
|||
DROP USER u; |
|||
DROP ROLE operations_cluster; |
@ -0,0 +1,379 @@ |
|||
--source include/not_embedded.inc |
|||
--echo # |
|||
--echo # MDEV-12366: FLUSH PRIVILEGES can break hierarchy of roles |
|||
--echo # |
|||
--echo # This testcase contains a user, who is granted a master role |
|||
--echo # operations_cluster. operations_cluster is granted 8 different roles |
|||
--echo # who in turn each have 4 different roles granted to them. |
|||
--echo # |
|||
--echo # Only the leaf roles contain privileges to access databases. |
|||
--echo # Make sure the user has access to all databases if the master role |
|||
--echo # is granted to him. |
|||
--echo # |
|||
CREATE USER u; |
|||
CREATE ROLE operations_cluster; |
|||
GRANT operations_cluster TO u; |
|||
CREATE DATABASE bob_live_sg; |
|||
CREATE TABLE bob_live_sg.a (i INT(10)); |
|||
CREATE TABLE bob_live_sg.b (i INT(10)); |
|||
CREATE TABLE bob_live_sg.c (i INT(10)); |
|||
CREATE TABLE bob_live_sg.d (i INT(10)); |
|||
CREATE DATABASE oms_live_sg; |
|||
CREATE TABLE oms_live_sg.a (i INT(10)); |
|||
CREATE TABLE oms_live_sg.b (i INT(10)); |
|||
CREATE TABLE oms_live_sg.c (i INT(10)); |
|||
CREATE TABLE oms_live_sg.d (i INT(10)); |
|||
CREATE DATABASE bob_live_ph; |
|||
CREATE TABLE bob_live_ph.a (i INT(10)); |
|||
CREATE TABLE bob_live_ph.b (i INT(10)); |
|||
CREATE TABLE bob_live_ph.c (i INT(10)); |
|||
CREATE TABLE bob_live_ph.d (i INT(10)); |
|||
CREATE DATABASE oms_live_ph; |
|||
CREATE TABLE oms_live_ph.a (i INT(10)); |
|||
CREATE TABLE oms_live_ph.b (i INT(10)); |
|||
CREATE TABLE oms_live_ph.c (i INT(10)); |
|||
CREATE TABLE oms_live_ph.d (i INT(10)); |
|||
CREATE DATABASE bob_live_id; |
|||
CREATE TABLE bob_live_id.a (i INT(10)); |
|||
CREATE TABLE bob_live_id.b (i INT(10)); |
|||
CREATE TABLE bob_live_id.c (i INT(10)); |
|||
CREATE TABLE bob_live_id.d (i INT(10)); |
|||
CREATE DATABASE oms_live_id; |
|||
CREATE TABLE oms_live_id.a (i INT(10)); |
|||
CREATE TABLE oms_live_id.b (i INT(10)); |
|||
CREATE TABLE oms_live_id.c (i INT(10)); |
|||
CREATE TABLE oms_live_id.d (i INT(10)); |
|||
CREATE DATABASE bob_live_hk; |
|||
CREATE TABLE bob_live_hk.a (i INT(10)); |
|||
CREATE TABLE bob_live_hk.b (i INT(10)); |
|||
CREATE TABLE bob_live_hk.c (i INT(10)); |
|||
CREATE TABLE bob_live_hk.d (i INT(10)); |
|||
CREATE DATABASE oms_live_hk; |
|||
CREATE TABLE oms_live_hk.a (i INT(10)); |
|||
CREATE TABLE oms_live_hk.b (i INT(10)); |
|||
CREATE TABLE oms_live_hk.c (i INT(10)); |
|||
CREATE TABLE oms_live_hk.d (i INT(10)); |
|||
CREATE DATABASE bob_live_vn; |
|||
CREATE TABLE bob_live_vn.a (i INT(10)); |
|||
CREATE TABLE bob_live_vn.b (i INT(10)); |
|||
CREATE TABLE bob_live_vn.c (i INT(10)); |
|||
CREATE TABLE bob_live_vn.d (i INT(10)); |
|||
CREATE DATABASE oms_live_vn; |
|||
CREATE TABLE oms_live_vn.a (i INT(10)); |
|||
CREATE TABLE oms_live_vn.b (i INT(10)); |
|||
CREATE TABLE oms_live_vn.c (i INT(10)); |
|||
CREATE TABLE oms_live_vn.d (i INT(10)); |
|||
CREATE DATABASE bob_live_tw; |
|||
CREATE TABLE bob_live_tw.a (i INT(10)); |
|||
CREATE TABLE bob_live_tw.b (i INT(10)); |
|||
CREATE TABLE bob_live_tw.c (i INT(10)); |
|||
CREATE TABLE bob_live_tw.d (i INT(10)); |
|||
CREATE DATABASE oms_live_tw; |
|||
CREATE TABLE oms_live_tw.a (i INT(10)); |
|||
CREATE TABLE oms_live_tw.b (i INT(10)); |
|||
CREATE TABLE oms_live_tw.c (i INT(10)); |
|||
CREATE TABLE oms_live_tw.d (i INT(10)); |
|||
CREATE DATABASE bob_live_my; |
|||
CREATE TABLE bob_live_my.a (i INT(10)); |
|||
CREATE TABLE bob_live_my.b (i INT(10)); |
|||
CREATE TABLE bob_live_my.c (i INT(10)); |
|||
CREATE TABLE bob_live_my.d (i INT(10)); |
|||
CREATE DATABASE oms_live_my; |
|||
CREATE TABLE oms_live_my.a (i INT(10)); |
|||
CREATE TABLE oms_live_my.b (i INT(10)); |
|||
CREATE TABLE oms_live_my.c (i INT(10)); |
|||
CREATE TABLE oms_live_my.d (i INT(10)); |
|||
CREATE DATABASE bob_live_th; |
|||
CREATE TABLE bob_live_th.a (i INT(10)); |
|||
CREATE TABLE bob_live_th.b (i INT(10)); |
|||
CREATE TABLE bob_live_th.c (i INT(10)); |
|||
CREATE TABLE bob_live_th.d (i INT(10)); |
|||
CREATE DATABASE oms_live_th; |
|||
CREATE TABLE oms_live_th.a (i INT(10)); |
|||
CREATE TABLE oms_live_th.b (i INT(10)); |
|||
CREATE TABLE oms_live_th.c (i INT(10)); |
|||
CREATE TABLE oms_live_th.d (i INT(10)); |
|||
CREATE ROLE a_sg; |
|||
CREATE ROLE b_sg; |
|||
CREATE ROLE c_sg; |
|||
CREATE ROLE d_sg; |
|||
CREATE ROLE operations_sg; |
|||
GRANT a_sg TO operations_sg; |
|||
GRANT b_sg TO operations_sg; |
|||
GRANT c_sg TO operations_sg; |
|||
GRANT d_sg TO operations_sg; |
|||
GRANT SELECT ON bob_live_sg.a TO a_sg; |
|||
GRANT SELECT ON bob_live_sg.b TO b_sg; |
|||
GRANT SELECT ON bob_live_sg.c TO c_sg; |
|||
GRANT SELECT ON bob_live_sg.d TO d_sg; |
|||
GRANT SELECT ON oms_live_sg.a TO a_sg; |
|||
GRANT SELECT ON oms_live_sg.b TO b_sg; |
|||
GRANT SELECT ON oms_live_sg.c TO c_sg; |
|||
GRANT SELECT ON oms_live_sg.d TO d_sg; |
|||
CREATE ROLE a_ph; |
|||
CREATE ROLE b_ph; |
|||
CREATE ROLE c_ph; |
|||
CREATE ROLE d_ph; |
|||
CREATE ROLE operations_ph; |
|||
GRANT a_ph TO operations_ph; |
|||
GRANT b_ph TO operations_ph; |
|||
GRANT c_ph TO operations_ph; |
|||
GRANT d_ph TO operations_ph; |
|||
GRANT SELECT ON bob_live_ph.a TO a_ph; |
|||
GRANT SELECT ON bob_live_ph.b TO b_ph; |
|||
GRANT SELECT ON bob_live_ph.c TO c_ph; |
|||
GRANT SELECT ON bob_live_ph.d TO d_ph; |
|||
GRANT SELECT ON oms_live_ph.a TO a_ph; |
|||
GRANT SELECT ON oms_live_ph.b TO b_ph; |
|||
GRANT SELECT ON oms_live_ph.c TO c_ph; |
|||
GRANT SELECT ON oms_live_ph.d TO d_ph; |
|||
CREATE ROLE a_id; |
|||
CREATE ROLE b_id; |
|||
CREATE ROLE c_id; |
|||
CREATE ROLE d_id; |
|||
CREATE ROLE operations_id; |
|||
GRANT a_id TO operations_id; |
|||
GRANT b_id TO operations_id; |
|||
GRANT c_id TO operations_id; |
|||
GRANT d_id TO operations_id; |
|||
GRANT SELECT ON bob_live_id.a TO a_id; |
|||
GRANT SELECT ON bob_live_id.b TO b_id; |
|||
GRANT SELECT ON bob_live_id.c TO c_id; |
|||
GRANT SELECT ON bob_live_id.d TO d_id; |
|||
GRANT SELECT ON oms_live_id.a TO a_id; |
|||
GRANT SELECT ON oms_live_id.b TO b_id; |
|||
GRANT SELECT ON oms_live_id.c TO c_id; |
|||
GRANT SELECT ON oms_live_id.d TO d_id; |
|||
CREATE ROLE a_hk; |
|||
CREATE ROLE b_hk; |
|||
CREATE ROLE c_hk; |
|||
CREATE ROLE d_hk; |
|||
CREATE ROLE operations_hk; |
|||
GRANT a_hk TO operations_hk; |
|||
GRANT b_hk TO operations_hk; |
|||
GRANT c_hk TO operations_hk; |
|||
GRANT d_hk TO operations_hk; |
|||
GRANT SELECT ON bob_live_hk.a TO a_hk; |
|||
GRANT SELECT ON bob_live_hk.b TO b_hk; |
|||
GRANT SELECT ON bob_live_hk.c TO c_hk; |
|||
GRANT SELECT ON bob_live_hk.d TO d_hk; |
|||
GRANT SELECT ON oms_live_hk.a TO a_hk; |
|||
GRANT SELECT ON oms_live_hk.b TO b_hk; |
|||
GRANT SELECT ON oms_live_hk.c TO c_hk; |
|||
GRANT SELECT ON oms_live_hk.d TO d_hk; |
|||
CREATE ROLE a_vn; |
|||
CREATE ROLE b_vn; |
|||
CREATE ROLE c_vn; |
|||
CREATE ROLE d_vn; |
|||
CREATE ROLE operations_vn; |
|||
GRANT a_vn TO operations_vn; |
|||
GRANT b_vn TO operations_vn; |
|||
GRANT c_vn TO operations_vn; |
|||
GRANT d_vn TO operations_vn; |
|||
GRANT SELECT ON bob_live_vn.a TO a_vn; |
|||
GRANT SELECT ON bob_live_vn.b TO b_vn; |
|||
GRANT SELECT ON bob_live_vn.c TO c_vn; |
|||
GRANT SELECT ON bob_live_vn.d TO d_vn; |
|||
GRANT SELECT ON oms_live_vn.a TO a_vn; |
|||
GRANT SELECT ON oms_live_vn.b TO b_vn; |
|||
GRANT SELECT ON oms_live_vn.c TO c_vn; |
|||
GRANT SELECT ON oms_live_vn.d TO d_vn; |
|||
CREATE ROLE a_tw; |
|||
CREATE ROLE b_tw; |
|||
CREATE ROLE c_tw; |
|||
CREATE ROLE d_tw; |
|||
CREATE ROLE operations_tw; |
|||
GRANT a_tw TO operations_tw; |
|||
GRANT b_tw TO operations_tw; |
|||
GRANT c_tw TO operations_tw; |
|||
GRANT d_tw TO operations_tw; |
|||
GRANT SELECT ON bob_live_tw.a TO a_tw; |
|||
GRANT SELECT ON bob_live_tw.b TO b_tw; |
|||
GRANT SELECT ON bob_live_tw.c TO c_tw; |
|||
GRANT SELECT ON bob_live_tw.d TO d_tw; |
|||
GRANT SELECT ON oms_live_tw.a TO a_tw; |
|||
GRANT SELECT ON oms_live_tw.b TO b_tw; |
|||
GRANT SELECT ON oms_live_tw.c TO c_tw; |
|||
GRANT SELECT ON oms_live_tw.d TO d_tw; |
|||
CREATE ROLE a_my; |
|||
CREATE ROLE b_my; |
|||
CREATE ROLE c_my; |
|||
CREATE ROLE d_my; |
|||
CREATE ROLE operations_my; |
|||
GRANT a_my TO operations_my; |
|||
GRANT b_my TO operations_my; |
|||
GRANT c_my TO operations_my; |
|||
GRANT d_my TO operations_my; |
|||
GRANT SELECT ON bob_live_my.a TO a_my; |
|||
GRANT SELECT ON bob_live_my.b TO b_my; |
|||
GRANT SELECT ON bob_live_my.c TO c_my; |
|||
GRANT SELECT ON bob_live_my.d TO d_my; |
|||
GRANT SELECT ON oms_live_my.a TO a_my; |
|||
GRANT SELECT ON oms_live_my.b TO b_my; |
|||
GRANT SELECT ON oms_live_my.c TO c_my; |
|||
GRANT SELECT ON oms_live_my.d TO d_my; |
|||
CREATE ROLE a_th; |
|||
CREATE ROLE b_th; |
|||
CREATE ROLE c_th; |
|||
CREATE ROLE d_th; |
|||
CREATE ROLE operations_th; |
|||
GRANT a_th TO operations_th; |
|||
GRANT b_th TO operations_th; |
|||
GRANT c_th TO operations_th; |
|||
GRANT d_th TO operations_th; |
|||
GRANT SELECT ON bob_live_th.a TO a_th; |
|||
GRANT SELECT ON bob_live_th.b TO b_th; |
|||
GRANT SELECT ON bob_live_th.c TO c_th; |
|||
GRANT SELECT ON bob_live_th.d TO d_th; |
|||
GRANT SELECT ON oms_live_th.a TO a_th; |
|||
GRANT SELECT ON oms_live_th.b TO b_th; |
|||
GRANT SELECT ON oms_live_th.c TO c_th; |
|||
GRANT SELECT ON oms_live_th.d TO d_th; |
|||
GRANT operations_sg TO operations_cluster; |
|||
GRANT operations_ph TO operations_cluster; |
|||
GRANT operations_id TO operations_cluster; |
|||
GRANT operations_hk TO operations_cluster; |
|||
GRANT operations_vn TO operations_cluster; |
|||
GRANT operations_tw TO operations_cluster; |
|||
GRANT operations_my TO operations_cluster; |
|||
GRANT operations_th TO operations_cluster; |
|||
|
|||
connect(con1,localhost,u,,); |
|||
SHOW DATABASES; |
|||
SET ROLE operations_cluster; |
|||
SHOW DATABASES; |
|||
SELECT COUNT(1) FROM oms_live_sg.a; |
|||
SELECT COUNT(1) FROM oms_live_sg.b; |
|||
SELECT COUNT(1) FROM oms_live_sg.c; |
|||
SELECT COUNT(1) FROM oms_live_sg.d; |
|||
SELECT COUNT(1) FROM oms_live_ph.a; |
|||
SELECT COUNT(1) FROM oms_live_ph.b; |
|||
SELECT COUNT(1) FROM oms_live_ph.c; |
|||
SELECT COUNT(1) FROM oms_live_ph.d; |
|||
SELECT COUNT(1) FROM oms_live_id.a; |
|||
SELECT COUNT(1) FROM oms_live_id.b; |
|||
SELECT COUNT(1) FROM oms_live_id.c; |
|||
SELECT COUNT(1) FROM oms_live_id.d; |
|||
SELECT COUNT(1) FROM oms_live_hk.a; |
|||
SELECT COUNT(1) FROM oms_live_hk.b; |
|||
SELECT COUNT(1) FROM oms_live_hk.c; |
|||
SELECT COUNT(1) FROM oms_live_hk.d; |
|||
SELECT COUNT(1) FROM oms_live_vn.a; |
|||
SELECT COUNT(1) FROM oms_live_vn.b; |
|||
SELECT COUNT(1) FROM oms_live_vn.c; |
|||
SELECT COUNT(1) FROM oms_live_vn.d; |
|||
SELECT COUNT(1) FROM oms_live_tw.a; |
|||
SELECT COUNT(1) FROM oms_live_tw.b; |
|||
SELECT COUNT(1) FROM oms_live_tw.c; |
|||
SELECT COUNT(1) FROM oms_live_tw.d; |
|||
SELECT COUNT(1) FROM oms_live_my.a; |
|||
SELECT COUNT(1) FROM oms_live_my.b; |
|||
SELECT COUNT(1) FROM oms_live_my.c; |
|||
SELECT COUNT(1) FROM oms_live_my.d; |
|||
SELECT COUNT(1) FROM oms_live_th.a; |
|||
SELECT COUNT(1) FROM oms_live_th.b; |
|||
SELECT COUNT(1) FROM oms_live_th.c; |
|||
SELECT COUNT(1) FROM oms_live_th.d; |
|||
|
|||
|
|||
connect(con2,localhost,root,,); |
|||
FLUSH PRIVILEGES; |
|||
|
|||
connect(con3,localhost,u,,); |
|||
SHOW DATABASES; |
|||
SET ROLE operations_cluster; |
|||
SHOW DATABASES; |
|||
SELECT COUNT(1) FROM oms_live_sg.a; |
|||
SELECT COUNT(1) FROM oms_live_sg.b; |
|||
SELECT COUNT(1) FROM oms_live_sg.c; |
|||
SELECT COUNT(1) FROM oms_live_sg.d; |
|||
SELECT COUNT(1) FROM oms_live_ph.a; |
|||
SELECT COUNT(1) FROM oms_live_ph.b; |
|||
SELECT COUNT(1) FROM oms_live_ph.c; |
|||
SELECT COUNT(1) FROM oms_live_ph.d; |
|||
SELECT COUNT(1) FROM oms_live_id.a; |
|||
SELECT COUNT(1) FROM oms_live_id.b; |
|||
SELECT COUNT(1) FROM oms_live_id.c; |
|||
SELECT COUNT(1) FROM oms_live_id.d; |
|||
SELECT COUNT(1) FROM oms_live_hk.a; |
|||
SELECT COUNT(1) FROM oms_live_hk.b; |
|||
SELECT COUNT(1) FROM oms_live_hk.c; |
|||
SELECT COUNT(1) FROM oms_live_hk.d; |
|||
SELECT COUNT(1) FROM oms_live_vn.a; |
|||
SELECT COUNT(1) FROM oms_live_vn.b; |
|||
SELECT COUNT(1) FROM oms_live_vn.c; |
|||
SELECT COUNT(1) FROM oms_live_vn.d; |
|||
SELECT COUNT(1) FROM oms_live_tw.a; |
|||
SELECT COUNT(1) FROM oms_live_tw.b; |
|||
SELECT COUNT(1) FROM oms_live_tw.c; |
|||
SELECT COUNT(1) FROM oms_live_tw.d; |
|||
SELECT COUNT(1) FROM oms_live_my.a; |
|||
SELECT COUNT(1) FROM oms_live_my.b; |
|||
SELECT COUNT(1) FROM oms_live_my.c; |
|||
SELECT COUNT(1) FROM oms_live_my.d; |
|||
SELECT COUNT(1) FROM oms_live_th.a; |
|||
SELECT COUNT(1) FROM oms_live_th.b; |
|||
SELECT COUNT(1) FROM oms_live_th.c; |
|||
SELECT COUNT(1) FROM oms_live_th.d; |
|||
|
|||
|
|||
connect(con4,localhost,root,,); |
|||
|
|||
DROP DATABASE bob_live_sg; |
|||
DROP DATABASE oms_live_sg; |
|||
DROP DATABASE bob_live_ph; |
|||
DROP DATABASE oms_live_ph; |
|||
DROP DATABASE bob_live_id; |
|||
DROP DATABASE oms_live_id; |
|||
DROP DATABASE bob_live_hk; |
|||
DROP DATABASE oms_live_hk; |
|||
DROP DATABASE bob_live_vn; |
|||
DROP DATABASE oms_live_vn; |
|||
DROP DATABASE bob_live_tw; |
|||
DROP DATABASE oms_live_tw; |
|||
DROP DATABASE bob_live_my; |
|||
DROP DATABASE oms_live_my; |
|||
DROP DATABASE bob_live_th; |
|||
DROP DATABASE oms_live_th; |
|||
DROP ROLE operations_sg; |
|||
DROP ROLE a_sg; |
|||
DROP ROLE b_sg; |
|||
DROP ROLE c_sg; |
|||
DROP ROLE d_sg; |
|||
DROP ROLE operations_ph; |
|||
DROP ROLE a_ph; |
|||
DROP ROLE b_ph; |
|||
DROP ROLE c_ph; |
|||
DROP ROLE d_ph; |
|||
DROP ROLE operations_id; |
|||
DROP ROLE a_id; |
|||
DROP ROLE b_id; |
|||
DROP ROLE c_id; |
|||
DROP ROLE d_id; |
|||
DROP ROLE operations_hk; |
|||
DROP ROLE a_hk; |
|||
DROP ROLE b_hk; |
|||
DROP ROLE c_hk; |
|||
DROP ROLE d_hk; |
|||
DROP ROLE operations_vn; |
|||
DROP ROLE a_vn; |
|||
DROP ROLE b_vn; |
|||
DROP ROLE c_vn; |
|||
DROP ROLE d_vn; |
|||
DROP ROLE operations_tw; |
|||
DROP ROLE a_tw; |
|||
DROP ROLE b_tw; |
|||
DROP ROLE c_tw; |
|||
DROP ROLE d_tw; |
|||
DROP ROLE operations_my; |
|||
DROP ROLE a_my; |
|||
DROP ROLE b_my; |
|||
DROP ROLE c_my; |
|||
DROP ROLE d_my; |
|||
DROP ROLE operations_th; |
|||
DROP ROLE a_th; |
|||
DROP ROLE b_th; |
|||
DROP ROLE c_th; |
|||
DROP ROLE d_th; |
|||
DROP USER u; |
|||
DROP ROLE operations_cluster; |
@ -0,0 +1,52 @@ |
|||
# |
|||
# MDEV-13655: SET ROLE does not properly grant privileges. |
|||
# |
|||
# We must test that if aditional db privileges get granted to a role |
|||
# which previously inherited privileges from another granted role |
|||
# keep the internal memory structures intact. |
|||
# |
|||
create role simple; |
|||
# |
|||
# First we create an entry with privileges for databases for the simple role. |
|||
# |
|||
grant select, insert, update, delete, lock tables, execute on t.* to simple; |
|||
create role admin; |
|||
# |
|||
# Now we grant the simple role to admin. This means that db privileges |
|||
# should propagate to admin. |
|||
# |
|||
grant simple to admin; |
|||
show grants for admin; |
|||
Grants for admin |
|||
GRANT simple TO 'admin' |
|||
GRANT USAGE ON *.* TO 'admin' |
|||
GRANT USAGE ON *.* TO 'simple' |
|||
GRANT SELECT, INSERT, UPDATE, DELETE, LOCK TABLES, EXECUTE ON `t`.* TO 'simple' |
|||
# |
|||
# Finally, we give the admin all the available privileges for the db. |
|||
# |
|||
grant all on t.* to admin; |
|||
# |
|||
# Create a user to test out the new roles; |
|||
# |
|||
create user foo; |
|||
grant admin to foo; |
|||
connect foo,localhost,foo,,,,,; |
|||
create database t; |
|||
ERROR 42000: Access denied for user 'foo'@'%' to database 't' |
|||
set role admin; |
|||
show grants; |
|||
Grants for foo@% |
|||
GRANT admin TO 'foo'@'%' |
|||
GRANT USAGE ON *.* TO 'foo'@'%' |
|||
GRANT simple TO 'admin' |
|||
GRANT USAGE ON *.* TO 'admin' |
|||
GRANT ALL PRIVILEGES ON `t`.* TO 'admin' |
|||
GRANT USAGE ON *.* TO 'simple' |
|||
GRANT SELECT, INSERT, UPDATE, DELETE, LOCK TABLES, EXECUTE ON `t`.* TO 'simple' |
|||
create database t; |
|||
drop database t; |
|||
connection default; |
|||
drop role simple; |
|||
drop role admin; |
|||
drop user foo; |
@ -0,0 +1,49 @@ |
|||
source include/not_embedded.inc; |
|||
|
|||
--echo # |
|||
--echo # MDEV-13655: SET ROLE does not properly grant privileges. |
|||
--echo # |
|||
--echo # We must test that if aditional db privileges get granted to a role |
|||
--echo # which previously inherited privileges from another granted role |
|||
--echo # keep the internal memory structures intact. |
|||
--echo # |
|||
|
|||
create role simple; |
|||
|
|||
--echo # |
|||
--echo # First we create an entry with privileges for databases for the simple role. |
|||
--echo # |
|||
grant select, insert, update, delete, lock tables, execute on t.* to simple; |
|||
create role admin; |
|||
|
|||
--echo # |
|||
--echo # Now we grant the simple role to admin. This means that db privileges |
|||
--echo # should propagate to admin. |
|||
--echo # |
|||
grant simple to admin; |
|||
show grants for admin; |
|||
|
|||
--echo # |
|||
--echo # Finally, we give the admin all the available privileges for the db. |
|||
--echo # |
|||
grant all on t.* to admin; |
|||
|
|||
--echo # |
|||
--echo # Create a user to test out the new roles; |
|||
--echo # |
|||
create user foo; |
|||
grant admin to foo; |
|||
|
|||
connect (foo,localhost,foo,,,,,); |
|||
--error ER_DBACCESS_DENIED_ERROR |
|||
create database t; |
|||
set role admin; |
|||
show grants; |
|||
create database t; |
|||
drop database t; |
|||
|
|||
connection default; |
|||
|
|||
drop role simple; |
|||
drop role admin; |
|||
drop user foo; |
@ -1,41 +0,0 @@ |
|||
/* Copyright (c) 2005, 2006 MySQL AB |
|||
Copyright (c) 2009-2011, Monty Program Ab |
|||
Use is subject to license terms. |
|||
Copyright (c) 2009-2011, Monty Program Ab |
|||
|
|||
This program is free software; you can redistribute it and/or modify |
|||
it under the terms of the GNU General Public License as published by |
|||
the Free Software Foundation; version 2 of the License. |
|||
|
|||
This program is distributed in the hope that it will be useful, |
|||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
GNU General Public License for more details. |
|||
|
|||
You should have received a copy of the GNU General Public License |
|||
along with this program; if not, write to the Free Software |
|||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ |
|||
|
|||
#include "strings_def.h" |
|||
|
|||
static void *my_str_malloc_default(size_t size) |
|||
{ |
|||
void *ret= malloc(size); |
|||
if (!ret) |
|||
exit(1); |
|||
return ret; |
|||
} |
|||
|
|||
static void my_str_free_default(void *ptr) |
|||
{ |
|||
free(ptr); |
|||
} |
|||
|
|||
void *my_str_realloc_default(void *ptr, size_t size) |
|||
{ |
|||
return realloc(ptr, size); |
|||
} |
|||
|
|||
void *(*my_str_malloc)(size_t)= &my_str_malloc_default; |
|||
void (*my_str_free)(void *)= &my_str_free_default; |
|||
void *(*my_str_realloc)(void *, size_t)= &my_str_realloc_default; |
@ -0,0 +1 @@ |
|||
u @MYSQLD_USER@ - "MariaDB" @MYSQL_DATADIR@ |
@ -0,0 +1 @@ |
|||
d @MYSQL_UNIX_DIR@ 0755 @MYSQLD_USER@ @MYSQLD_USER@ - |
Write
Preview
Loading…
Cancel
Save
Reference in new issue