您好,登錄后才能下訂單哦!
MariaDB中如何使用加密特性,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
innodb表空間加密
innodb日志加密
binlog加密
aria表加密
臨時文件加密
加密特性的一些限制:
元數據文件(.frm)目前尚未加密;
目前只有MariaDB server才能解密,mysqlbinlog工具還不支持解析加密后的binlog文件
xtrabackup工具目前無法備份/恢復使用了加密特性的MariaDB實例。
慢查詢日志和錯誤日志尚未加密,里面可能會包含原始數據。
為了保護加密后的數據,密鑰一般存放在和數據文件不同的位置。MariaDB的密鑰管理方式可以根據不同的保密需求來開發密鑰管理插件,在默認情況下可以使用file_key_management
插件,該插件以文件的方式存儲密鑰。
file_key_management
插件:
相關參數:
file_key_management_filename
:密鑰文件位置, 比如/etc/my.cnf.d/file_key.txt
file_key_management_filekey
:密鑰文件的解密密碼,如果密鑰文件有加密的話則必須提供
file_key_management_encryption_algorithm
:加密算法, AES_CBC/AES_CTR
密鑰文件格式:
# MariaDB encryption file key 1;561A4A02DA569D12EE4A468236957432 2;561A4A02DA569D12EE4A468236957444 3;87A6C96D487659137E316A467BEA646787A6C96D487659137E316A467BEA6467
每行密鑰由兩部分組成,第一部分是密鑰id,緊跟分隔符后面的是十六進制的密鑰。
每個表可以單獨指定一個密鑰id(1-255)。不過innodb系統表空間和日志文件固定使用id為1的密鑰來加密,所以密鑰文件中一定要有id為1的密鑰。如果存在密鑰id為2的密鑰,則會用來加密臨時表和臨時文件。
這里還可以對密鑰文件本身進行加密來防止密鑰文件外泄,例如把明文的file_key.txt文件加密成file_key_enc.txt,密碼為file_key_encrypt_key: openssl enc -aes-256-cbc -md sha1 -k file_key_encrypt_key -in file_key.txt -out file_key_enc.txt
innodb加密選項:
innodb-encrypt-tables
:on/off/force, 是否加密所有innodb表, force表示強制加密所有innodb表
innodb-encrypt-log
:on/off, 是否加密innodb日志文件
innodb-encryption-rotate-key-age
:秒數,如果獲取到了新密鑰多久更新一次頁面加密
innodb-encryption-rotation-iop
:IOPS,最多允許用多少IOPS來做頁面加密更新
innodb-encryption-threads
:線程數,用多少個后臺線程來做頁面加密更新
binlog加密選項:
encrypt-binlog
:on/off,是否加密binlog
其他加密選項:
encrypt_tmp_files
:on/off,是否加密臨時文件
encrypt_tmp_disk_tables
:on/off,是否加密aria臨時表
aria_encrypt_tables
:on/off,是否加密aria表(只對ROW_FORMAT=PAGE)
加密測試:
在/etc/my.cnf.d/server.conf中添加: plugin-load-add=file_key_management.so file_key_management_encryption_algorithm=aes_cbc file_key_management_filename = /etc/my.cnf.d/file_key_enc.txt file_key_management_filekey = file_key_encrypt_key innodb-encrypt-tables innodb-encrypt-log innodb-encryption-threads=4 encrypt-binlog encrypt_tmp_files encrypt_tmp_disk_tables aria_encrypt_tables 添加完成后重啟MariaDB服務。
創建不加密的表:
create table unencrypt_t(id int, name varchar(32)) ENCRYPTED=NO
;
創建加密的表,指定密鑰id為3:
create table encrypt_t(id int, name varchar(32)) ENCRYPTED=YES ENCRYPTION_KEY_ID=3
;
修改不加密的表為加密:
alter table unencrypt_t ENCRYPTED=YES ENCRYPTION_KEY_ID=3
;
修改加密的表為不加密:
alter table unencrypt_t ENCRYPTED=NO
;
插入數據:
insert into unencrypt_t(id, name) values(1, 'one'); insert into encrypt_t(id, name) values(1, 'one');
已加密的數據文件對比未加密的數據文件:
binlog加密:
加密開啟后的主備同步:
開啟加密后,主機和備機之間的binlog傳輸是不加密的,由備機在寫relaylog/binlog/數據文件時進行加密。所以主備之間的密鑰可以不同,但id信息必須一致,否則建表語句在備機上無法執行成功,將會導致slave SQL線程中止。
加密和壓縮:
數據加密和數據壓縮可以同時使用,MariaDB先做數據壓縮再做數據加密,可以節約很大的存儲空間。
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。