MYSQL數(shù)據(jù)庫系統(tǒng)安全管理_第1頁
MYSQL數(shù)據(jù)庫系統(tǒng)安全管理_第2頁
MYSQL數(shù)據(jù)庫系統(tǒng)安全管理_第3頁
MYSQL數(shù)據(jù)庫系統(tǒng)安全管理_第4頁
MYSQL數(shù)據(jù)庫系統(tǒng)安全管理_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

1、MYSQL 數(shù)據(jù)庫系統(tǒng)安全管理目錄正文 .11 研究的背景 .12 研究的目的和意義.13 研究的內(nèi)容 .23.1 MySQL 數(shù)據(jù)庫的安全配置 .23.1.1 系統(tǒng)內(nèi)部安全 .23.1.2 外部網(wǎng)絡安全 .43.2 MySQL 用戶帳號管理 .83.3 MD5 加密 .113.3.1 數(shù)據(jù)庫中數(shù)據(jù)加密的原因 .113.3.2 加密方式 .123.3.3 Md5 加密原理.123.3.4 具體算法 .134 總結(jié) .14參考文獻: .15附錄: .15MySQL 數(shù)據(jù)庫安全管理摘要摘要: MySQL 是完全網(wǎng)絡化的跨平臺關系型數(shù)據(jù)庫系統(tǒng),同時是具有客戶機/服務器體系結(jié)構(gòu)的分布式數(shù)據(jù)庫管理系統(tǒng)。

2、它具有功能強、使用簡便、管理方便、運行速度快、安全可靠性強等優(yōu)點,用戶可利用許多語言編寫訪問 MySQL 數(shù)據(jù)庫的程序,特別是與 PHP 更是黃金組合,運用十分廣泛。由于 MySQL 是多平臺的數(shù)據(jù)庫,它的默認配置要考慮各種情況下都能適用,所以在用戶自己的使用環(huán)境下應該進行安全加固。用戶有責任維護 MySQL 數(shù)據(jù)庫系統(tǒng)的數(shù)據(jù)安全性和完整性。關鍵詞關鍵詞:MYSQLMYSQL;數(shù)據(jù)庫;數(shù)據(jù)庫安全;訪問控制;數(shù)據(jù)庫;數(shù)據(jù)庫安全;訪問控制;MD5MD5 加密加密正文正文MySQL 數(shù)據(jù)庫的安全配置必須從兩個方面入手,系統(tǒng)內(nèi)部安全和外部網(wǎng)絡安全;MySQL 用戶帳號管理主要用 grant(授權(quán))和

3、revoke(撤權(quán))兩個 SQL 指令來管理;MD5在實際中的一個應用就是對數(shù)據(jù)庫中的用戶信息加密,當用戶創(chuàng)建一個新的賬號或者密碼,他的信息不是直接保存到數(shù)據(jù)庫,而是經(jīng)過一次加密以后再保存,這樣,即使這些信息被泄露,也不能立即理解這些信息的真正含義。有效的提高了前臺和后臺的數(shù)據(jù)安全性。【精品文檔】如有侵權(quán),請聯(lián)系網(wǎng)站刪除,僅供學習與交流.精品文檔.1 研究的背景隨著計算機技術(shù)和信息技術(shù)的迅速發(fā)展。數(shù)據(jù)庫的應用十分廣泛,深入到各個領域,但隨之而來產(chǎn)生了數(shù)據(jù)的安全問題。近年來,數(shù)據(jù)庫供應商競相為大眾提供功能豐富的數(shù)據(jù)庫環(huán)境,大多數(shù)主要系統(tǒng)都支持 XML、Web 服務、分布式復制、操作系統(tǒng)集成以及其

