1# 数据库加密 2 3 4## 场景介绍 5 6为了增强数据库的安全性,数据库提供了一个安全适用的数据库加密能力,从而对数据库存储的内容实施有效保护。通过数据库加密等安全方法实现了数据库数据存储的保密性和完整性要求,使得数据库以密文方式存储并在密态方式下工作,确保了数据安全。 7 8加密后的数据库只能通过接口进行访问,无法通过其它方式打开数据库文件。数据库的加密属性在创建数据库时确认,无法变更。 9 10键值型数据库和关系型数据库均支持数据库加密操作。 11 12 13## 键值型数据库加密 14 15键值型数据库,通过options中encrypt参数来设置是否加密,默认为false,表示不加密。encrypt参数为true时表示加密。 16 17具体接口及功能,可见[分布式键值数据库](../reference/apis-arkdata/js-apis-distributedKVStore.md)。 18 19 20```ts 21import { distributedKVStore } from '@kit.ArkData'; 22import { BusinessError } from '@kit.BasicServicesKit'; 23 24let kvManager: distributedKVStore.KVManager | undefined = undefined; 25let kvStore: distributedKVStore.SingleKVStore | undefined = undefined; 26let context = getContext(this); 27const kvManagerConfig: distributedKVStore.KVManagerConfig = { 28 context: context, 29 bundleName: 'com.example.datamanagertest', 30} 31try { 32 kvManager = distributedKVStore.createKVManager(kvManagerConfig); 33 console.info('Succeeded in creating KVManager.'); 34} catch (e) { 35 let error = e as BusinessError; 36 console.error(`Failed to create KVManager. Code:${error.code},message:${error.message}`); 37} 38if (kvManager !== undefined) { 39 kvManager = kvManager as distributedKVStore.KVManager; 40 try { 41 const options: distributedKVStore.Options = { 42 createIfMissing: true, 43 // 设置数据库加密 44 encrypt: true, 45 backup: false, 46 autoSync: false, 47 kvStoreType: distributedKVStore.KVStoreType.SINGLE_VERSION, 48 securityLevel: distributedKVStore.SecurityLevel.S2 49 }; 50 kvManager.getKVStore<distributedKVStore.SingleKVStore>('storeId', options, (err, store: distributedKVStore.SingleKVStore) => { 51 if (err) { 52 console.error(`Fail to get KVStore. Code:${err.code},message:${err.message}`); 53 return; 54 } 55 console.info('Succeeded in getting KVStore.'); 56 kvStore = store; 57 }); 58 } catch (e) { 59 let error = e as BusinessError; 60 console.error(`An unexpected error occurred. Code:${error.code},message:${error.message}`); 61 } 62} 63if (kvStore !== undefined) { 64 kvStore = kvStore as distributedKVStore.SingleKVStore; 65 //进行后续操作 66 //... 67} 68``` 69 70 71## 关系型数据库加密 72 73关系型数据库,通过StoreConfig中encrypt属性来设置是否加密,默认为false,表示不加密。encrypt参数为true时表示加密。 74 75具体接口及功能,可见[关系型数据库](../reference/apis-arkdata/js-apis-data-relationalStore.md)。 76 77 78```ts 79import { relationalStore } from '@kit.ArkData'; 80 81let store: relationalStore.RdbStore; 82let context = getContext(this); 83const STORE_CONFIG: relationalStore.StoreConfig = { 84 name: 'RdbTest.db', 85 securityLevel: relationalStore.SecurityLevel.S1, 86 encrypt: true 87}; 88relationalStore.getRdbStore(context, STORE_CONFIG, (err, rdbStore) => { 89 store = rdbStore; 90 if (err) { 91 console.error(`Failed to get RdbStore. Code:${err.code},message:${err.message}`); 92 return; 93 } 94 console.info('Succeeded in getting RdbStore.'); 95}) 96``` 97