本文更新于2020-05-03,使用MySQL 5.7,作業系統為Deepin 15.4,
目錄
- 權限
- 安全
- 作業系統相關的安全問題
- 資料庫相關的安全問題
- 資料庫安全設定選項
權限
權限存取需要用到mysql庫中user、db、host、tables_priv、columns_prvi這幾個權限表,列分為4個部分:用戶列、權限列、安全列、資源控制列,權限列又分為普通權限和管理權限,
| 表名 | user | db | host | 說明 |
|---|---|---|---|---|
| 用戶列 | host | host | host | |
| 用戶列 | user | db | db | |
| 用戶列 | password | user | ||
| 權限列 | select_priv | select_priv | select_priv | 查詢記錄 |
| 權限列 | insert_priv | insert_priv | insert_priv | 插入記錄 |
| 權限列 | update_priv | insert_priv | insert_priv | 更新記錄 |
| 權限列 | delete_priv | delete_priv | delete_priv | 洗掉記錄 |
| 權限列 | index_priv | index_priv | index_priv | 維護索引 |
| 權限列 | alter_priv | alter_priv | alter_priv | 修改資料庫或表 |
| 權限列 | create_priv | create_priv | create_priv | 創建資料庫或表 |
| 權限列 | drop_priv | drop_priv | drop_priv | 洗掉資料庫或表 |
| 權限列 | grant_priv | grant_priv | grant_priv | 授予權限 |
| 權限列 | create_view_priv | create_view_priv | create_view_priv | 創建視圖 |
| 權限列 | show_view_priv | show_view_priv | show_view_priv | 展示視圖 |
| 權限列 | create_routine_priv | create_routine_priv | 創建存盤程序或函式 | |
| 權限列 | alter_routine_priv | alter_routine_priv | 修改存盤程序或函式 | |
| 權限列 | references_priv | references_priv | references_priv | ? |
| 權限列 | reload_priv | 重新加載MySQL | ||
| 權限列 | shutdown_priv | 關閉MySQL | ||
| 權限列 | process_priv | 查看所有執行緒 | ||
| 權限列 | file_priv | 匯出匯入檔案 | ||
| 權限列 | show_db_priv | 展示所有庫 | ||
| 權限列 | super_priv | 超級權限 | ||
| 權限列 | create_tmp_table_priv | create_tmp_table_priv | create_tmp_table_priv | 創建臨時表 |
| 權限列 | lock_tables_priv | lock_tables_priv | lock_tables_priv | 鎖表 |
| 權限列 | execute_priv | 執行存盤程序或函式 | ||
| 權限列 | repl_slave_priv | 與復制有關 | ||
| 權限列 | repl_client_priv | 與復制有關 | ||
| 安全列 | ssl_type | |||
| 安全列 | ssl_cipher | |||
| 安全列 | x509_issuer | |||
| 安全列 | x509_subject | |||
| 資源控制列 | max_questions | |||
| 資源控制列 | max_updates | |||
| 資源控制列 | max_connections | |||
| 資源控制列 | max_user_connections |
權限的存取有以下兩個階段:
- 先從user表的host、user和password欄位判斷是否通過身份驗證,
- 按照以下權限表的順序查看是否取得權限:user->db->tables_priv->columns_priv,如果有權限表相應的值為
Y,則取得該權限,在這幾個權限表中,權限范圍依次遞減,全域權限覆寫區域權限,
安全
作業系統相關的安全問題
- 嚴格控制作業系統賬號(通常為mysql)和權限,
- 盡量避免以root(通常使用mysql)權限運行MySQL,
- 防止DNS欺騙:創建賬號時host可指定域名,但若域名對應的IP地址被惡意修改,則資料庫就會被惡意的IP地址訪問,
資料庫相關的安全問題
- 洗掉匿名賬號,
- 給root賬號設定密碼,
- 設定安全密碼,使用密碼有以下幾種方式,也需注意安全問題:直接將密碼寫在命令列中;互動式輸入密碼;將賬號和密碼寫在組態檔中,如寫在/etc/my.cnf的client組中,
- 只授予賬號必需的權限,
- 除root外,任何賬號不應有mysql庫user表的存取權限,
- 不要把
FILE、PROCESS、SUPER權限授予管理員以外的賬號, - 注意
LOAD DATA LOCAL從客戶端本地讀取檔案帶來的安全問題, - 使用MERGE存盤引擎潛藏的安全漏洞:通過MERGE表還可以訪問已被回收權限的子表,
DROP TABLE并不回收相關權限,導致重新創建同名表時,此前其他用戶對此表的權限會自動賦予,- 使用SSL,
- 如果可能,給所有用戶加上訪問host限制,
REVOKE的漏洞:在一個資料庫上多次賦予權限,權限會自動合并;但是在多個資料庫上多次賦予權限,每個資料庫上都會認為是單獨的一組權限,必須在此資料庫上用REVOKE單獨進行權限回收,而REVOKE ALL ON *.*并不會自動完成這個程序,
資料庫安全設定選項
- --old-passwords:該引數只是為了支持4.1版本前的客戶端,這將使得新建或修改的密碼全部變成舊格式,降低了系統安全性,
- --safe-user-create:使用戶不能用
GRANT創建新賬號,除非用戶有mysql.user表的INSERT權限, - --secure-auth:使4.1版本前的客戶端無法進行用戶認證,即使使用了--old-passwords也不行,
- --skip-grant-tables:令服務器不使用權限系統,
- --skip-networking:不允許TCP/IP連接,所有連接必須經命名管道(Named Pipes)、共享記憶體(Shared Memory)、UNIX套接字(Socket)檔案進行,
- --skip-show-database:使用該選項,只有賦予
SHOW DATABASES權限的用戶才能執行且顯示所有庫名;不使用該選項,則所有用戶都能執行,但只顯示有權限的庫名,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/3142.html
標籤:MySQL
下一篇:mysql視圖詳細筆記
