共計 4149 個字符,預計需要花費 11 分鐘才能閱讀完成。
自動寫代碼機器人,免費開通
本篇內容介紹了“MySQL 的安全使用方式”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓丸趣 TV 小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
MySQL 基礎知識
MySQL 是一個流行的關系型數據庫管理系統(Relational Database Management System,RDMS),在與 PHP 結合應用方面,MySQL 是最好的關系型數據庫管理系統之一。MySQL 使用不當,常常會引起致命的安全問題。
1、運行安全
為了防止攻擊者通過 MySQL 漏洞越權獲取更高的權限,不要使用系統 root 用戶運行 MySQL 服務器。mysqld 默認拒絕使用 root 運行,如果對 mysqld 服務需要指定用戶進行運行,應該使用普通非特權用戶運行 mysqld,同時為數據庫建立獨立的 Linux 中的 MySQL 賬戶,該賬戶只用于管理和運行 MySQL。
在 MySQL 配置 /etc/my.cnf 文件中指定執行賬戶。
vim /etc/my.cnf [mysqld] user=mysql
這個配置使服務器用指定的用戶來啟動,無論是手動啟動還是通過 mysqld_safe 或 mysql.server 啟動,都能確保使用 MySQL 的身份。也可以在啟動參數上進行配置,加上 user 參數。
/usr/local/mysql/bin/mysqld_safe --user=mysql
默認的 MySQL 安裝在 /usr/local/mysql,對應的默認數據庫文件在 /usr/local/mysql/var 目錄下,必須保證該目錄不能讓未經授權的用戶訪問后把數據庫打包復制走,所以要限制對該目錄的訪問。mysqld 運行時,只使用對數據庫目錄具有讀或寫權限的 Linux 用戶來運行。
MySQL 主目錄只允許 root 用戶進行訪問。
chown -R root /usr/local/mysql/
數據庫目錄只允許 MySQL 用戶進行訪問。
chown -R mysql.mysql /usr/local/mysql/var
2、密碼安全
默認安裝的 MySQL 的 root 用戶密碼是空密碼,為了安全起見,必須修改為強密碼,即至少 8 位,由字母、數字和符號組成的不規律密碼。使用 MySQL 自帶的 mysqladmin 命令修改 root 密碼。
mysqladmin -u root password new-password // 使用 mysqladmin 修改密碼
同時可以使用下面的命令登錄數據庫對密碼進行修改。
mysql use mysql mysql update user set pas sword=pas sword(new-password) where user= root mysql flush privileges; // 強制刷新內存授權表,否則使用的還是在內存緩沖的口令
3、賬號安全
系統 MySQL 的默認管理員名稱是 root,而一般情況下,數據庫管理員都沒有進行修改,這在一定程度上為系統用戶密碼暴力破解的惡意攻擊行為提供了便利,應該修改為復雜的用戶名,加強賬號的安全,同時不要使用 admin 或者 administrator,因為它們也在易猜解的用戶字典中。
mysql update user set user= new-root-name where user= root mysql flush privileges; // 強制刷新內存授權表,否則使用的還是在內存緩沖的口令
需要正確地給用戶分配權限,不要將全部權限分配給普通用戶,有選擇性地分配讀寫權限,如只分配查詢權限給用戶。
mysql grant SELECT on db.table to username@ localhost
不要將 with grant option 授權給普通用戶,防止普通用戶將權限授予他人,造成管理混亂。
表 1 是常用的權限及說明。
表 1 常用權限及說明
4、數據庫安全
默認 MySQL 安裝初始化后會自動生成空用戶和 test 庫,進行安裝測試,這會對數據庫的安全構成威脅,有必要全部刪除,最后的狀態只保留單個 root 即可。當然,以后可以根據需要增加用戶和數據庫。
mysql show databases; mysql drop database test; // 刪除數據庫 test use mysql; delete from db; // 刪除存放數據庫的表信息,因為還沒有數據庫信息 mysql delete from user where not (user= root // 刪除初始非 root 的用戶 mysql delete from user where user= root and password=; // 刪除空密碼的 root Query OK, 2 rows affected(0.00 sec) mysql flush privileges; // 強制刷新內存授權表
5、限制非授權 IP 訪問
如果是單機運行 MySQL,推薦開啟 skip-networking,可以徹底關閉 MySQL 的 TCP/IP 連接方式。
# my.ini skip-networking
如果是固定 IP 訪問 MySQL,可以在配置文件中增加 bind-address=IP,前提是關閉 skip-networking。
bind-address=10.10.1.1
6、文件讀取安全
在 MySQL 中,使用 load data local infile 命令提供對本地文件的讀取功能。在 5.0 版本中,該選項是默認打開的,該操作會利用 MySQL 把本地文件讀到數據庫中,然后攻擊者就可以非法獲取敏感信息。假如不需要讀取本地文件,應將其關閉。
網絡上流傳的一些攻擊方法中就有用到 load data local infile 的,同時它也是很多新發現的 SQL Injection 攻擊利用的手段。攻擊者還能通過使用 load data local infile 裝載“/etc/passwd”進一個數據庫表,然后用 SELECT 顯示它,這個操作對服務器的安全來說是致命的。
可以在 my.cnf 中添加 local-infile= 0 參數。
vim /etc/my.cnf [mysqld] set-variable=local-infile = 0
或者在 MySQL 啟動時添加 local-infile= 0 參數。
/usr/local/mysql/bin/mysqld_safe --user=mysql --local-infile=0
7、常用安全選項
下面是一些 MySQL 自己提供的安全選項,在使用 MySQL 服務時可以根據自己的需要進行靈活的配置。
--allow-suspicious-udfs
該選項控制是否可以載入主函數只有 xxx 符號的用戶定義函數,如 xxx_init()、xxx_deinit()、xxx_reset()、xxx_clear()、xxx_add()等函數。默認情況下,該選項關閉,并且只能載入至少有輔助符的 UDF。這樣可以防止從未包含合法 UDF 的共享對象文件載入函數。
--local-infile[={0|1}]
如果用 –local-infile= 0 啟動服務器,則客戶端不能使用 LOCAL IN LOAD DATA 語句。
--old-passwords
強制服務器為新密碼生成短 (pre-4.1) 散列密碼。當服務器必須支持舊版本客戶端程序時,這對于保證兼容性很有作用。
(OBSOLETE) --safe-show-database
在以前版本的 MySQL 中,該選項使 SHOW DATABASES 語句只顯示用戶具有部分權限的數據庫名。在 MySQL 5.1 中,該選項不再作為現在的默認行為使用,有一個 SHOW DATABASES 權限可以用來控制每個賬戶對數據庫名的訪問。
--safe-user-create
如果啟用,用戶不能使用 GRANT 語句創建新用戶,除非用戶有 mysql.user 表的 INSERT 權限。如果要讓用戶具有授權權限來創建新用戶,應給用戶授予下面的權限。
mysql GRANT INSERT(user) ON mysql.user TO user_name @ host_name
這樣確保用戶不能直接更改權限列,必須使用 GRANT 語句給其他用戶授予該權限。
--secure-auth
不允許鑒定有舊 (pre-4.1) 密碼的賬戶。
--skip-grant-tables
這個選項導致服務器根本不使用權限系統,從而使得每個人都有權完全訪問所有數據庫!(通過執行 mysqladmin flush-privileges 或 mysqladmin eload 命令,或執行 FLUSH PRIVILEGES 語句,可以告訴一個正在運行的服務器再次開始使用授權表。)
--skip-name-resolve
主機名不被解析。所有在授權表的 Host 的列值必須是 IP 號或 localhost。
--skip-networking
在網絡上不允許 TCP/IP 連接。所有到 mysqld 的連接必須經由 Unix 套接字進行。
--skip-show-database
使用該選項,只允許有 SHOW DATABASES 權限的用戶執行 SHOW DATABASES 語句,該語句顯示所有數據庫名。不使用該選項,允許所有用戶執行 SHOW DATABASES,但只顯示用戶有 SHOW DATABASES 權限或部分數據庫權限的數據庫名。請注意,全局權限指數據庫的權限。
8、數據安全
在生產環境中,數據庫可能會遭遇各種各樣的不測從而導致數據丟失,如硬件故障、軟件故障、自然災害、惡意攻擊者攻擊、誤操作等都會對數據造成損壞或丟失。為了在數據丟失之后能夠及時恢復數據,需要定期對數據進行備份。
備份數據的策略要根據不同的業務場景進行定制,大致有幾個參考數值,可以根據這些數值來定制符合特定環境中的數據備份策略。
(1)能夠容忍丟失多少數據。
(2)恢復數據需要多長時間。
(3)需要恢復哪些數據。
根據業務場景的需要來選擇備份方式是完整備份、增量備份還是差異備份。
“MySQL 的安全使用方式”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注丸趣 TV 網站,丸趣 TV 小編將為大家輸出更多高質量的實用文章!
向 AI 問一下細節