openGauss學習筆記-55 openGauss 高級特性-全密態(tài)數(shù)據(jù)庫
全密態(tài)數(shù)據(jù)庫意在解決數(shù)據(jù)全生命周期的隱私保護問題,使得系統(tǒng)無論在何種業(yè)務場景和環(huán)境下,數(shù)據(jù)在傳輸、運算以及存儲的各個環(huán)節(jié)始終都處于密文狀態(tài)。當數(shù)據(jù)擁有者在客戶端完成數(shù)據(jù)加密并發(fā)送給服務端后,在攻擊者借助系統(tǒng)脆弱點竊取用戶數(shù)據(jù)的狀態(tài)下仍然無法獲得有效的價值信息,從而起到保護數(shù)據(jù)隱私的能力。
由于整個業(yè)務數(shù)據(jù)流在數(shù)據(jù)處理過程中都是以密文形態(tài)存在,通過全密態(tài)數(shù)據(jù)庫,可以實現(xiàn):
- 保護數(shù)據(jù)在云上全生命周期的隱私安全。無論數(shù)據(jù)處于何種狀態(tài),攻擊者都無法從數(shù)據(jù)庫服務端獲取有效信息。
- 幫助云服務提供商獲取第三方信任。無論是企業(yè)服務場景下的業(yè)務管理員、運維管理員,還是消費者云業(yè)務下的應用開發(fā)者,用戶通過將密鑰掌握在自己手上,使得高權限用戶無法獲取數(shù)據(jù)有效信息。
- 讓云數(shù)據(jù)庫服務借助全密態(tài)能力更好的遵守個人隱私保護方面的法律法規(guī)。
全密態(tài)數(shù)據(jù)庫目前支持兩種連接方式:gsql連接和jdbc連接。下面將詳細介紹兩種連接方式下數(shù)據(jù)庫的使用流程。
55.1 連接全密態(tài)數(shù)據(jù)庫
-
GSQL連接數(shù)據(jù)庫執(zhí)行以下命令打開密態(tài)開關:
gsql -p PORT -d postgres -r -C
參數(shù)說明:
- -p:端口號
- -d:數(shù)據(jù)庫名稱
- -C:是打開密態(tài)開關。
-
JDBC支持密態(tài)數(shù)據(jù)庫相關操作,需要設置enable_ce=1
55.2 創(chuàng)建用戶密鑰
全密態(tài)數(shù)據(jù)庫有兩種密鑰,即客戶端主密鑰CMK和數(shù)據(jù)加密密鑰CEK。CMK用于加密CEK,CEK用于加密用戶數(shù)據(jù)。
密鑰創(chuàng)建的順序和依賴依次為: 創(chuàng)建CMK > 創(chuàng)建CEK。
-
GSQL環(huán)境下創(chuàng)建CMK和CEK:
【創(chuàng)建CMK】
CREATE CLIENT MASTER KEY client_master_key_name WITH (KEY_STORE =key_store_name, KEY_PATH = "key_path_value", ALGORITHM = algorithm_type);
參數(shù)說明:
-
client_master_key_name
該參數(shù)作為密鑰對象名,在同一命名空間下,需滿足命名唯一性約束。
取值范圍:字符串,需符合標識符的命名規(guī)范。
-
KEY_STORE
指定管理CMK的密鑰工具或組件;取值:目前僅支持localkms。
-
KEY_PATH
KEY_STORE負責管理多個CMK密鑰,KEY_PATH選項用于在KEY_STORE中唯一標識CMK。取值類似:“key_path_value”。
-
ALGORITHM
由本語法創(chuàng)建的用于加密COLUMN ENCRYPTION KEY,該參數(shù)用于指定加密算法的類型。取值范圍:RSA_2048、RSA3072和SM2。
說明: 密鑰存儲路徑:默認情況下,localkms將在 L O C A L K M S F I L E P A T H 路徑下生成 / 讀取 / 刪除密鑰文件,用戶可手動配置該環(huán)境變量。但是,用戶也可以不用單獨配置該環(huán)境變量,在嘗試獲取 LOCALKMS_FILE_PATH路徑下生成/讀取/刪除密鑰文件,用戶可手動配置該環(huán)境變量。但是,用戶也可以不用單獨配置該環(huán)境變量,在嘗試獲取 LOCALKMSF?ILEP?ATH路徑下生成/讀取/刪除密鑰文件,用戶可手動配置該環(huán)境變量。但是,用戶也可以不用單獨配置該環(huán)境變量,在嘗試獲取LOCALKMS_FILE_PATH失敗時,localkms會嘗試獲取$GAUSSHOME/etc/localkms/路徑,如果該路徑存在,則將其作為密鑰存儲路徑。 密鑰相關文件名:使用CREATE CMK語法時,localkms將會創(chuàng)建四個與存儲密鑰相關的文件。示例:當KEY_PATH = “key_path_value”, 四個文件的名稱分別為key_path_value.pub、key_path_value.pub.rand、 key_path_value.priv、 key_path_value.priv.rand。 所以,為了能夠成功創(chuàng)建密鑰相關文件,在密鑰存儲路徑下,應該保證沒有已存在的與密鑰相關文件名同名的文件。
【創(chuàng)建CEK】
CREATE COLUMN ENCRYPTION KEY column_encryption_key_name WITH(CLIENT_MASTER_KEY = client_master_key_name, ALGORITHM = algorithm_type, ENCRYPTED_VALUE = encrypted_value);
參數(shù)說明:
-
column_encryption_key_name
該參數(shù)作為密鑰對象名,在同一命名空間下,需滿足命名唯一性約束。
取值范圍:字符串,要符合標識符的命名規(guī)范。
-
CLIENT_MASTER_KEY
指定用于加密本CEK的CMK。
取值為:CMK對象名,該CMK對象由CREATE CLIENT MASTER KEY語法創(chuàng)建。
-
ALGORITHM
指定該CEK將用于何種加密算法。
取值范圍為:AEAD_AES_256_CBC_HMAC_SHA256、AEAD_AES_128_CBC_HMAC_SHA256和SM4_SM3;
-
ENCRYPTED_VALUE(可選項)
該值為用戶指定的密鑰口令,密鑰口令長度范圍為28 ~ 256個字符。28個字符派生出來的密鑰安全強度滿足AES128。若用戶需要用AES256,密鑰口令的長度需要39個字符。如果不指定,則會自動生成256比特的密鑰。
說明: 由于SM2、SM3、SM4等算法屬于中國國家密碼標準算法,為規(guī)避法律風險,需配套使用。如果創(chuàng)建CMK時指定SM4算法來加密CEK,則創(chuàng)建CEK時必須指定SM4_SM3算法來加密數(shù)據(jù)。
【示例:GSQL環(huán)境下:】
-- 創(chuàng)建$GAUSSHOME/etc/localkms/路徑 mkdir -p $GAUSSHOME/etc/localkms/ -- 使用特權賬戶,創(chuàng)建一個普通用戶alice。 openGauss=# CREATE USER alice PASSWORD '********'; -- 使用普通用戶alice的賬戶,連接密態(tài)數(shù)據(jù)庫,并執(zhí)行本語法。 gsql -p 57101 postgres -U alice -r -C -- 創(chuàng)建客戶端加密主密鑰(CMK)對象。 openGauss=> CREATE CLIENT MASTER KEY alice_cmk WITH (KEY_STORE = localkms , KEY_PATH = "key_path_value”, ALGORITHM = RSA_2048); -- 創(chuàng)建客戶端列加密密鑰(CEK)對象。 openGauss=> CREATE COLUMN ENCRYPTION KEY ImgCEK WITH VALUES (CLIENT_MASTER_KEY = alice_cmk, ALGORITHM = AEAD_AES_256_CBC_HMAC_SHA256);
-
-
JDBC環(huán)境下創(chuàng)建CMK和CEK:
// 創(chuàng)建客戶端主密鑰 Connection conn = DriverManager.getConnection("url","user","password");Statement stmt = conn.createStatement();int rc = stmt.executeUpdate("CREATE CLIENT MASTER KEY ImgCMK1 WITH ( KEY_STORE = localkms , KEY_PATH = "key_path_value" , ALGORITHM = AES_256_CBC);"); // 創(chuàng)建列加密密鑰 int rc2 = stmt.executeUpdate("CREATE COLUMN ENCRYPTION KEY ImgCEK1 WITH VALUES (CLIENT_MASTER_KEY = ImgCMK1, ALGORITHM = AEAD_AES_256_CBC_HMAC_SHA256);");
55.3 創(chuàng)建加密表
在創(chuàng)建了客戶端主密鑰CMK和數(shù)據(jù)加密密鑰CEK之后,就可以使用CEK創(chuàng)建加密表了。加密表的創(chuàng)建支持對加密列進行隨機加密和確定性加密兩種方式。
-
GSQL連接環(huán)境下創(chuàng)建加密表:
【示例】
openGauss=# CREATE TABLE creditcard_info (id_number int, name text encrypted with (column_encryption_key = ImgCEK, encryption_type = DETERMINISTIC),credit_card varchar(19) encrypted with (column_encryption_key = ImgCEK, encryption_type = DETERMINISTIC));
參數(shù)說明
ENCRYPTION_TYPE為ENCRYPTED WITH約束中的加密類型,encryption_type_value的值為[ DETERMINISTIC | RANDOMIZED ]。
-
JDBC環(huán)境下創(chuàng)建加密表:
int rc3 = stmt.executeUpdate("CREATE TABLE creditcard_info (id_number int, name varchar(50) encrypted with (column_encryption_key = ImgCEK, encryption_type = DETERMINISTIC),credit_card varchar(19) encrypted with (column_encryption_key = ImgCEK1, encryption_type = DETERMINISTIC));");
55.4 向加密表插入數(shù)據(jù)并進行查詢
創(chuàng)建了加密表以后,可以在密態(tài)數(shù)據(jù)庫模式下(連接參數(shù)-C)向加密表中插入數(shù)據(jù)、查看數(shù)據(jù)。當使用普通環(huán)境(關掉連接參數(shù)-C)時,是無法對加密表進行操作的,查看加密表時也只能看到密文數(shù)據(jù)。
-
GSQL環(huán)境下向加密表插入數(shù)據(jù)并查看:
openGauss=# INSERT INTO creditcard_info VALUES (1,'joe','6217986500001288393'); INSERT 0 1 openGauss=# INSERT INTO creditcard_info VALUES (2, 'joy','6219985678349800033'); INSERT 0 1 openGauss=# select * from creditcard_info where name = 'joe'; id_number | name | credit_card -----------+------+--------------------- 1 | joe | 6217986500001288393 (1 row)
說明: 使用非密態(tài)客戶端查看該加密表數(shù)據(jù)時是密文。
openGauss=# select id_number,name from creditcard_info; id_number | name -----------+------------------------------------------- 1 | \x011aefabd754ded0a536a96664790622487c4d36 2 | \x011aefabd76853108eb406c0f90e7c773b71648f (2 rows)
-
JDBC環(huán)境下向加密表插入數(shù)據(jù)并查看:
// 插入數(shù)據(jù) int rc4 = stmt.executeUpdate("INSERT INTO creditcard_info VALUES (1,'joe','6217986500001288393');"); // 查詢加密表 ResultSet rs = null; rs = stmt.executeQuery("select * from creditcard_info where name = 'joe';"); // 關閉語句對象 stmt.close();
上述我們列出的是全密態(tài)數(shù)據(jù)庫特性的基本使用方法,更全面的使用介紹,可以參考官方文檔中的對應章節(jié)。
?? 點贊,你的認可是我創(chuàng)作的動力!
?? 收藏,你的青睞是我努力的方向!
?? 評論,你的意見是我進步的財富!文章來源:http://www.zghlxwxcb.cn/news/detail-691695.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-691695.html
到了這里,關于openGauss學習筆記-55 openGauss 高級特性-全密態(tài)數(shù)據(jù)庫的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!