日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MariaDB 加密特性及使用方法

發(fā)布時間:2023/12/20 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MariaDB 加密特性及使用方法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

2019獨角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>

版權(quán)聲明:本文由吳洪輝原創(chuàng)文章,轉(zhuǎn)載請注明出處:?
文章原文鏈接:https://www.qcloud.com/community/article/193

來源:騰云閣?https://www.qcloud.com/community

?

MariaDB在10.1.3版本中加入了支持表加密和表空間加密的特性,在10.1.7版本加入了支持binlog加密的特性,這使得我們可以對數(shù)據(jù)文件和binlog進行加密,避免數(shù)據(jù)文件、binlog等文件被竊取后破解出關(guān)鍵數(shù)據(jù)。

本文主要介紹MariaDB加密特性、使用方法。

一.MariaDB的加密特性

  • innodb表空間加密
  • innodb日志加密
  • binlog加密
  • aria表加密
  • 臨時文件加密

加密特性的一些限制:

  • 元數(shù)據(jù)文件(.frm)目前尚未加密;
  • 目前只有MariaDB server才能解密,mysqlbinlog工具還不支持解析加密后的binlog文件
  • xtrabackup工具目前無法備份/恢復(fù)使用了加密特性的MariaDB實例。
  • 慢查詢?nèi)罩竞湾e誤日志尚未加密,里面可能會包含原始數(shù)據(jù)。
  • 二.使用MariaDB加密

    為了保護加密后的數(shù)據(jù),密鑰一般存放在和數(shù)據(jù)文件不同的位置。MariaDB的密鑰管理方式可以根據(jù)不同的保密需求來開發(fā)密鑰管理插件,在默認情況下可以使用file_key_management插件,該插件以文件的方式存儲密鑰。
    file_key_management插件:
    相關(guān)參數(shù):
    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系統(tǒng)表空間和日志文件固定使用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:秒數(shù),如果獲取到了新密鑰多久更新一次頁面加密
    innodb-encryption-rotation-iop:IOPS,最多允許用多少IOPS來做頁面加密更新
    innodb-encryption-threads:線程數(shù),用多少個后臺線程來做頁面加密更新

    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_keyinnodb-encrypt-tables innodb-encrypt-log innodb-encryption-threads=4encrypt-binlog encrypt_tmp_files encrypt_tmp_disk_tables aria_encrypt_tables 添加完成后重啟MariaDB服務(wù)。

    創(chuàng)建不加密的表:
    create table unencrypt_t(id int, name varchar(32)) ENCRYPTED=NO;

    創(chuàng)建加密的表,指定密鑰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;

    插入數(shù)據(jù):

    insert into unencrypt_t(id, name) values(1, 'one'); insert into encrypt_t(id, name) values(1, 'one');

    已加密的數(shù)據(jù)文件對比未加密的數(shù)據(jù)文件:

    binlog加密:

    加密開啟后的主備同步:
    開啟加密后,主機和備機之間的binlog傳輸是不加密的,由備機在寫relaylog/binlog/數(shù)據(jù)文件時進行加密。所以主備之間的密鑰可以不同,但id信息必須一致,否則建表語句在備機上無法執(zhí)行成功,將會導(dǎo)致slave SQL線程中止。

    加密和壓縮:
    數(shù)據(jù)加密和數(shù)據(jù)壓縮可以同時使用,MariaDB先做數(shù)據(jù)壓縮再做數(shù)據(jù)加密,可以節(jié)約很大的存儲空間。

    轉(zhuǎn)載于:https://my.oschina.net/u/2987407/blog/785777

    總結(jié)

    以上是生活随笔為你收集整理的MariaDB 加密特性及使用方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。