blob: 4cd497d774fbf0078a330730d23f213542a82664 [file] [log] [blame]
ij> --
-- Licensed to the Apache Software Foundation (ASF) under one or more
-- contributor license agreements. See the NOTICE file distributed with
-- this work for additional information regarding copyright ownership.
-- The ASF licenses this file to You under the Apache License, Version 2.0
-- (the "License"); you may not use this file except in compliance with
-- the License. You may obtain a copy of the License at
--
-- http://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing, software
-- distributed under the License is distributed on an "AS IS" BASIS,
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- See the License for the specific language governing permissions and
-- limitations under the License.
--
-- This script tests error cases where encryption of an un-encryped database
-- or re-encrption of an encrypted databases with new password/key should fail
-- when
-- 1) the database is booted read-only mode using jar subprotocol.
-- 2) the databases with log archive mode enabled. It should
--- succeed after disabling the log archive mode.
-- 3) when restoring from backup.
--------------------------------------------------------------------
-- Case : create a plain database, jar it up and then attempt
-- to encrypt using the jar protocol
connect 'jdbc:derby:endb;create=true';
ij> create table t1(a int ) ;
0 rows inserted/updated/deleted
ij> insert into t1 values(1) ;
1 row inserted/updated/deleted
ij> insert into t1 values(2) ;
1 row inserted/updated/deleted
ij> insert into t1 values(3) ;
1 row inserted/updated/deleted
ij> insert into t1 values(4) ;
1 row inserted/updated/deleted
ij> insert into t1 values(5) ;
1 row inserted/updated/deleted
ij> disconnect;
ij> connect 'jdbc:derby:endb;shutdown=true';
ERROR 08006: Database 'endb' shutdown.
ij> -- now create archive of the database.
connect 'jdbc:derby:wombat;create=true';
ij> create procedure CREATEARCHIVE(jarName VARCHAR(20), path VARCHAR(20), dbName VARCHAR(20))
LANGUAGE JAVA PARAMETER STYLE JAVA
NO SQL
EXTERNAL NAME 'org.apache.derbyTesting.functionTests.tests.lang.dbjarUtil.createArchive';
0 rows inserted/updated/deleted
ij> -- archive the "endb" and put in "ina.jar" with dbname as "jdb1".
call CREATEARCHIVE('ina.jar', 'endb', 'jdb1');
0 rows inserted/updated/deleted
ij> disconnect;
ij> -- try encrypting the database 'jdb1' using the jar protocol.
-- should fail
connect 'jdbc:derby:jar:(ina.jar)jdb1;dataEncryption=true;bootPassword=xyz1234abc';
ERROR XJ040: Failed to start database 'jar:(ina.jar)jdb1' with class loader XXXX, see the next exception for details.
ERROR XBCXQ: Cannot encrypt, re-encrypt or decrypt a read-only database.
ij> connect 'jdbc:derby:jar:(ina.jar)jdb1;dataEncryption=true;encryptionKey=6162636465666768';
ERROR XJ040: Failed to start database 'jar:(ina.jar)jdb1' with class loader XXXX, see the next exception for details.
ERROR XBCXQ: Cannot encrypt, re-encrypt or decrypt a read-only database.
ij> -- Case: create a a jar file of an encrypted database and
-- try re-encrypting it while boot it with the jar sub protocol
-- encrypt the databases.
connect 'jdbc:derby:endb;dataEncryption=true;bootPassword=xyz1234abc';
ij> insert into t1 values(6);
1 row inserted/updated/deleted
ij> insert into t1 values(7);
1 row inserted/updated/deleted
ij> disconnect;
ij> connect 'jdbc:derby:endb;shutdown=true';
ERROR 08006: Database 'endb' shutdown.
ij> -- create archive of encrypted database.
connect 'jdbc:derby:wombat';
ij> call CREATEARCHIVE('ina.jar', 'endb', 'jdb1');
0 rows inserted/updated/deleted
ij> disconnect;
ij> -- test the encrypted jar db
connect 'jdbc:derby:jar:(ina.jar)jdb1;dataEncryption=true;bootPassword=xyz1234abc;';
ij> select * from t1;
A
-----------
1
2
3
4
5
6
7
7 rows selected
ij> disconnect;
ij> connect 'jdbc:derby:;shutdown=true';
ERROR XJ015: Derby system shutdown.
ij> -- now finally attempt to re-encrypt the encrypted jar db with
-- a new boot password, it should fail.
connect 'jdbc:derby:jar:(ina.jar)jdb1;dataEncryption=true;bootPassword=xyz1234abc;newBootPassword=new1234xyz';
ERROR XJ040: Failed to start database 'jar:(ina.jar)jdb1' with class loader XXXX, see the next exception for details.
ERROR XBCXQ: Cannot encrypt, re-encrypt or decrypt a read-only database.
ij> -- Decrypting a read-only db should also fail.
connect 'jdbc:derby:jar:(ina.jar)jdb1;bootPassword=xyz1234abc;decryptDatabase=true';
ERROR XJ040: Failed to start database 'jar:(ina.jar)jdb1' with class loader XXXX, see the next exception for details.
ERROR XBCXQ: Cannot encrypt, re-encrypt or decrypt a read-only database.
ij> -- testing (re) encryption of a database
-- when the log arhive mode enabled -----
-- Case : configuring a un-encrypted database for
-- encryption should fail, when log archive mode is enabled.
connect 'jdbc:derby:wombat';
ij> create table emp(id int, name char (200));
0 rows inserted/updated/deleted
ij> insert into emp values (1, 'john');
1 row inserted/updated/deleted
ij> insert into emp values(2 , 'mike');
1 row inserted/updated/deleted
ij> insert into emp values(3 , 'robert');
1 row inserted/updated/deleted
ij> -- take a backup , this is used later.
call SYSCS_UTIL.SYSCS_BACKUP_DATABASE('extinout/mybackup');
0 rows inserted/updated/deleted
ij> -- enable the log archive mode and perform backup.
call SYSCS_UTIL.SYSCS_BACKUP_DATABASE_AND_ENABLE_LOG_ARCHIVE_MODE(
'extinout/mybackup1', 0);
0 rows inserted/updated/deleted
ij> insert into emp select * from emp ;
3 rows inserted/updated/deleted
ij> insert into emp select * from emp ;
6 rows inserted/updated/deleted
ij> insert into emp select * from emp ;
12 rows inserted/updated/deleted
ij> disconnect;
ij> connect 'jdbc:derby:wombat;shutdown=true';
ERROR 08006: Database 'wombat' shutdown.
ij> -- attempt to configure the database for encryption using password.
connect 'jdbc:derby:wombat;dataEncryption=true;bootPassword=xyz1234abc;';
ERROR XJ040: Failed to start database 'wombat' with class loader XXXX, see the next exception for details.
ERROR XBCXS: Cannot encrypt, re-encrypt or decrypt a database when it is in the log archive mode.
ij> -- attempt to configure the database for encryption using key.
connect 'jdbc:derby:wombat;dataEncryption=true;encryptionKey=6162636465666768';
ERROR XJ040: Failed to start database 'wombat' with class loader XXXX, see the next exception for details.
ERROR XBCXS: Cannot encrypt, re-encrypt or decrypt a database when it is in the log archive mode.
ij> -- disable log archive mode and then reattempt encryption on
-- next boot.
connect 'jdbc:derby:wombat';
ij> select count(*) from emp ;
1
-----------
24
1 row selected
ij> call SYSCS_UTIL.SYSCS_DISABLE_LOG_ARCHIVE_MODE(1);
0 rows inserted/updated/deleted
ij> disconnect;
ij> connect 'jdbc:derby:wombat;shutdown=true';
ERROR 08006: Database 'wombat' shutdown.
ij> -- Case: encrypt the database, with log archive mode disabled.
connect 'jdbc:derby:wombat;dataEncryption=true;bootPassword=xyz1234abc;';
ij> select count(*) from emp;
1
-----------
24
1 row selected
ij> create table t1(a int ) ;
0 rows inserted/updated/deleted
ij> insert into t1 values(1);
1 row inserted/updated/deleted
ij> -- enable log archive mode and perform backup.
call SYSCS_UTIL.SYSCS_BACKUP_DATABASE_AND_ENABLE_LOG_ARCHIVE_MODE(
'extinout/mybackup2', 0);
0 rows inserted/updated/deleted
ij> insert into t1 values(2);
1 row inserted/updated/deleted
ij> insert into t1 values(3);
1 row inserted/updated/deleted
ij> disconnect;
ij> connect 'jdbc:derby:wombat;shutdown=true';
ERROR 08006: Database 'wombat' shutdown.
ij> -- attempt to re-encrypt the database , with log archive mode enabled.
-- it should fail.
connect 'jdbc:derby:wombat;dataEncryption=true;bootPassword=xyz1234abc;newBootPassword=new1234xyz';
ERROR XJ040: Failed to start database 'wombat' with class loader XXXX, see the next exception for details.
ERROR XBCXS: Cannot encrypt, re-encrypt or decrypt a database when it is in the log archive mode.
ij> -- Attempt to decrypt the database with log archive mode enabled.
-- It should fail.
connect 'jdbc:derby:wombat;bootPassword=xyz1234abc;decryptDatabase=true';
ERROR XJ040: Failed to start database 'wombat' with class loader XXXX, see the next exception for details.
ERROR XBCXS: Cannot encrypt, re-encrypt or decrypt a database when it is in the log archive mode.
ij> -- reboot the db and disable the log archive mode
connect 'jdbc:derby:wombat;bootPassword=xyz1234abc';
ij> select * from t1;
A
-----------
1
2
3
3 rows selected
ij> call SYSCS_UTIL.SYSCS_DISABLE_LOG_ARCHIVE_MODE(1);
0 rows inserted/updated/deleted
ij> disconnect;
ij> connect 'jdbc:derby:wombat;shutdown=true';
ERROR 08006: Database 'wombat' shutdown.
ij> -- re-encrypt the database, with the log archive mode disabled.
-- it should pass.
connect 'jdbc:derby:wombat;dataEncryption=true;bootPassword=xyz1234abc;newBootPassword=new1234xyz';
ij> select * from t1;
A
-----------
1
2
3
3 rows selected
ij> select count(*) from emp;
1
-----------
24
1 row selected
ij> disconnect;
ij> connect 'jdbc:derby:wombat;shutdown=true';
ERROR 08006: Database 'wombat' shutdown.
ij> -- testing re-encryption with external key on a log archived database.
-- restore from the backup orignal un-encrypted database and
-- encrypt with a key.
connect 'jdbc:derby:wombat;restoreFrom=extinout/mybackup1/wombat';
ij> select count(*) from emp;
1
-----------
3
1 row selected
ij> call SYSCS_UTIL.SYSCS_DISABLE_LOG_ARCHIVE_MODE(1);
0 rows inserted/updated/deleted
ij> disconnect;
ij> connect 'jdbc:derby:wombat;shutdown=true';
ERROR 08006: Database 'wombat' shutdown.
ij> -- encrypt with a key and enable the log archive mode.
connect 'jdbc:derby:wombat;dataEncryption=true;encryptionKey=6162636465666768';
ij> select count(*) from emp;
1
-----------
3
1 row selected
ij> create table t1(a int ) ;
0 rows inserted/updated/deleted
ij> insert into t1 values(1);
1 row inserted/updated/deleted
ij> -- enable log archive mode and perform backup.
call SYSCS_UTIL.SYSCS_BACKUP_DATABASE_AND_ENABLE_LOG_ARCHIVE_MODE(
'extinout/mybackup2', 0);
0 rows inserted/updated/deleted
ij> insert into t1 values(2);
1 row inserted/updated/deleted
ij> insert into t1 values(3);
1 row inserted/updated/deleted
ij> disconnect;
ij> connect 'jdbc:derby:wombat;shutdown=true';
ERROR 08006: Database 'wombat' shutdown.
ij> -- attempt to re-encrypt the database with external key, with log archive mode enabled.
-- it should fail.
connect 'jdbc:derby:wombat;encryptionKey=6162636465666768;newEncryptionKey=5666768616263646';
ERROR XJ040: Failed to start database 'wombat' with class loader XXXX, see the next exception for details.
ERROR XBCXS: Cannot encrypt, re-encrypt or decrypt a database when it is in the log archive mode.
ij> -- reboot the db and disable the log archive mode
connect 'jdbc:derby:wombat;encryptionKey=6162636465666768';
ij> select * from t1;
A
-----------
1
2
3
3 rows selected
ij> call SYSCS_UTIL.SYSCS_DISABLE_LOG_ARCHIVE_MODE(1);
0 rows inserted/updated/deleted
ij> call SYSCS_UTIL.SYSCS_BACKUP_DATABASE('extinout/mybackup1');
0 rows inserted/updated/deleted
ij> disconnect;
ij> connect 'jdbc:derby:wombat;shutdown=true';
ERROR 08006: Database 'wombat' shutdown.
ij> -- now re-encrypt the database, with the log archive mode disbaled.
-- it should pass.
connect 'jdbc:derby:wombat;encryptionKey=6162636465666768;newEncryptionKey=5666768616263646';
ij> select * from t1;
A
-----------
1
2
3
3 rows selected
ij> select count(*) from emp;
1
-----------
3
1 row selected
ij> disconnect;
ij> connect 'jdbc:derby:wombat;shutdown=true';
ERROR 08006: Database 'wombat' shutdown.
ij> -- Finally, decrypt the database with log archive mode disabled.
-- It should pass.
connect 'jdbc:derby:wombat;encryptionKey=5666768616263646;decryptDatabase=true';
ij> select * from t1;
A
-----------
1
2
3
3 rows selected
ij> select count(*) from emp;
1
-----------
3
1 row selected
ij> disconnect;
ij> connect 'jdbc:derby:wombat;shutdown=true';
ERROR 08006: Database 'wombat' shutdown.
ij> -- restore from backup and attempt to configure database for encryption.
-- it shoud fail.
connect 'jdbc:derby:wombat;restoreFrom=extinout/mybackup/wombat;dataEncryption=true;bootPassword=xyz1234abc';
ERROR XJ081: Conflicting create/restore/recovery attributes specified.
ij> -- creating database from backup and attempting to configure database for encryption.
-- it shoud fail.
connect 'jdbc:derby:wombat_new;createFrom=extinout/mybackup/wombat;dataEncryption=true;bootPassword=xyz1234abc';
ERROR XJ081: Conflicting create/restore/recovery attributes specified.
ij> -- restore from backup and attempt to reEncrypt
-- it should fail.
connect 'jdbc:derby:wombat;restoreFrom=extinout/mybackup1/wombat;encryptionKey=6162636465666768;newEncryptionKey=5666768616263646';
ERROR XJ081: Conflicting create/restore/recovery attributes specified.
ij> -- restore from backup without re-encryption
-- it shoud boot.
connect 'jdbc:derby:wombat;restoreFrom=extinout/mybackup1/wombat;encryptionKey=6162636465666768';
ij> select count(*) from emp;
1
-----------
3
1 row selected
ij> disconnect;
ij> connect 'jdbc:derby:wombat;shutdown=true';
ERROR 08006: Database 'wombat' shutdown.
ij>