Uploaded image for project: 'MariaDB Server'
  1. MariaDB Server
  2. MDEV-8767

Incorrect error message when importing encrypted tablespace using incorrect key

    Details

      Description

      • Create encrypted table with some key
      • Export and discard tablespace
      • Restart server using different keys
      • Import tablespace

      Test case:

      --source include/have_innodb.inc
      # embedded does not support restart
      -- source include/not_embedded.inc
      -- source include/not_valgrind.inc
      # Avoid CrashReporter popup on Mac
      -- source include/not_crashrep.inc
      #
      # MDEV-8750: Server crashes in page_cur_is_after_last on altering table using a wrong encryption key
      #
      call mtr.add_suppression("InnoDB: Block in space_id .* in file test/.* encrypted");
      call mtr.add_suppression("InnoDB: However key management plugin or used key_id 1 is not found or used encr
      yption algorithm or method does not match.");
      call mtr.add_suppression("InnoDB: Marking tablespace as missing. You may drop this table or install correc
      t key management plugin and key file.");
      call mtr.add_suppression(".*InnoDB: Cannot open table test/.* from the internal data dictionary of InnoDB 
      though the .frm file for the table exists. See .* for how you can resolve the problem.");
      call mtr.add_suppression("InnoDB: .ibd file is missing for table test/.*");
      # Suppression for builds where file_key_management plugin is linked statically
      call mtr.add_suppression("Couldn't load plugins from 'file_key_management*");
      
      --exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
      --shutdown_server
      --source include/wait_until_disconnected.inc
      
      --write_file $MYSQLTEST_VARDIR/keys1.txt
      1;770A8A65DA156D24EE2A093277530142
      4;770A8A65DA156D24EE2A093277530143
      EOF
      
      --exec echo "restart:--innodb-encrypt-tables --innodb-stats-persistent --plugin-load-add=file_key_manageme
      nt.so --file-key-management --file-key-management-filename=$MYSQLTEST_VARDIR/keys1.txt" > $MYSQLTEST_VARDI
      R/tmp/mysqld.1.expect
      --enable_reconnect
      --source include/wait_until_connected_again.inc
      
      --let $MYSQLD_TMPDIR = `SELECT @@tmpdir`
      --let $MYSQLD_DATADIR = `SELECT @@datadir`
      
      --disable_query_log
      let $innodb_file_format_orig = `SELECT @@innodb_file_format`;
      let $innodb_file_per_table_orig = `SELECT @@innodb_file_per_table`;
      --enable_query_log
      
      SET GLOBAL innodb_file_format = `Barracuda`;
      SET GLOBAL innodb_file_per_table = ON;
      
      CREATE TABLE t1 (pk INT PRIMARY KEY, f VARCHAR(8)) ENGINE=InnoDB ENCRYPTION_KEY_ID=4;
      INSERT INTO t1 VALUES (1,'foo'),(2,'bar');
      FLUSH TABLE t1 FOR EXPORT;
      --echo # List before copying files
      --list_files $MYSQLD_DATADIR/test
      --copy_file $MYSQLD_DATADIR/test/t1.cfg $MYSQLD_TMPDIR/t1.cfg
      --copy_file $MYSQLD_DATADIR/test/t1.ibd $MYSQLD_TMPDIR/t1.ibd
      UNLOCK TABLES;
      ALTER TABLE t1 DISCARD TABLESPACE;
      
      --exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
      --shutdown_server
      --source include/wait_until_disconnected.inc
      
      --write_file $MYSQLTEST_VARDIR/keys2.txt
      1;770A8A65DA156D24EE2A093277530142
      4;770A8A65DA156D24EE2A093277530144
      EOF
      
      --exec echo "restart:--innodb-encrypt-tables --innodb-stats-persistent --plugin-load-add=file_key_manageme
      nt.so --file-key-management --file-key-management-filename=$MYSQLTEST_VARDIR/keys2.txt" > $MYSQLTEST_VARDI
      R/tmp/mysqld.1.expect
      --enable_reconnect
      --source include/wait_until_connected_again.inc
      
      SET GLOBAL innodb_file_format = `Barracuda`;
      SET GLOBAL innodb_file_per_table = ON;
      --echo # List after t1 DISCARD
      --list_files $MYSQLD_DATADIR/test
      --copy_file $MYSQLD_TMPDIR/t1.cfg $MYSQLD_DATADIR/test/t1.cfg
      --copy_file $MYSQLD_TMPDIR/t1.ibd $MYSQLD_DATADIR/test/t1.ibd
      
      ALTER TABLE t1 IMPORT TABLESPACE;
      
      --remove_file $MYSQLTEST_VARDIR/keys1.txt
      --remove_file $MYSQLTEST_VARDIR/keys2.txt
      
      # reset system
      --disable_query_log
      EVAL SET GLOBAL innodb_file_per_table = $innodb_file_per_table_orig;
      EVAL SET GLOBAL innodb_file_format = $innodb_file_format_orig;
      --enable_query_log
      

        Gliffy Diagrams

          Attachments

            Activity

            Hide
            jplindst Jan Lindström added a comment -

            commit 4d3f680c957b3e55fb65d207fd1362271d8f8068
            Author: Jan Lindström <jan.lindstrom@mariadb.com>
            Date: Mon Sep 14 14:11:23 2015 +0300

            MDEV-8772: Assertion failure in file ha_innodb.cc line 20027 when importing page compressed and encrypted tablespace using incorrect keys

            Add error handling to decryp function when decrypt fails during
            import.

            Show
            jplindst Jan Lindström added a comment - commit 4d3f680c957b3e55fb65d207fd1362271d8f8068 Author: Jan Lindström <jan.lindstrom@mariadb.com> Date: Mon Sep 14 14:11:23 2015 +0300 MDEV-8772 : Assertion failure in file ha_innodb.cc line 20027 when importing page compressed and encrypted tablespace using incorrect keys Add error handling to decryp function when decrypt fails during import.

              People

              • Assignee:
                jplindst Jan Lindström
                Reporter:
                jplindst Jan Lindström
              • Votes:
                0 Vote for this issue
                Watchers:
                2 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: