KingbaseES V8R6 表空間加密
透明存儲加密優(yōu)勢
透明存儲加密可確保加密敏感數(shù)據(jù)滿足合規(guī)性要求,并提供簡化加密操作的功能,優(yōu)勢如下:
作為安全管理員,您可以確保敏感數(shù)據(jù)已加密,因此在存儲介質(zhì)或數(shù)據(jù)文件被盜或入侵者試圖從操作系統(tǒng)訪問數(shù)據(jù)文件時,繞過訪問控制數(shù)據(jù)庫。
使用透明存儲加密可幫助您解決與安全相關(guān)的法規(guī)遵從性問題。
您無需創(chuàng)建輔助表、觸發(fā)器或視圖來為授權(quán)用戶或應(yīng)用程序解密數(shù)據(jù)。處理敏感數(shù)據(jù)的應(yīng)用程序可以使用透明存儲加密提供強(qiáng)大的數(shù)據(jù)加密,而無需修改應(yīng)用程序。
對于訪問該數(shù)據(jù)的數(shù)據(jù)庫用戶和應(yīng)用程序,數(shù)據(jù)被透明地解密。數(shù)據(jù)庫用戶和應(yīng)用程序不需要知道他們正在訪問的數(shù)據(jù)是以加密形式存儲的。
透明存儲加密可以在線進(jìn)行,無需停止數(shù)據(jù)庫服務(wù)。
數(shù)據(jù)庫系統(tǒng)自動維護(hù)密鑰管理,用戶或應(yīng)用程序不需要管理加密密鑰。
注意的是表空間加密方式和表加密方式是互斥的,同一加密對象不允許同時支持這兩種加密方式。
開啟透明存儲加密
修改 kingbase.conf 文件中 shared_preload_libraries 參數(shù)。
shared_preload_libraries = 'sysencrypt'
重啟數(shù)據(jù)庫服務(wù)
新建數(shù)據(jù)庫需要安裝擴(kuò)展
CREATE EXTENSION sysencrypt;
還需要打開錢包功能:
打開錢包:
OPENUP WALLET WITH PASSWORD “654321”;
關(guān)閉錢包:
CLOSEUP WALLET WITH PASSWORD “654321”;
表空間加密
1、關(guān)于表空間加密功能
表空間加密能夠加密表空間中存儲的所有數(shù)據(jù)。表空間加密在讀取和寫入操作期間對數(shù)據(jù)進(jìn)行加密或解密。
塊加密是在數(shù)據(jù)頁面需要同步到外存時進(jìn)行加密操作;從外存讀取數(shù)據(jù)頁面到緩沖區(qū)時,首先進(jìn)行解密操作。內(nèi)存中的數(shù)據(jù)都是解密后的數(shù)據(jù)。當(dāng)數(shù)據(jù)從內(nèi)存落盤時進(jìn)行加密。
2、表空間加密的限制
表空間是對整個表空間數(shù)據(jù)加密,所以不受表加密的相關(guān)限制,對數(shù)據(jù)類型、約束和索引都沒有要求。
3、表空間加密的系統(tǒng)參數(shù)
設(shè)置sysencrypt.encrypt_user_tablespace參數(shù),可以指定是否默認(rèn)對創(chuàng)建的用戶表空間加密,默認(rèn)為false。
4、表空間加密的使用
創(chuàng)建表空間加密
需要在表空間的定義最后加上encrypted關(guān)鍵字,如下所示:
CREATE TABLESPACE tablesspacename LOCATION '@tablespace@' with(encryption = true[, enckey = encryptkey]);
encryption
標(biāo)識當(dāng)前表空間是否為加密表空間,true為是,false為否。
enckey
用戶自定義的表空間加密密鑰,最大有效長度16字節(jié),超出長度會被截?cái)唷DJ(rèn)不指定。使用數(shù)據(jù)庫自生成秘鑰加密表空間。
TABLESPACE tablespace_nametablespace_name
?是新表要創(chuàng)建于其中的表空間名稱。如果沒有指定,將參考default_tablespace,如果表是臨時的則參考temp_tablespaces。
測試
1、不指定加密表空間,使用默認(rèn)創(chuàng)建表空間,用戶不指定密鑰:
CREATE TABLESPACE ENC_TS_KEY_TEST LOCATION '/home/kingbase7/spce' ?with(encryption = true);
設(shè)置加密表空間為默認(rèn)表空間
set default_tablespace=ENC_TS_KEY_TEST;
創(chuàng)建表和索引,不指定加密表空間
CREATE TABLE TEST_ENC_NOKEY(ID INT, NAME VARCHAR(100)) ;
CREATE INDEX INDEX_ENC ON TEST_ENC_NOKEY(ID);
插入數(shù)據(jù),查看表文件
INSERT INTO TEST_ENC_NOKEY VALUES(GENERATE_SERIES(1, 10000), 'KINGBASE');
CHECKPOINT;
select sys_relation_filepath('TEST_ENC_NOKEY');
? ? ? ? ? ? sys_relation_filepath
-----------------------------------------------
sys_tblspc/41144/SYS_12_202209081/12145/41145
(1 row)
查看數(shù)據(jù)文件已經(jīng)無法顯示完整的字符,說明表TEST_ENC_NOKEY已經(jīng)被加密了。
hexdump -c ?41145 |grep k
2、指定加密表空間設(shè)置默認(rèn)表空間為空
TEST=# set default_tablespace ='';
SET
再繼續(xù)創(chuàng)建一張表不指定表空間,插入數(shù)據(jù)并查看,
CREATE TABLE TEST_ENC (ID INT, NAME VARCHAR(100)) ;
INSERT INTO TEST_ENC VALUES(GENERATE_SERIES(1, 100), 'KINGBASE');
CHECKPOINT;
select sys_relation_filepath('TEST_ENC');
sys_relation_filepath
-----------------------
base/12145/41149
(1 row)
hexdump -c 41149 |grep k
輸出結(jié)果可以看到完整的字符串KINGBASE,說明表沒有被加密。
沒有加密的原因是,取消了默認(rèn)表空間為加密表空間。
下面再測試一下,指定創(chuàng)建表的表空間為加密表空間
CREATE TABLE TEST_ENC_T (ID INT, NAME VARCHAR(100)) TABLESPACE ENC_TS_KEY_TEST;
INSERT INTO TEST_ENC_T VALUES(GENERATE_SERIES(1, 100), 'KINGBASE') ?;
CHECKPOINT;
select sys_relation_filepath('TEST_ENC_T');
TEST=# select sys_relation_filepath('TEST_ENC_T');
? ? ? ? ? ? sys_relation_filepath
-----------------------------------------------
sys_tblspc/41144/SYS_12_202209081/12145/41152
(1 row)
hexdump -c 41152 |grep k
輸出結(jié)果看,沒有完整的字符串表現(xiàn)出表中數(shù)據(jù),說明表已經(jīng)被加密,所以,如果沒有設(shè)置默認(rèn)表空間為加密表空間,創(chuàng)建表時候需要指定表空間為加密表空間。
總結(jié)
加密表空間可以設(shè)置為默認(rèn)表空間,之后在其下創(chuàng)建的表默認(rèn)就是加密狀態(tài)。
如果沒開啟默認(rèn)表空間為加密表空間參數(shù)default_tablespace,創(chuàng)建表時需要指定表空間為加密表空間。
KINGBASE研究院
鏈接:https://www.dianjilingqu.com/756317.html