4、他一些有用的功能。與以前相比,數(shù)據(jù)庫更加容易遭受到攻擊,它已經(jīng)成為了更有價值的攻擊目標,所以需要配置更多的安全功能,管理也要更加的謹慎。2 研究的目的和意義本文對 MySQL 數(shù)據(jù)庫的安全配置、MySQL 用戶帳號管理以及使用 MD5 加密提高數(shù)據(jù)庫前臺和后臺數(shù)據(jù)安全性做了詳細研究。由于 MySQL 是多平臺的數(shù)據(jù)庫,它的默認配置要考慮各種情況下都能適用,所以用戶需要根據(jù)具體的環(huán)境進行相關的安全配置,通過本文的研究,對如何提高數(shù)據(jù)庫的安全性有很大的幫助。 3 研究的內(nèi)容3.1 MySQL 數(shù)據(jù)庫的安全配置3.1.1 系統(tǒng)內(nèi)部安全MySQL 安裝好,運行了 mysql_db_install 腳本

5、以后就會建立數(shù)據(jù)目錄和初始化數(shù)據(jù)庫。如果我們用 MySQL 源碼包安裝,而且安裝目錄是/usr/local/mysql,那么數(shù)據(jù)目錄一般會是/usr/local/mysql/var。數(shù)據(jù)庫系統(tǒng)由一系列數(shù)據(jù)庫組成,每個數(shù)據(jù)庫包含一系列數(shù)據(jù)庫表。MySQL 是用數(shù)據(jù)庫名在數(shù)據(jù)目錄建立建立一個數(shù)據(jù)庫目錄,各數(shù)據(jù)庫表分別以數(shù)據(jù)庫表名作為文件名,擴展名分別為 MYD、MYI、frm 的三個文件放到數(shù)據(jù)庫目錄中。MySQL 的授權(quán)表給數(shù)據(jù)庫的訪問提供了靈活的權(quán)限控制,但是如果本地用戶擁有對庫文件的讀權(quán)限的話,攻擊者只需把數(shù)據(jù)庫目錄打包拷走,然后拷到自己本機的數(shù)據(jù)目錄下就能訪問竊取的數(shù)據(jù)庫。所以 MySQL

6、 所在的主機的安全性是最首要的問題,如果主機不安全,被攻擊者控制,那么 MySQL 的安全性也無從談起。其次就是數(shù)據(jù)目錄和數(shù)據(jù)文件的安全性,也就是權(quán)限設置問題。從 MySQL 主站一些老的 binary 發(fā)行版來看,3.21.xx 版本中數(shù)據(jù)目錄的屬性是775,這樣非常危險,任何本地用戶都可以讀數(shù)據(jù)目錄,所以數(shù)據(jù)庫文件很不安全?!揪肺臋n】如有侵權(quán),請聯(lián)系網(wǎng)站刪除,僅供學習與交流.精品文檔.3.22.xx 版本中數(shù)據(jù)目錄的屬性是 770,這種屬性也有些危險,本地的同組用戶既能讀也能寫,所以數(shù)據(jù)文件也不安全。3.23.xx 版本數(shù)據(jù)目錄的屬性是 700,這樣就比較好,只有啟動數(shù)據(jù)庫的用戶可以讀寫

7、數(shù)據(jù)庫文件,保證了本地數(shù)據(jù)文件的安全。如果啟動 MySQL 數(shù)據(jù)庫的用戶是 mysql,那么像如下的目錄和文件的是安全的,請注意數(shù)據(jù)目錄及下面的屬性:shellls -l /usr/local/mysqltotal 40drwxrwxr-x 2 root root 4096 Feb 27 20:07 bindrwxrwxr-x 3 root root 4096 Feb 27 20:07 includedrwxrwxr-x 2 root root 4096 Feb 27 20:07 infodrwxrwxr-x 3 root root 4096 Feb 27 20:07 libdrwxrwxr-

8、x 2 root root 4096 Feb 27 20:07 libexecdrwxrwxr-x 3 root root 4096 Feb 27 20:07 manshellls -l /usr/local/mysql/vartotal 8drwx- 2 mysql mysql 4096 Feb 27 20:08 mysqldrwx- 2 mysql mysql 4096 Feb 27 20:08 testshellls -l /usr/local/mysql/var/mysqltotal 104-rw- 1 mysql mysql 0 Feb 27 20:08 columns_priv.M

9、YD-rw- 1 mysql mysql 1024 Feb 27 20:08 columns_priv.MYI-rw- 1 mysql mysql 8778 Feb 27 20:08 columns_priv.frm-rw- 1 mysql mysql 302 Feb 27 20:08 db.MYD-rw- 1 mysql mysql 3072 Feb 27 20:08 db.MYI-rw- 1 mysql mysql 8982 Feb 27 20:08 db.frm-rw- 1 mysql mysql 0 Feb 27 20:08 func.MYD-rw- 1 mysql mysql 102

10、4 Feb 27 20:08 func.MYI-rw- 1 mysql mysql 8641 Feb 27 20:08 func.frm-rw- 1 mysql mysql 0 Feb 27 20:08 host.MYD【精品文檔】如有侵權(quán),請聯(lián)系網(wǎng)站刪除,僅供學習與交流.精品文檔.-rw- 1 mysql mysql 1024 Feb 27 20:08 host.MYI-rw- 1 mysql mysql 8958 Feb 27 20:08 host.frm-rw- 1 mysql mysql 0 Feb 27 20:08 tables_priv.MYD-rw- 1 mysql mysql

11、1024 Feb 27 20:08 tables_priv.MYI如果這些文件的屬主及屬性不是這樣,請用以下兩個命令修正之:shellchown -R mysql.mysql /usr/local/mysql/varshellchmod -R go-rwx /usr/local/mysql/var用 root 用戶啟動遠程服務一直是安全大忌,因為如果服務程序出現(xiàn)問題,遠程攻擊者極有可能獲得主機的完全控制權(quán)。MySQL 從 3.23.15 版本開始時作了小小的改動,默認安裝后服務要用 mysql 用戶來啟動,不允許 root 用戶啟動。如果非要用root 用戶來啟動,必須加上-user=root

12、 的參數(shù)(./safe_mysqld -user=root &)。因為 MySQL 中有 LOAD DATA INFILE 和 SELECT . INTO OUTFILE 的 SQL 語句,如果是 root 用戶啟動了 MySQL 服務器,那么,數(shù)據(jù)庫用戶就擁有了 root 用戶的寫權(quán)限。不過 MySQL 還是做了一些限制的,比如 LOAD DATA INFILE 只能讀全局可讀的文件,SELECT . INTO OUTFILE 不能覆蓋已經(jīng)存在的文件。本地的日志文件也不能忽視,包括 shell 的日志和 MySQL 自己的日志。有些用戶在本地登陸或備份數(shù)據(jù)庫的時候為了圖方便,有時會在

13、命令行參數(shù)里直接帶了數(shù)據(jù)庫的密碼,如:shell/usr/local/mysql/bin/mysqldump -uroot -ptest testtest.sqlshell/usr/local/mysql/bin/mysql -uroot ptest這些命令會被 shell 記錄在歷史文件里,比如 bash 會寫入用戶目錄的.bash_history 文件,如果這些文件不慎被讀,那么數(shù)據(jù)庫的密碼就會泄漏。用戶登陸數(shù)據(jù)庫后執(zhí)行的 SQL 命令也會被 MySQL 記錄在用戶目錄的.mysql_history 文件里。如果數(shù)據(jù)庫用戶用 SQL 語句修改了數(shù)據(jù)庫密碼,也會因.mysql_history

14、 文件而泄漏。所以我們在 shell 登陸及備份的時候不要在-p 后直接加密碼,而是在提示后再輸入數(shù)據(jù)庫密碼。另外這兩個文件我們也應該不讓它記錄我們的操作,以防萬一。shellrm .bash_history .mysql_historyshellln -s /dev/null .bash_history【精品文檔】如有侵權(quán),請聯(lián)系網(wǎng)站刪除,僅供學習與交流.精品文檔.shellln -s /dev/null .mysql_history上門這兩條命令把這兩個文件鏈接到/dev/null,那么我們的操作就不會被記錄到這兩個文件里了。3.1.2 外部網(wǎng)絡安全MySQL 數(shù)據(jù)庫安裝好以后,Unix

15、平臺的 user 表是這樣的:mysql use mysql;Database changedmysql select Host,User,Password,Select_priv,Grant_priv from user;圖 3.1.2.1 Unix 平臺的 user 表Windows 平臺的 user 表是這樣的:mysql use mysql;Database changedmysql select Host,User,Password,Select_priv,Grant_priv from user;圖 3.1.2.2 Windows 平臺的 user 表實際上 Unix 平臺的 My

16、SQL 默認只允許本機才能連接數(shù)據(jù)庫。但是缺省 root 用戶口令是空,所以當務之急是給 root 用戶加上口令。給數(shù)據(jù)庫用戶加口令有三種方法:在 shell 提示符下用 mysqladmin 命令來改 root 用戶口令:shellmysqladmin -uroot password test這樣,MySQL 數(shù)據(jù)庫 root 用戶的口令就被改成 test 了。用 set password 修改口令:mysql set password for rootlocalhost=password(test);這時 root 用戶的口令就被改成 test 了。直接修改 user 表的 root 用戶

17、口令:【精品文檔】如有侵權(quán),請聯(lián)系網(wǎng)站刪除,僅供學習與交流.精品文檔.mysql use mysql;mysql update user set password=password(test) where user=root;mysql flush privileges;這樣,MySQL 數(shù)據(jù)庫 root 用戶的口令也被改成 test 了。其中最后一句命令flush privileges 的意思是強制刷新內(nèi)存授權(quán)表,否則用的還是緩沖中的口令,這時非法用戶還可以用 root 用戶及空口令登陸,直到重啟 MySQL 服務器。我們還看到 user 為空的匿名用戶,雖然它在 Unix 平臺下沒什么權(quán)限

18、,但為了安全起見我們應該刪除它:mysql delete from user where user=;Windows 版本 MySQL 的 user 表有很大不同,我們看到 Host 字段除了 localhost還有是%。這里%的意思是允許任意的主機連接 MySQL 服務器,這是非常不安全的,給攻擊者造成可乘之機,我們必須刪除 Host 字段為%的記錄:mysqldelete from user where host=%;默認 root 用戶的空密碼也是必須修改,三種修改方法和 Unix 平臺一樣。對 user表操作以后不要忘了用 flush privileges 來強制刷新內(nèi)存授權(quán)表,這樣才

19、能生效。MySQL 的 5 個授權(quán)表:user, db, host, tables_priv 和 columns_priv 提供非常靈活的安全機制,從 MySQL 3.22.11 開始引入了兩條語句 GRANT 和 REVOKE 來創(chuàng)建和刪除用戶權(quán)限,可以方便的限制哪個用戶可以連接服務器,從哪里連接以及連接后可以做什么操作。在 3.22.11 版本以前的 MySQL 授權(quán)機制不完善,和新版本也有較大的不同,建議升級到最新版本的 MySQL。我們先來了解授權(quán)表的結(jié)構(gòu)。MySQL 授權(quán)表的結(jié)構(gòu)與內(nèi)容:mysql desc user;user 表是 5 個授權(quán)表中最重要的一個,列出可以連接服務器的用

20、戶及其加密口令,并且它指定他們有哪種全局(超級用戶)權(quán)限。在 user 表啟用的任何權(quán)限均是全局權(quán)限,并適用于所有數(shù)據(jù)庫。所以我們不能給任何用戶訪問 mysql.user 表的權(quán)限!權(quán)限說明:【精品文檔】如有侵權(quán),請聯(lián)系網(wǎng)站刪除,僅供學習與交流.精品文檔.圖 3.1.2.3 權(quán)限說明mysql desc db;圖 3.1.2.4 數(shù)據(jù)庫db 表列出數(shù)據(jù)庫,而用戶有權(quán)限訪問它們。在這里指定的權(quán)限適用于一個數(shù)據(jù)庫中的所有表。mysql desc host;【精品文檔】如有侵權(quán),請聯(lián)系網(wǎng)站刪除,僅供學習與交流.精品文檔.圖 3.1.2.5 host 表host 表與 db 表結(jié)合使用在一個較好層次上

21、控制特定主機對數(shù)據(jù)庫的訪問權(quán)限,這可能比單獨使用 db 好些。這個表不受 GRANT 和 REVOKE 語句的影響。3.2 MySQL 用戶帳號管理MySQL 用戶帳號管理主要用 grant(授權(quán))和 revoke(撤權(quán))兩個 SQL 指令來管理。這兩個指令實質(zhì)是通過操作 user(連接權(quán)限和全局權(quán)限)、db(數(shù)據(jù)庫級權(quán)限)、tables_priv(數(shù)據(jù)表級權(quán)限)、columns_priv(數(shù)據(jù)列級權(quán)限)四個權(quán)限表來分配權(quán)限的。host 權(quán)限表不受這兩個指令影響。下面將會詳細介紹用戶權(quán)限管理的內(nèi)容。GRANT 語法說明:GRANT privileges (columns) #privilege

22、s 表示授予的權(quán)限,columns 表示作用的列(可選) ON what #設置權(quán)限級別,全局級、數(shù)據(jù)庫級、數(shù)據(jù)表級和數(shù)據(jù)列級TO account #權(quán)限授予的用戶,用user_namehost_name這種用戶名、主機名格式IDENTIFIED BY password #設置用戶帳號密碼REQUIRE encryption requirements #設置經(jīng)由 SSL 連接帳號WITH grant or resource management options; #設置帳號的管理和資源(連接服務器次數(shù)或查詢次數(shù)等)選項示例:mysqlgrant all on db.* to testlocal

23、host identified by test;上例運行后的效果是,test 用戶只能通過test密碼從本機訪問 db 數(shù)據(jù)庫【精品文檔】如有侵權(quán),請聯(lián)系網(wǎng)站刪除,僅供學習與交流.精品文檔.mysqlgrant all on db.* to test% identified by test;上例運行后的效果是,test 用戶可通過test密碼從任意計算機上訪問 db 數(shù)據(jù)庫。 %代表任意字符, _代表一個任意字符。主機名部份還可以是 IP 地址。表 3.2.1 訪問權(quán)限表權(quán)限權(quán)限說明CREATE TEMPORARY TABLES創(chuàng)建臨時數(shù)據(jù)表EXECUTE執(zhí)行存儲過程(暫不支持)FILE操作系

24、統(tǒng)文件GRANT OPTION可把本帳號的權(quán)限授予其它用戶LOCK TABLES鎖定指定數(shù)據(jù)表PROCESS查看運行著的線程信息RELOAD重新加載權(quán)限表或刷新日志及緩沖區(qū)REPLICATION CLIENT可查詢主/從服務器主機名REPLICATION SLAVE運行一個鏡像從服務器SHOW DATABASES可運行 SHOW DATABASES 指令SHUTDOWN關閉數(shù)據(jù)庫服務器SUPER可用 kill 終止線程以及進行超級用戶操作ALTER可修改表和索引的結(jié)構(gòu)CREATE創(chuàng)建數(shù)據(jù)庫和數(shù)據(jù)表DELETE刪除數(shù)據(jù)表中的數(shù)據(jù)行DROP刪除數(shù)據(jù)表和數(shù)據(jù)行INDEX建立或刪除索引INSERT插入

25、數(shù)據(jù)行REFERENCES(暫時不支持)SELECT查詢數(shù)據(jù)行UPDATE更新數(shù)據(jù)行ALL所有權(quán)限,但不包括 GRANT。USAGE無權(quán)限權(quán)限表 3.2.2 權(quán)限作用范圍(由 ON 子句設置)【精品文檔】如有侵權(quán),請聯(lián)系網(wǎng)站刪除,僅供學習與交流.精品文檔.權(quán)限限定符作用范圍ON *.*全局級權(quán)限,作用于所有數(shù)據(jù)庫ON *全局級權(quán)限,若未指定默認數(shù)據(jù)庫,其作用范圍是所有數(shù)據(jù)庫,否則,其作用范圍是當前數(shù)據(jù)庫ON db_name.*數(shù)據(jù)庫級權(quán)限,作用于指定數(shù)據(jù)庫里的所有數(shù)據(jù)表ON db_name.tbl_name數(shù)據(jù)表級權(quán)限,作用于數(shù)據(jù)表里的所有數(shù)據(jù)列ON tbl_name數(shù)據(jù)表級權(quán)限,作用于默認數(shù)

26、據(jù)庫中指定的數(shù)據(jù)表里的所有數(shù)據(jù)列USAGE 權(quán)限的用法:修改與權(quán)限無關的帳戶項,如:mysqlGRANT USAGE ON *.* TO account IDENTIFIED BY new_password; #修改密碼mysqlGRANT USAGE ON *.* TO account REQUIRE SSL; #啟用 SSL 連接mysqlGRANT USAGE ON *.* TO account WITH MAX_CONNECTIONS_PER_HOUR 10;#設置資源 擁有 WITH GRANT OPTION 權(quán)限的用戶可把自已所擁用的權(quán)限轉(zhuǎn)授給其他用戶,如:mysqlGRANT A

27、LL ON db.* TO test% IDENTIFIED BY password WITH GRANT OPTION;這樣 test 用戶就有權(quán)把該權(quán)限授予其他用戶。限制資源使用,如:mysqlGRANT ALL ON db.* TO account IDENTIFIED BY password WITH MAX_CONNECTIONS_PER_HOUR 10 MAX_QUERIES_PER_HOUR 200 MAX_UPDATES_PER_HOUR 50;允許 account 用戶每小時最多連接 20 次服務器,每小時最多發(fā)出 200 條查詢命令(其中更新命令最多為 50 條)默認都是零

28、值,即沒有限制。FLUSH USER_RESOURCES 和 FLUSH PRIVILEGES 可對資源限制計數(shù)器清零。REVOKE 語法說明:mysqlREVOKE privileges (columns) ON what FROM account;【精品文檔】如有侵權(quán),請聯(lián)系網(wǎng)站刪除,僅供學習與交流.精品文檔.示例:mysqlREVOKE SELECT ON db.* FROM testlocalhost;刪除 test 帳號從本機查詢 db 數(shù)據(jù)庫的權(quán)限REVOKE 可刪除權(quán)限,但不能刪除帳號,即使帳號已沒有任何權(quán)限。所以 user 數(shù)據(jù)表里還會有該帳號的記錄,要徹底刪除帳號,需用 DE

29、LETE 命令刪除 user 數(shù)據(jù)表的記錄,如:% mysql -u root -pmysqluse mysqlmysqlDELETE FROM user where User=test and Host=localhost;mysql fulsh privileges;REVOKE 不能刪除 REQUIRE 和資源占用的配置。他們是要用 GRANT 來刪除的,如:GRANT USAGE ON *.* TO account REQUIRE NONE; #刪除 account 帳號的 SSL連接選項3.3 MD5 加密 3.3.1 數(shù)據(jù)庫中數(shù)據(jù)加密的原因現(xiàn)在網(wǎng)絡上一般的網(wǎng)站,稍微完善一點的,往往

30、都需要用戶先注冊,提供諸如電子郵件、賬號、密碼等信息以后,成為網(wǎng)站欄目的注冊用戶,才可以享受網(wǎng)站一些特殊欄目提供的信息或者服務,比如免費電子郵件、論壇、聊天等,都需要用戶注冊。而對于電子商務網(wǎng)站,比如 igo5 等大型電子商務網(wǎng)站,用戶需要購買商品,就一定需要詳細而準確的注冊,而這些信息,往往是用戶很隱秘的信息,比如電話、電子郵件、地址等,所以,注冊信息對于用戶和網(wǎng)站都是很重要的資源,不能隨意透露,更加不能存在安全上的隱患。一般將用戶資料直接保存在數(shù)據(jù)庫中,并沒有進行任何的保密措施,對于一些文件型數(shù)據(jù)庫比如 Access 等,如果有人得到這個文件,豈不是所有的資料都泄露無疑?更加重要的是,如果

