表加密可以对包含敏感数据的表或实例化视图进行加密,而且不会造成在对整个数据库加密时可能会导致的性能影响。启用表加密时,会对加密表的表页、相关联的索引页和临时文件页进行加密。还会对包含有关加密表的事务的事务日志页进行加密。
有关对实例化视图进行加密的详细信息,请参见加密和解密实例化视图。
要对数据库中的表加密,必须启用表加密。启用表加密必须在数据库初始化时进行。要查看是否启用了表加密,请使用 DB_PROPERTY 函数查询 EncryptionScope 数据库属性,如下所示:
SELECT DB_PROPERTY( 'EncryptionScope' ); |
如果返回值为 TABLE,则表明表加密已启用。
要查看表加密当前使用的加密算法,请使用 DB_PROPERTY 函数查询 Encryption 数据库属性,如下所示:
SELECT DB_PROPERTY( 'Encryption' ); |
有关所支持的加密算法列表,请参见加密和解密数据库。
对于加密的表,每个表页在写入磁盘时都会进行加密,在从磁盘读入时都会进行解密。此过程对应用程序不可见。不过,从加密的表读出或向其中写入时,可能会对性能产生轻微的负面影响。对现有表进行加密或解密可能会花费很长的时间,时间长短取决于表的大小。
加密表中列索引的索引页也将被加密,包含有关加密表事务的事务日志页及数据库临时文件中的所有页同样会进行加密。所有其它数据库和事务日志页均未加密。
加密表可能包含压缩列。在这种情况下,数据将先进行压缩,再进行加密。
对表加密不会影响存储要求。
启动启用了表加密的数据库与启动加密数据库的情况相同。例如,如果启动数据库时使用 -ek 选项,则必须指定密钥。如果启动数据库时使用 -ep 选项,则会提示您输入密钥。请参见初始化实用程序 (dbinit)。
必须在创建数据库时启用和配置表加密。如果数据库未启用表加密,或当前正在执行数据库加密,则必须重新创建数据库以启用表加密。
使用 CREATE DATABASE 语句创建数据库,并指定密钥和加密算法。
以下命令会创建为表启用了高度加密的数据库 new.db,该加密使用密钥 abc 和 AES256_FIPS 加密算法:
CREATE DATABASE 'new.db' ENCRYPTED TABLE KEY 'abc' ALGORITHM 'AES256_FIPS'; |
以后对此数据库中的表加密时,将使用 AES256_FIPS 算法和 abc 密钥。
使用 dbinit -et 和 -ek 选项创建数据库,并指定密钥和加密算法。
以下命令会创建为表启用了高度加密的数据库 new.db,该加密使用密钥 abc 和 AES256_FIPS 加密算法:
dbinit new.db -et -ek abc -ea AES256_FIPS |
以后对此数据库中的表加密时,将使用 AES256_FIPS 算法和 abc 密钥。
使用 CREATE ENCRYPTED TABLE DATABASE 语句创建数据库的加密副本,并指定密钥。
下面的示例从一个名为 contacts1 的现有数据库创建一个名为 contacts2 的数据库。新数据库支持加密表。
CREATE ENCRYPTED TABLE DATABASE 'contacts2.db' FROM 'contacts1.db' KEY 'Sd8f6654' OLD KEY 'Sc8e5543'; |
以后对此数据库中的表加密时,将使用 AES 算法和 Sd8f6654 密钥。
要对数据库中的表加密,必须已在数据库中启用表加密。请参见启用数据库中的表加密。
加密表时,将使用在数据库创建时所指定的加密算法和密钥。
使用 CREATE TABLE 语句的 ENCRYPTED 子句创建表。
以下命令会创建名为 Employees 的加密表:
CREATE TABLE MyEmployees ( MemberID CHAR(40), CardNumber INTEGER ) ENCRYPTED; |
使用 ALTER TABLE 语句的 ENCRYPTED 子句对表加密。
以下语句创建一个名为 MyEmployees2 的表,然后对其加密。
CREATE TABLE MyEmployees2 ( MemberID CHAR(40), CardNumber INTEGER ); ALTER TABLE MyEmployees2 ENCRYPTED; |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |