linux version: centos7.3
mysql vrsion: mysql5.6.34
最近兩天,接到業務上乙個需求,需要對錶中的部分字段(比如手機號,email)進行加密,在檢視mysql的相關資料後,發現需要對資料庫中的部分字段加密,基本就只能從業務層面的角度來實現。大概提供了如下幾個加密函式。
經過測試後,寫下自己對這些加密函式的一點認知。
password():
建立乙個經過加密的密碼字串,適合於插入到mysql的安全系統。
該加密過程不可逆,和unix密碼加密過程使用不同的演算法
。主要用於mysql的認證系統。
encrypt(,) aes_decrypt( , ):
使用unix crypt()系統加密字串,encrypt()函式接收要加密的字串和(可選的)用於加密過程的salt(乙個可以唯一確定口令的字串,就像鑰匙一樣)。
加密程度比encode較強
。注意,windows上不支援。
encode(,) decode(,):
加密解密字串。該函式有兩個引數:被加密或解密的字串和作為加密或解密基礎的金鑰。
encode結果是乙個二進位制字串,以blob型別儲存。
加密成度相對比較弱。
md5():計算字串的md5校驗和(128位),sha5():計算字串的sha5校驗和(160位),這兩個函式返回的校驗和是16進製制的,適合與認證系統中使用的口令。
對於文章中提到的4種方法,都進行了基本的測試。但是發現mysql的字段加密功能做得確實很一般。
經過測試,主要說說這些函式的缺點吧。
md5,password, sha: 加密過程不可逆,就是資料經過加密後,無法正常解析出來。
encrypt,aes_decrypt, encode:需要把字段設定成blob,也就是文字字段,需要儲存太長。曾經把這種方法對應的字段設定成varchar(1000)的長度,但是發現資料儲存後,在解析的過程中無法正常解析出來。
根據上述的這些條件,需要對mysql的字段加密碼,要麼就是加密過程太複雜,要麼就是儲存太長。而且結合mysql對於函式的查詢,並不會走索引,對於大資料量的查詢,更不適用。所以目前的這些方法都不適合字段級別的加密。
所以最後的處理方案可能需要通過表級別或者檢視的方案進行解決。
MySQL資料庫字段加密
一 匯入表結構 use qskj 03 table structure for table test drop table if exists test create table test id int 10 not null auto increment comment 主鍵 username v...
mysql欄位加密儲存過程 資料庫 加密儲存過程
如何簡單的建立乙個加密儲存過程 create proc test 引數列表 with encription as主體 go為了演示,現在我們建立乙個具備各種引數型別的儲存過程作為測試 create proc test x int 3,s nvarchar 20 y int output with e...
mysql資料庫字段操作
建立測試表 create table test id int add支援多列,change drop需要在每列前新增關鍵字,逗號隔開,column 可有可無 新增多列 alter table test add c1 char 1 c2 char 1 alter table test add colu...