31、一個不負責任的網(wǎng)管,不需要任何技術(shù)手段,就可以查看網(wǎng)站中的任何資料,如果我們的用戶信息在數(shù)據(jù)庫中沒有加密,對于網(wǎng)管而言,查看這些信息是太簡單了。所以,為了增加安全性,我們有必要對數(shù)據(jù)庫中的資料進行加密,這樣,即使有人得到了整個數(shù)據(jù)庫,如果沒有解密算法,也一樣不能查看到數(shù)據(jù)庫中的【精品文檔】如有侵權(quán),請聯(lián)系網(wǎng)站刪除,僅供學習與交流.精品文檔.用戶信息。3.3.2 加密方式在現(xiàn)階段,我們一般認為存在兩種加密方式,單向加密和雙向加密。雙向加密是加密算法中最常用的,它將我們可以直接理解的明文數(shù)據(jù)加密為我們不可直接理解的密文數(shù)據(jù),然后,在需要的時候,可以使用一定的算法將這些加密以后的密文解密為原來可以理

32、解的明文。雙向加密適合于隱秘通訊。單向加密剛好相反,只能對數(shù)據(jù)進行加密,也就是說,沒有辦法對加密以后的數(shù)據(jù)進行解密。MD5 就是采用單向加密的加密算法,對于 MD5 而言,有兩個特性是很重要的,第一是任意兩段明文數(shù)據(jù),加密以后的密文不能是相同的;第二是任意一段明文數(shù)據(jù),經(jīng)過加密以后,其結(jié)果必須永遠是不變的。前者的意思是不可能有任意兩段明文加密以后得到相同的密文,后者的意思是如果我們加密特定的數(shù)據(jù),得到的密文一定是相同的。 3.3.3 Md5 加密原理對 MD5 算法簡要的敘述可以為:MD5 以 512 位分組來處理輸入的信息,且每一分組又被劃分為 16 個 32 位子分組,經(jīng)過了一系列的處理后

33、,算法的輸出由四個 32 位分組組成,將這四個 32 位分組級聯(lián)后將生成一個 128 位散列值。在 MD5 算法中,首先需要對信息進行填充,使其字節(jié)長度對 512 求余的結(jié)果等于448。因此,信息的字節(jié)長度(Bits Length)將被擴展至 N*512+448,即 N*64+56 個字節(jié)(Bytes) ,N 為一個正整數(shù)。填充的方法如下,在信息的后面填充一個 1 和無數(shù)個 0,直到滿足上面的條件時才停止用 0 對信息的填充。然后,在在這個結(jié)果后面附加一個以 64 位二進制表示的填充前信息長度。經(jīng)過這兩步的處理,現(xiàn)在的信息字節(jié)長度=N*512+448+64=(N+1)*512,即長度恰好是 5

34、12 的整數(shù)倍。這樣做的原因是為滿足后面處理中對信息長度的要求。MD5 中有四個 32 位被稱作鏈接變量(Chaining Variable)的整數(shù)參數(shù),他們分別為:A=0 x01234567,B=0 x89abcdef,C=0 xfedcba98,D=0 x76543210。當設置好這四個鏈接變量后,就開始進入算法的四輪循環(huán)運算。循環(huán)的次數(shù)是信息中 512 位信息分組的數(shù)目?!揪肺臋n】如有侵權(quán),請聯(lián)系網(wǎng)站刪除,僅供學習與交流.精品文檔.將上面四個鏈接變量復制到另外四個變量中:A 到 a,B 到 b,C 到 c,D 到 d。主循環(huán)有四輪(MD4 只有三輪) ,每輪循環(huán)都很相似。第一輪進行 1

