mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-31 19:06:14 +01:00 
			
		
		
		
	 d671fec431
			
		
	
	
	d671fec431
	
	
	
		
			
			- Moved view checks after privilege tables are fixed. This is to avoid warnings about wrongly defined mysql.proc when checking views. - Don't use stat tables before they have been fixed. - Don't run mysql_fix_view() if 'FOR MYSQL' is used if the view is already a MariaDB view. - Added 'FOR UPGRADE' as an option for 'REPAIR VIEW' to be able to detect if the REPAIR command comes from mariadb_upgrade. In this case we get a warning, instead of an error, if a definer of a view does not exists.
		
			
				
	
	
		
			232 lines
		
	
	
	
		
			14 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			232 lines
		
	
	
	
		
			14 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| #
 | |
| # MDEV-24363 10.4: change definition of mysql.user view
 | |
| # to reflect the correct value from mysql.global_priv
 | |
| # This change was added because mysql.user view definition
 | |
| # was already changed when mariadb.sys was introduced, so
 | |
| # it's decently ok if we change it again to fix mdev-24363
 | |
| #
 | |
| # Test that mysql.user password_expired column
 | |
| # shows the right value as in mysql.global_priv
 | |
| #
 | |
| create user gigi@localhost;
 | |
| show create user gigi@localhost;
 | |
| CREATE USER for gigi@localhost
 | |
| CREATE USER `gigi`@`localhost`
 | |
| select password_expired from mysql.user where user='gigi' and host='localhost';
 | |
| password_expired
 | |
| N
 | |
| alter user gigi@localhost password expire;
 | |
| show create user gigi@localhost;
 | |
| CREATE USER for gigi@localhost
 | |
| CREATE USER `gigi`@`localhost` PASSWORD EXPIRE
 | |
| select password_expired from mysql.user where user='gigi' and host='localhost';
 | |
| password_expired
 | |
| Y
 | |
| drop user gigi@localhost;
 | |
| #
 | |
| # Test that upgrades from 10.4+ versions before this mdev
 | |
| # correctly drop and recreate the mysql.user view
 | |
| #
 | |
| use mysql;
 | |
| set @def = (select view_definition from information_schema.views where table_name='user' and table_schema='mysql');
 | |
| set @trimmed_def = (select trim(trailing 'from `mysql`.`global_priv`' from @def));
 | |
| set @newdef = (select concat(@trimmed_def, ", 'N' AS password_expired from mysql.global_priv"));
 | |
| set @pos = (select instr(@newdef, 'password_expired'));
 | |
| create or replace view user as select `mysql`.`global_priv`.`Host` AS `Host`,`mysql`.`global_priv`.`User` AS `User`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.plugin') in ('mysql_native_password','mysql_old_password'),ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.authentication_string'),''),'') AS `Password`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 1,'Y','N') AS `Select_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 2,'Y','N') AS `Insert_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 4,'Y','N') AS `Update_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 8,'Y','N') AS `Delete_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 16,'Y','N') AS `Create_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 32,'Y','N') AS `Drop_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 64,'Y','N') AS `Reload_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 128,'Y','N') AS `Shutdown_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 256,'Y','N') AS `Process_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 512,'Y','N') AS `File_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 1024,'Y','N') AS `Grant_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 2048,'Y','N') AS `References_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 4096,'Y','N') AS `Index_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 8192,'Y','N') AS `Alter_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 16384,'Y','N') AS `Show_db_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 32768,'Y','N') AS `Super_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 65536,'Y','N') AS `Create_tmp_table_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 131072,'Y','N') AS `Lock_tables_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 262144,'Y','N') AS `Execute_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 524288,'Y','N') AS `Repl_slave_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 1048576,'Y','N') AS `Repl_client_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 2097152,'Y','N') AS `Create_view_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 4194304,'Y','N') AS `Show_view_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 8388608,'Y','N') AS `Create_routine_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 16777216,'Y','N') AS `Alter_routine_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 33554432,'Y','N') AS `Create_user_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 67108864,'Y','N') AS `Event_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 134217728,'Y','N') AS `Trigger_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 268435456,'Y','N') AS `Create_tablespace_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 536870912,'Y','N') AS `Delete_history_priv`,elt(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.ssl_type'),0) + 1,'','ANY','X509','SPECIFIED') AS `ssl_type`,ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.ssl_cipher'),'') AS `ssl_cipher`,ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.x509_issuer'),'') AS `x509_issuer`,ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.x509_subject'),'') AS `x509_subject`,cast(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.max_questions'),0) as unsigned) AS `max_questions`,cast(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.max_updates'),0) as unsigned) AS `max_updates`,cast(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.max_connections'),0) as unsigned) AS `max_connections`,cast(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.max_user_connections'),0) as signed) AS `max_user_connections`,ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.plugin'),'') AS `plugin`,ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.authentication_string'),'') AS `authentication_string`,if(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.password_last_changed'),1) = 0,'Y','N') AS `abcsword_expired`,elt(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.is_role'),0) + 1,'N','Y') AS `is_role`,ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.default_role'),'') AS `default_role`,cast(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.max_statement_time'),0.0) as decimal(12,6)) AS `max_statement_time` , 'N' AS password_expired from mysql.global_priv;;
 | |
| create user gigi@localhost;
 | |
| show create user gigi@localhost;
 | |
| CREATE USER for gigi@localhost
 | |
| CREATE USER `gigi`@`localhost`
 | |
| select password_expired from mysql.user where user='gigi' and host='localhost';
 | |
| password_expired
 | |
| N
 | |
| alter user gigi@localhost password expire;
 | |
| show create user gigi@localhost;
 | |
| CREATE USER for gigi@localhost
 | |
| CREATE USER `gigi`@`localhost` PASSWORD EXPIRE
 | |
| select password_expired from mysql.user where user='gigi' and host='localhost';
 | |
| password_expired
 | |
| N
 | |
| drop user gigi@localhost;
 | |
| # Run mysql_upgrade
 | |
| Phase 1/8: Checking and upgrading mysql database
 | |
| Processing databases
 | |
| mysql
 | |
| mysql.column_stats                                 OK
 | |
| mysql.columns_priv                                 OK
 | |
| mysql.db                                           OK
 | |
| mysql.event                                        OK
 | |
| mysql.func                                         OK
 | |
| mysql.global_priv                                  OK
 | |
| mysql.gtid_slave_pos                               OK
 | |
| mysql.help_category                                OK
 | |
| mysql.help_keyword                                 OK
 | |
| mysql.help_relation                                OK
 | |
| mysql.help_topic                                   OK
 | |
| mysql.index_stats                                  OK
 | |
| mysql.innodb_index_stats
 | |
| Error    : Unknown storage engine 'InnoDB'
 | |
| error    : Corrupt
 | |
| mysql.innodb_table_stats
 | |
| Error    : Unknown storage engine 'InnoDB'
 | |
| error    : Corrupt
 | |
| mysql.plugin                                       OK
 | |
| mysql.proc                                         OK
 | |
| mysql.procs_priv                                   OK
 | |
| mysql.proxies_priv                                 OK
 | |
| mysql.roles_mapping                                OK
 | |
| mysql.servers                                      OK
 | |
| mysql.table_stats                                  OK
 | |
| mysql.tables_priv                                  OK
 | |
| mysql.time_zone                                    OK
 | |
| mysql.time_zone_leap_second                        OK
 | |
| mysql.time_zone_name                               OK
 | |
| mysql.time_zone_transition                         OK
 | |
| mysql.time_zone_transition_type                    OK
 | |
| mysql.transaction_registry
 | |
| Error    : Unknown storage engine 'InnoDB'
 | |
| error    : Corrupt
 | |
| 
 | |
| Repairing tables
 | |
| mysql.innodb_index_stats
 | |
| Error    : Unknown storage engine 'InnoDB'
 | |
| error    : Corrupt
 | |
| mysql.innodb_table_stats
 | |
| Error    : Unknown storage engine 'InnoDB'
 | |
| error    : Corrupt
 | |
| mysql.transaction_registry
 | |
| Error    : Unknown storage engine 'InnoDB'
 | |
| error    : Corrupt
 | |
| Phase 2/8: Installing used storage engines... Skipped
 | |
| Phase 3/8: Running 'mysql_fix_privilege_tables'
 | |
| Phase 4/8: Fixing views
 | |
| mysql.user                                         OK
 | |
| sys.host_summary                                   OK
 | |
| sys.host_summary_by_file_io                        OK
 | |
| sys.host_summary_by_file_io_type                   OK
 | |
| sys.host_summary_by_stages                         OK
 | |
| sys.host_summary_by_statement_latency              OK
 | |
| sys.host_summary_by_statement_type                 OK
 | |
| sys.innodb_buffer_stats_by_schema                  OK
 | |
| sys.innodb_buffer_stats_by_table                   OK
 | |
| sys.innodb_lock_waits                              OK
 | |
| sys.io_by_thread_by_latency                        OK
 | |
| sys.io_global_by_file_by_bytes                     OK
 | |
| sys.io_global_by_file_by_latency                   OK
 | |
| sys.io_global_by_wait_by_bytes                     OK
 | |
| sys.io_global_by_wait_by_latency                   OK
 | |
| sys.latest_file_io                                 OK
 | |
| sys.memory_by_host_by_current_bytes                OK
 | |
| sys.memory_by_thread_by_current_bytes              OK
 | |
| sys.memory_by_user_by_current_bytes                OK
 | |
| sys.memory_global_by_current_bytes                 OK
 | |
| sys.memory_global_total                            OK
 | |
| sys.metrics                                        OK
 | |
| sys.processlist                                    OK
 | |
| sys.ps_check_lost_instrumentation                  OK
 | |
| sys.schema_auto_increment_columns                  OK
 | |
| sys.schema_index_statistics                        OK
 | |
| sys.schema_object_overview                         OK
 | |
| sys.schema_redundant_indexes                       OK
 | |
| sys.schema_table_lock_waits                        OK
 | |
| sys.schema_table_statistics                        OK
 | |
| sys.schema_table_statistics_with_buffer            OK
 | |
| sys.schema_tables_with_full_table_scans            OK
 | |
| sys.schema_unused_indexes                          OK
 | |
| sys.session                                        OK
 | |
| sys.session_ssl_status                             OK
 | |
| sys.statement_analysis                             OK
 | |
| sys.statements_with_errors_or_warnings             OK
 | |
| sys.statements_with_full_table_scans               OK
 | |
| sys.statements_with_runtimes_in_95th_percentile    OK
 | |
| sys.statements_with_sorting                        OK
 | |
| sys.statements_with_temp_tables                    OK
 | |
| sys.user_summary                                   OK
 | |
| sys.user_summary_by_file_io                        OK
 | |
| sys.user_summary_by_file_io_type                   OK
 | |
| sys.user_summary_by_stages                         OK
 | |
| sys.user_summary_by_statement_latency              OK
 | |
| sys.user_summary_by_statement_type                 OK
 | |
| sys.version                                        OK
 | |
| sys.wait_classes_global_by_avg_latency             OK
 | |
| sys.wait_classes_global_by_latency                 OK
 | |
| sys.waits_by_host_by_latency                       OK
 | |
| sys.waits_by_user_by_latency                       OK
 | |
| sys.waits_global_by_latency                        OK
 | |
| sys.x$host_summary                                 OK
 | |
| sys.x$host_summary_by_file_io                      OK
 | |
| sys.x$host_summary_by_file_io_type                 OK
 | |
| sys.x$host_summary_by_stages                       OK
 | |
| sys.x$host_summary_by_statement_latency            OK
 | |
| sys.x$host_summary_by_statement_type               OK
 | |
| sys.x$innodb_buffer_stats_by_schema                OK
 | |
| sys.x$innodb_buffer_stats_by_table                 OK
 | |
| sys.x$innodb_lock_waits                            OK
 | |
| sys.x$io_by_thread_by_latency                      OK
 | |
| sys.x$io_global_by_file_by_bytes                   OK
 | |
| sys.x$io_global_by_file_by_latency                 OK
 | |
| sys.x$io_global_by_wait_by_bytes                   OK
 | |
| sys.x$io_global_by_wait_by_latency                 OK
 | |
| sys.x$latest_file_io                               OK
 | |
| sys.x$memory_by_host_by_current_bytes              OK
 | |
| sys.x$memory_by_thread_by_current_bytes            OK
 | |
| sys.x$memory_by_user_by_current_bytes              OK
 | |
| sys.x$memory_global_by_current_bytes               OK
 | |
| sys.x$memory_global_total                          OK
 | |
| sys.x$processlist                                  OK
 | |
| sys.x$ps_digest_95th_percentile_by_avg_us          OK
 | |
| sys.x$ps_digest_avg_latency_distribution           OK
 | |
| sys.x$ps_schema_table_statistics_io                OK
 | |
| sys.x$schema_flattened_keys                        OK
 | |
| sys.x$schema_index_statistics                      OK
 | |
| sys.x$schema_table_lock_waits                      OK
 | |
| sys.x$schema_table_statistics                      OK
 | |
| sys.x$schema_table_statistics_with_buffer          OK
 | |
| sys.x$schema_tables_with_full_table_scans          OK
 | |
| sys.x$session                                      OK
 | |
| sys.x$statement_analysis                           OK
 | |
| sys.x$statements_with_errors_or_warnings           OK
 | |
| sys.x$statements_with_full_table_scans             OK
 | |
| sys.x$statements_with_runtimes_in_95th_percentile  OK
 | |
| sys.x$statements_with_sorting                      OK
 | |
| sys.x$statements_with_temp_tables                  OK
 | |
| sys.x$user_summary                                 OK
 | |
| sys.x$user_summary_by_file_io                      OK
 | |
| sys.x$user_summary_by_file_io_type                 OK
 | |
| sys.x$user_summary_by_stages                       OK
 | |
| sys.x$user_summary_by_statement_latency            OK
 | |
| sys.x$user_summary_by_statement_type               OK
 | |
| sys.x$wait_classes_global_by_avg_latency           OK
 | |
| sys.x$wait_classes_global_by_latency               OK
 | |
| sys.x$waits_by_host_by_latency                     OK
 | |
| sys.x$waits_by_user_by_latency                     OK
 | |
| sys.x$waits_global_by_latency                      OK
 | |
| Phase 5/8: Fixing table and database names
 | |
| Phase 6/8: Checking and upgrading tables
 | |
| Processing databases
 | |
| information_schema
 | |
| mtr
 | |
| mtr.global_suppressions                            OK
 | |
| mtr.test_suppressions                              OK
 | |
| performance_schema
 | |
| sys
 | |
| sys.sys_config                                     OK
 | |
| test
 | |
| Phase 7/8: uninstalling plugins
 | |
| Phase 8/8: Running 'FLUSH PRIVILEGES'
 | |
| OK
 | |
| create user gigi@localhost;
 | |
| show create user gigi@localhost;
 | |
| CREATE USER for gigi@localhost
 | |
| CREATE USER `gigi`@`localhost`
 | |
| select password_expired from mysql.user where user='gigi' and host='localhost';
 | |
| password_expired
 | |
| N
 | |
| alter user gigi@localhost password expire;
 | |
| show create user gigi@localhost;
 | |
| CREATE USER for gigi@localhost
 | |
| CREATE USER `gigi`@`localhost` PASSWORD EXPIRE
 | |
| select password_expired from mysql.user where user='gigi' and host='localhost';
 | |
| password_expired
 | |
| Y
 | |
| drop user gigi@localhost;
 |