<form id="fjn3d"></form>

<address id="fjn3d"></address>

            6.1.?存儲加密

            6.1.1. 全庫加密
            6.1.2. 口令加密
            6.1.3. 指定列單次加密
            6.1.4. 指定列批量加密
            6.1.5. 其他存儲加密

            作為應用最廣泛的信息存儲和處理系統,數據庫中存在大量敏感數據,如何防止數據被竊取和篡改是重中之重。加密技術是提高數據庫安全的一個重要手段。

            但不是什么加密方法和方式都是適合數據庫的,在加密數據的同時,也會帶來一些相關問題,如果處理不好,不僅會降低數據庫的安全性,而且還會帶來其它如性能的影響。

            UXDB安全數據庫提供了幾個不同級別的加密,并且在保護數據不會因為數據庫服務器偷竊、不道德的管理員、不安全網絡等因素而泄漏。加密也是保護一些諸如醫療記錄或財務交易等敏感數據所要求的。

            6.1.1.?全庫加密

            整個數據庫加密,就是對數據庫中所有的系統表、數據表、索引、視圖和存儲過程等進行加密處理。這種加密方法簡單快捷,只需對相應數據庫文件進行加密處理即可,對于企業或者用戶簡單的備份整個數據庫,可以采取這種操作更加方便。但是數據庫中的數據共享性高,會同時被多個用戶和應用訪問使用,因此,全庫加密會對系統性能會產生一定的影響。

            只需在初始化的時候加上-M參數就可以進行全庫加密。

            創建對象并插入數據,通過查看數據文件中的數據是否是密文來驗證全庫加密。

            1. 初始化集群時用參數M指定對存儲文件加密,并啟動:

              ./initdb -k fnv -M -W -D uxdb_enc
              ./ux_ctl -M -D uxdb_enc start
            2. 登錄控制臺,創建表并插入數據:

              CREATE TABLE sjjm(no int, name varchar(32));
              INSERT INTO sjjm VALUES(1, 'pizza');
              INSERT INTO sjjm VALUES(2, 'sandwich');
              CHECKPOINT;
            3. 查詢表文件的路徑:

              SELECT ux_relation_filepath('sjjm');
            4. 進入集群目錄查看表文件:

              表文件全是密文。

            6.1.2.?口令加密

            默認情況下,UXDB安全數據庫用戶的口令以 MD5 哈希的方式存儲, 所以管理員無法判斷賦予用戶的實際口令。如果 MD5 被加密用于客戶端認證, 那么未加密的口令甚至都不可能臨時出現在服務器上,因為客戶端在透過網絡發送口令之前,就先用 MD5 加密過。

            1. 登錄加密數據庫創建用戶并設定密碼:

              create user test password '1qaz!QAZ';
            2. 查看密碼:

              select usename,passwd from ux_shadow ;

            6.1.3.?指定列單次加密

            uxcrypto模塊允許對特定域進行加密存儲。這個功能只對某些敏感數據有用。 客戶端提供解密的密鑰,然后數據在服務器端解密并發送給客戶端。

            在數據被解密和在服務器與客戶端之間傳遞時,解密數據和解密密鑰將會在服務器端存在短暫的一段時間。 這就給那些能完全訪問數據庫服務器的人提供了一個短暫的截獲密鑰和數據的時間,例如系統管理員。

            1. 登錄加密數據庫加載uxcrypto插件:

              CREATE EXTENSION uxcrypto;
            2. 創建測試表:

              CREATE TABLE sjjm_01(id int, name varchar(64), pwd varchar(128));
            3. 以不同的加密方式插入數據:

              INSERT INTO sjjm_01 VALUES (1, 'zhang',digest('1qaz!QAZ','md5'));
              INSERT INTO sjjm_01 VALUES (2, 'wang',digest('1qaz!QAZ','sha1'));
              INSERT INTO sjjm_01 VALUES (3, 'huang', encrypt('1qaz!QAZ','aa','aes'));
            4. 查看表:

              SELECT * FROM sjjm_01;

              注意

              aes是可逆加密。

              SELECT convert_from(decrypt('\xa998f73e7f15a1895bf3a863e4eadbb9','aa','aes'),'SQL_ASCII');

            6.1.4.?指定列批量加密

            批量加密指定列數據,既可以指定不同的算法,可供選擇的算法有AES-128、AES-192、AES-256、DES-64、DES-128、DES-196、SM4-128、SM2、SM3、SM9,又可以指定每次加密的數據條數。此功能同樣是對表的特定域進行加密,只對某些敏感數據有用。

            指定列批量加密功能既可以通過可視化界面UXKMS操作,又可以通過后臺命令行工具操作。UXKMS中可創建用戶映射、對表指定列進行加密信息配置、數據批量加密、數據脫密、數據同步等功能。

            ux_authority模塊創建inuser用戶并保存特定用戶對某表的指定列所擁有的加密、解密權限及秘鑰等相關信息。當沒有此權限的用戶執行批量數據加密直接返回失敗,相反,加密或者解密成功。

            加密后的密文數據顯示形式可設置,包含‘*****’和十六進制密文兩種形式,通過修改配置文件uxsino.conf中參數display_mode。

            1. 登錄數據庫加載插件ux_authority

              CREATE EXTENSION ux_authority;
            2. 創建普通用戶test

              CREATE USER test WITH PASSWORD '1qaz!QAZ';
            3. 切換至test用戶并創建測試表、插入10條數據

              \c uxdb test
              CREATE TABLE stu (nu int,name varchar(256));
              INSERT into stu values(1,'wang');
              INSERT into stu values(2,'zhang');
              INSERT into stu values(3,'hu');
              INSERT into stu values(4,'huang');
              INSERT into stu values(5,'li');
              INSERT into stu values(6,'song');
              INSERT into stu values(7,'liu');
              INSERT into stu values(8,'han');
              INSERT into stu values(9,'hang');
              INSERT into stu values(10,'xia');
            4. 切換至inuser用戶配置指定列加密相關信息

              SELECT inuser.IUD_authorized_user('test','{keyname1}','{1}','{0}');

              第一個參數:被授權的用戶名。

              第二個參數:秘鑰名。

              第三個參數:加密權限,1代表有權限,0代表無權限。

              第四個參數:解密權限,1代表有權限,0代表無權限。

              SELECT inuser.IU_encrypted_column('uxdb','test','stu','name','keyname1','AES-128',
              'ECB','none',0,'iv1','key_value1','o_data_type1','n_data_type1',1,'2015/10/12'::timestamp,
              '2016/10/12'::timestamp,1);

              第一個參數:數據庫名。

              第二個參數:表的擁有者名。

              第三個參數:表名。

              第四個參數:列名。

              第五個參數:秘鑰名。

              第六個參數:算法名。

              第七個參數:加密模式。

              第八個參數:padding模式。

              第九個參數:iv類型。

              第十個參數:iv填充字符串。

              第十一個參數:密鑰值。

              第十二個參數:原字段類型。

              第十三個參數:加密字段類型。

              第十四個參數:加密字段長度。

              第十五個參數:密鑰生效時間。

              第十六個參數:密鑰過期時間。

              第十七個參數:操作類型,1代表插入,2代表更新,3代表刪除。

            5. 切換回test用戶,執行name列批量數據加密

              \c uxdb test
              SELECT data_migration('test', 'stu', 'name', 'bytea', 1, 100);

              第一個參數:模式名。

              第二個參數:表名。

              第三個參數:列名。

              第四個參數:加密后的數據類型,固定為bytea。

              第五個參數:該列配置信息表中的第一個字段encrpt_clmn_id值。

              第六個參數:批量加密的數據條數。

            6. 查看加密后的數據

              SELECT * from stu;
            7. 查看脫密后的數據

              切換至inuser用戶向test用戶授權解密權限。

              \c uxdb inuser
              SELECT inuser.IUD_authorized_user('test','{keyname1}','{1}','{1}');

              切換至test用戶查看解密后的數據結果。

              \c uxdb test
              SELECT * from stu;

            6.1.5.?其他存儲加密

            • 跨網絡加密口令:

              MD5認證方法在將口令發送給服務器之前由客戶端對它進行雙重加密。第一次 MD5 加密是基于用戶名的, 然后在建立數據庫連接時,服務器再次加密口令。通過網絡傳遞給服務器的就是這個雙重加密的值。雙重加密 不僅可以防止口令被發現,還可以防止稍后另一個連接使用同樣的加密口令連接數據庫。

            • 跨網絡加密數據:

              SSL 連接加密所有跨網絡發送的數據:口令、查詢以及返回的數據。ux_hba.conf文件允許管理員指定哪些主機可以使用 非加密連接(host),以及哪些主機需要使用 SSL 加密的連接(hostssl)??蛻舳诉€可以指定它們只通過 SSL 連接到服務器。我們還可以使用Stunnel或SSH加密傳輸。

            • SSL主機認證:

              客戶端和主機都可以提供 SSL 證書給對方。這在兩邊都需要一些額外的配置, 但是這種方式提供了比僅使用口令更強的身份驗證。 它避免一個計算機偽裝成服務器,這個時長只要足夠讀取客戶端發送的口令就行了。它還避免了 “中間人”攻擊,在其中有一臺計算機處于客戶端和服務器之間并偽裝成服務器讀取和傳遞兩者之間的所有數據。

            91竞彩之家