35、6 次操作。每次操作對 a、b、c 和 d 中的其中三個作一次非線性函數(shù)運算,然后將所得結(jié)果加上第四個變量,文本的一個子分組和一個常數(shù)。再將所得結(jié)果向右環(huán)移一個不定的數(shù),并加上 a、b、c 或 d 中之一。最后用該結(jié)果取代 a、b、c 或 d 中之一。以一下是每次操作中用到的四個非線性函數(shù)(每輪一個) 。F(X,Y,Z) =(X&Y)|(X)&Z)G(X,Y,Z) =(X&Z)|(Y&(Z)H(X,Y,Z) =XYZI(X,Y,Z)=Y(X|(Z)(&是與,|是或,是非,是異或)這四個函數(shù)的說明:如果 X、Y 和 Z 的對應位是獨立和均勻的,那么結(jié)果的每

36、一位也應是獨立和均勻的。F 是一個逐位運算的函數(shù)。即,如果 X,那么 Y,否則 Z。函數(shù) H 是逐位奇偶操作符。MD5 在實際中的一個應用就是對數(shù)據(jù)庫中的用戶信息加密,當用戶創(chuàng)建一個新的賬號或者密碼,他的信息不是直接保存到數(shù)據(jù)庫,而是經(jīng)過一次加密以后再保存,這樣,即使這些信息被泄露,也不能立即理解這些信息的真正含義。 3.3.4 具體算法在 java 語言中,實現(xiàn) MD5 加密是一件很簡單的事情,因為 java JDK 已經(jīng)為我們提供了相關的類。我們只需要調(diào)用就可以了。下面我來說一下具體的算法:/對字符串進行MD5加密public class Jiami public static Strin

37、g MD5(String inStr) MessageDigest md5 = null;try md5 = MessageDigest.getInstance(MD5); catch (Exception e) System.out.println(e.toString();e.printStackTrace();return ;char charArray = inStr.toCharArray();byte byteArray = new bytecharArray.length;【精品文檔】如有侵權(quán),請聯(lián)系網(wǎng)站刪除,僅供學習與交流.精品文檔.for (int i = 0; i char

38、Array.length; i+)byteArrayi = (byte) charArrayi;byte md5Bytes = md5.digest(byteArray);StringBuffer hexValue = new StringBuffer();for (int i = 0; i md5Bytes.length; i+) int val = (int) md5Bytesi) & 0 xff;if (val 16)hexValue.append(0);hexValue.append(Integer.toHexString(val);return hexValue.toStri

39、ng();為了再次增加安全性,可以對 MD5 進行異或運算。具體算法見附錄。運行結(jié)果如下:4 總結(jié)本文主要對 MySQL 數(shù)據(jù)庫的安全配置、MySQL 用戶帳號管理以及使用 MD5 加密提高數(shù)據(jù)庫前臺和后臺數(shù)據(jù)安全性做了詳細研究。通過本次論文的編寫,讓我了解了 MySQL 數(shù)據(jù)庫的安全配置、用戶賬號管理、增刪用戶等知識以及如何使用 MD5 加密地數(shù)據(jù)庫中的數(shù)據(jù)進行加密。在今后的軟件開發(fā)中,我知道如何盡可能的提高數(shù)據(jù)庫的安全性,保證資料不被竊取。由于 MySQL 數(shù)據(jù)庫是個相當復雜的管理數(shù)據(jù)的系統(tǒng),有很多問題我沒有實際操作,有很多實際操作結(jié)果與書籍中的不一致,還有很多問題書籍中沒有詳細講解等等,所以這次論文只做了簡單研究,有些地方講解的不清楚。這都是本次論文的不足之處。我希望通過以后的進一步學習,能夠更好的掌握 MySQL 數(shù)據(jù)庫的安全管理。參考文獻:參考文獻:1唐漢明,蘭麗華,關寶軍等MySQL 數(shù)據(jù)庫優(yōu)化與管理維護 北京:人民郵電出版社,2008 年,第 25-45 頁。2David Litchfield Chris Anley 著,閆雷鳴 刑蘇霄 翻譯 數(shù)據(jù)庫黑客大曝光 出版地:北京 清華大學出版社, 2006 年,第 222-266 頁3朱小平 網(wǎng)絡數(shù)據(jù)庫安全技術(shù)的研究與實現(xiàn) 同濟大學碩士論文 2006 年,第 5-34頁4高延玲 網(wǎng)絡數(shù)據(jù)庫安全研究與應用 西安電子科技

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論