DBZ-3499 Add support for parsing of GRANT statements with newer MySQL privileges

This commit is contained in:
Tommy Karlsson 2021-05-05 08:52:32 +02:00 committed by Jiri Pechanec
parent 5c722341e2
commit f9028926f8
3 changed files with 91 additions and 6 deletions

View File

@ -1658,13 +1658,90 @@ public void shouldParseCreateAndAlterWithOnUpdate() {
}
@Test
@FixFor("DBZ-1411")
@FixFor({ "DBZ-1411", "DBZ-3499" })
public void shouldParseGrantStatement() {
parser.parse("GRANT ALL PRIVILEGES ON `mysql`.* TO 'mysqluser'@'%'", tables);
parser.parse("GRANT ALL PRIVILEGES ON `mysql`.`t` TO 'mysqluser'@'%'", tables);
parser.parse("GRANT ALL PRIVILEGES ON mysql.t TO 'mysqluser'@'%'", tables);
parser.parse("GRANT ALL PRIVILEGES ON `mysql`.t TO 'mysqluser'@'%'", tables);
parser.parse("GRANT ALL PRIVILEGES ON mysql.`t` TO 'mysqluser'@'%'", tables);
parser.parse("GRANT ALTER ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT ALTER ROUTINE ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT CREATE ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT CREATE TEMPORARY TABLES ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT CREATE ROUTINE ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT CREATE VIEW ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT CREATE USER ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT CREATE TABLESPACE ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT CREATE ROLE ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT DELETE ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT DROP ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT DROP ROLE ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT EVENT ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT EXECUTE ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT FILE ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT GRANT OPTION ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT INDEX ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT INSERT ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT LOCK TABLES ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT PROCESS ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT PROXY ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT REFERENCES ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT RELOAD ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT REPLICATION CLIENT ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT REPLICATION SLAVE ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT REPLICATION REPLICA ON *.* TO 'mysqluser'@'localhost'", tables); // MariaDB
parser.parse("GRANT SELECT ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT SHOW VIEW ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT SHOW DATABASES ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT SHUTDOWN ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT SUPER ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT TRIGGER ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT UPDATE ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT USAGE ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT APPLICATION_PASSWORD_ADMIN ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT AUDIT_ADMIN ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT BACKUP_ADMIN ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT BINLOG_ADMIN ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT BINLOG_ENCRYPTION_ADMIN ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT CLONE_ADMIN ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT CONNECTION_ADMIN ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT ENCRYPTION_KEY_ADMIN ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT FIREWALL_ADMIN ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT FIREWALL_USER ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT FLUSH_OPTIMIZER_COSTS ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT FLUSH_STATUS ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT FLUSH_TABLES ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT FLUSH_USER_RESOURCES ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT GROUP_REPLICATION_ADMIN ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT INNODB_REDO_LOG_ARCHIVE ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT INNODB_REDO_LOG_ENABLE ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT NDB_STORED_USER ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT PERSIST_RO_VARIABLES_ADMIN ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT REPLICATION_APPLIER ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT REPLICATION_SLAVE_ADMIN ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT RESOURCE_GROUP_ADMIN ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT RESOURCE_GROUP_USER ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT ROLE_ADMIN ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT SERVICE_CONNECTION_ADMIN ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT SESSION_VARIABLES_ADMIN ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT SET_USER_ID ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT SHOW_ROUTINE ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT SYSTEM_USER ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT SYSTEM_VARIABLES_ADMIN ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT TABLE_ENCRYPTION_ADMIN ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT VERSION_TOKEN_ADMIN ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT XA_RECOVER_ADMIN ON *.* TO 'mysqluser'@'localhost'", tables);
// MariaDB
parser.parse("GRANT BINLOG_MONITOR ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT BINLOG_REPLAY ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT FEDERATED_ADMIN ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT READ_ONLY_ADMIN ON *.* TO 'mysqluser'@'localhost'", tables);
parser.parse("GRANT REPLICATION_MASTER_ADMIN ON *.* TO 'mysqluser'@'localhost'", tables);
assertThat(tables.size()).isEqualTo(0); // no tables
assertThat(listener.total()).isEqualTo(0);
}

View File

