MySQL必知必會——安全管理、數據庫維護

一、安全管理

1、訪問控制

MySQL服務器的安全基礎是: 用戶應該對他們需要的數據具有適當的訪問權限,不能多也不能少。
即用戶不能對過多的數據具有過多的訪問權限。
管理訪問控制需要創建和管理用戶賬號。
在現實的日常工作中,需要創建一系列的賬號,有的用於管理,有的供用戶使用,還有的供開發人員使用。

2、管理用戶

MySQL用戶賬號和信息存儲在名爲mysql的數據庫中。一般不需要直接訪問mysql數據庫和其中的表。在要獲得所有用戶賬號列表時才需要直接訪問。

USE mysql;
SELECT user FROM user

2.1、創建用戶賬號

CREATE USER ben IDENTIFIED BY 'p@$$w0rd';

CREATE USER創建了一個新用戶賬號,在創建用戶賬號時不一定需要給出口令,比不過這裏使用了IDENTIFIED BY給出了。
重新命名一個用戶賬號:

RENAME USER ben TO bforta;

2.2、刪除用戶賬號

爲了刪除一個用戶賬號(以及其相關的權限)可以使用DROP USER語句

DROP USER bforta;

2.3、設置訪問權限

在創建用戶賬號後,必須接着分配訪問權限。新創建的用戶賬號沒有任何的訪問權限,它們能登錄MySQL,但是不能看到數據,不能執行任何數據庫操作。
爲了看到賦予用戶賬號的權限:

MariaDB [mysql]> SHOW  GRANTS FOR kobe;
+-----------------------------------------------------------------------------------------------------+
| Grants for kobe@%                                                                                   |
+-----------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'kobe'@'%' IDENTIFIED BY PASSWORD '*665C8C3B7EC07AEEEF14B405DE85A239BEBFA1F3' |
+-----------------------------------------------------------------------------------------------------+

輸出結果顯示用戶kobe有一個權限USAGE ON *.*。USAGE表示根本沒有權限,即該結果表示在任意數據庫和任意表上對任何東西沒有權限。

爲了設置權限使用GRANT語句,需要給出被授予的權限被授予訪問權限的數據庫或表用戶名。

GRANT SELECT ON course.* TO kobe;

使得kobe用戶可以在course數據庫中使用SELECT權限。

MariaDB [(none)]> SHOW  GRANTS FOR kobe;
+-----------------------------------------------------------------------------------------------------+
| Grants for kobe@%                                                                                   |
+-----------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'kobe'@'%' IDENTIFIED BY PASSWORD '*665C8C3B7EC07AEEEF14B405DE85A239BEBFA1F3' |
| GRANT SELECT ON `course`.* TO 'kobe'@'%'                                                            |
+-----------------------------------------------------------------------------------------------------+

每個GRANT添加用戶的一個權限,MySQL讀取所有授權,並根據它們確定權限。

GRANT的反操作爲REVOKE用來撤銷特定的權限。

REVOKE SELECT ON course.* FROM kobe;

被撤銷的訪問權限必須存在,否則會出錯。
GRANT 和 REVOKE可在幾個層次上控制訪問權限:
    整個服務器,使用 GRANT ALL 和 REVOKE ALL;
    整個數據庫,使用 ON database.*;
    特定的表,使用 ON database.table;
    特定的列;
    特定的存儲過程。
可對用戶設定的權限表:
在這裏插入圖片描述

2.4、更改口令

SET PASSWORD更新用戶口令,新口令必須傳遞到Password()函數進行加密。

SET PASSWORD FOR kobe = Password('n3w p@$$w0rd');

如果不指定用戶,則SET PASSWORD 更改當前用戶口令

二、數據庫維護

1、備份數據

命令行程序mysqldump,轉儲所有數據庫內容到某個外部文件。
命令行程序mysqlhostcopy,從一個數據庫複製所有數據。
可使用SQL語句BACKUP TABLE或者SELECT INTO OUTFILE轉儲所有數據到某個外部文件,這倆個語句都接受將要創建的系統文件。 數據可以用RESTORE TABLE來複原。
在進行備份前需要使用FLUSH TABLES語句來刷新未寫數據,以保證所有數據被寫到磁盤中。

2、進行數據庫維護

MySQL提供了一些語句來保證 數據庫正確和正確運行。
檢查表鍵是否正確ANALYZE TABLE

MariaDB [course]> ANALYZE TABLE orders;
+---------------+---------+----------+----------+
| Table         | Op      | Msg_type | Msg_text |
+---------------+---------+----------+----------+
| course.orders | analyze | status   | OK       |
+---------------+---------+----------+----------+

針對許多問題對錶進行檢查CHECK TABLE。在MyISAM表上還對索引進行檢查。CHECK TABLE支持一系列的用於MyISAM表的方式。CHANGED檢查自最後一次檢查以來改動過的表,EXTENDED執行最徹底的檢查,FAST只檢查爲正常關閉的表。MEDIUM檢查所有被刪除的鏈接並進行鍵檢查。QUICK只進行快速掃描。

MariaDB [course]> CHECK TABLE orders,orderitems;
+-------------------+-------+----------+----------+
| Table             | Op    | Msg_type | Msg_text |
+-------------------+-------+----------+----------+
| course.orders     | check | status   | OK       |
| course.orderitems | check | status   | OK       |
+-------------------+-------+----------+----------+

如果MyISAM表訪問產生不正確和不一致的結果,可能需要用REPAIRE TABLE來修復相應的表。
如果從一個表中刪除大量數據,應該使用OPTIMIZE TABLE來收回所用的空間。從而優化表的性能。

3、診斷啓動問題

服務器啓動問題通常在對MySQL配置或服務器本身進行更改時出現。MySQL在這個問題發生時 報告錯誤,但由於多數MySQL服務器是作爲系統進程或服務自動啓動的,這些消息可能 看不到。
在排除系統啓動問題時,首先應該儘量手動啓動服務器,MySQL服務器自身通過在命令行上執行mysqld啓動。
下面是幾個重要的mysqld命令行選項:
--help顯示幫助
--safe-mode裝載減去某些最佳配置的服務器
--verbose顯示全文信息
--version顯示版本信息然後退出。

4、查看日誌文件

MySQL維護管理員依賴一系列的日誌文件,主要的日誌文件有以下幾種:

  • 錯誤日誌。包含啓動和關閉問題以及任意關鍵錯誤的細節,此日誌通常名爲hostname.err,位於data目錄中。此日誌名可以用--log-error命令行選項更改。
  • 查詢日誌。它記錄所有MySQL活動,在診斷問題時非常有用,此日誌文件可能會很快地變得非常大,因此不應該長期使用。通常名爲hostname.log,位於data目錄。此名字可以用--log命令行選項進行修改。
  • 二進制日誌。它記錄更新過數據的所有語句。此日誌通常名爲hostname-bin,位於data目錄中。可以用--log-bin命令行選項進行修改。
  • 緩慢查詢日誌。此日誌記錄執行緩慢的任何查詢。這個日誌在確定數據庫何處優化很有用,此日誌通常命名爲hostname-slow.log,位於data目錄中。此名字可以用--log-=slow-queries命令行選項進行修改。

使用日誌時,可用FLUSH LOGS語句來刷新和重新開始所有日誌文件。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章