@ -701,8 +701,13 @@ CONNECTION_ADMIN: 'CONNECTION_ADMIN';
ENCRYPTION_KEY_ADMIN: 'ENCRYPTION_KEY_ADMIN';
FIREWALL_ADMIN: 'FIREWALL_ADMIN';
FIREWALL_USER: 'FIREWALL_USER';
FLUSH_OPTIMIZER_COSTS: 'FLUSH_OPTIMIZER_COSTS';
FLUSH_STATUS: 'FLUSH_STATUS';
FLUSH_TABLES: 'FLUSH_TABLES';
FLUSH_USER_RESOURCES: 'FLUSH_USER_RESOURCES';
GROUP_REPLICATION_ADMIN: 'GROUP_REPLICATION_ADMIN';
INNODB_REDO_LOG_ARCHIVE: 'INNODB_REDO_LOG_ARCHIVE';
INNODB_REDO_LOG_ENABLE: 'INNODB_REDO_LOG_ENABLE';
NDB_STORED_USER: 'NDB_STORED_USER';
PERSIST_RO_VARIABLES_ADMIN: 'PERSIST_RO_VARIABLES_ADMIN';
REPLICATION_APPLIER: 'REPLICATION_APPLIER';
@ -710,6 +715,7 @@ REPLICATION_SLAVE_ADMIN: 'REPLICATION_SLAVE_ADMIN';
RESOURCE_GROUP_ADMIN: 'RESOURCE_GROUP_ADMIN';
RESOURCE_GROUP_USER: 'RESOURCE_GROUP_USER';
ROLE_ADMIN: 'ROLE_ADMIN';
SERVICE_CONNECTION_ADMIN: 'SERVICE_CONNECTION_ADMIN';
SESSION_VARIABLES_ADMIN: QUOTE_SYMB? 'SESSION_VARIABLES_ADMIN' QUOTE_SYMB?;
SET_USER_ID: 'SET_USER_ID';
SHOW_ROUTINE: 'SHOW_ROUTINE';

View File

@ -1604,12 +1604,14 @@ privilege
| SELECT
| SHOW (VIEW | DATABASES)
| SHUTDOWN | SUPER | TRIGGER | UPDATE | USAGE
| AUDIT_ADMIN | BACKUP_ADMIN | BINLOG_ADMIN | BINLOG_ENCRYPTION_ADMIN | CLONE_ADMIN
| CONNECTION_ADMIN | ENCRYPTION_KEY_ADMIN | FIREWALL_ADMIN | FIREWALL_USER | GROUP_REPLICATION_ADMIN
| INNODB_REDO_LOG_ARCHIVE | NDB_STORED_USER | PERSIST_RO_VARIABLES_ADMIN | REPLICATION_APPLIER
| APPLICATION_PASSWORD_ADMIN | AUDIT_ADMIN | BACKUP_ADMIN | BINLOG_ADMIN | BINLOG_ENCRYPTION_ADMIN | CLONE_ADMIN
| CONNECTION_ADMIN | ENCRYPTION_KEY_ADMIN | FIREWALL_ADMIN | FIREWALL_USER | FLUSH_OPTIMIZER_COSTS
| FLUSH_STATUS | FLUSH_TABLES | FLUSH_USER_RESOURCES | GROUP_REPLICATION_ADMIN
| INNODB_REDO_LOG_ARCHIVE | INNODB_REDO_LOG_ENABLE | NDB_STORED_USER | PERSIST_RO_VARIABLES_ADMIN | REPLICATION_APPLIER
| REPLICATION_SLAVE_ADMIN | RESOURCE_GROUP_ADMIN | RESOURCE_GROUP_USER | ROLE_ADMIN
| SESSION_VARIABLES_ADMIN | SET_USER_ID | SHOW_ROUTINE | SYSTEM_VARIABLES_ADMIN | TABLE_ENCRYPTION_ADMIN
| VERSION_TOKEN_ADMIN | XA_RECOVER_ADMIN
| SERVICE_CONNECTION_ADMIN
| SESSION_VARIABLES_ADMIN | SET_USER_ID | SHOW_ROUTINE | SYSTEM_USER | SYSTEM_VARIABLES_ADMIN
| TABLE_ENCRYPTION_ADMIN | VERSION_TOKEN_ADMIN | XA_RECOVER_ADMIN
// MariaDB
| BINLOG_MONITOR | BINLOG_REPLAY | FEDERATED_ADMIN | READ_ONLY_ADMIN | REPLICATION_MASTER_ADMIN
;