[Website] 管理 MySQL 權限
在管理 MySQL 的時候需要慎重地管理權限,一般來說管理與查看 MySQL 資料庫有三個辦法:
- 使用 root 從 localhost 也就是從伺服器端登入
- 使用 phpmyadmin 登入管理
- 使用其他資料庫軟體 (例如 SQLDeveloper) 登入
這三個管理辦法卻需要相對應的權限,本篇想要總結一些有用的 MySQL 指令充分管理 MySQL 的權限,方法一通常在資料庫生成的時候就會啟動。
查看資料庫使用者列表
首先我們先利用以下指令查看所有的在 mysql 裡面的使用者他們與他們的 host.
SELECT user,host FROM mysql.user;
從得到的資訊我們知道目前,root 只能從 localhost 的 host 登入
+------------------+-----------+
| user | host |
+------------------+-----------+
| postfix | localhost |
| root | localhost |
| user | localhost |
+------------------+-----------+
2 rows in set (0.00 sec)
但是此時如果使用 phpmyadmin 與 root 登入的時候卻會發生以下的情況,其中有錯誤訊息 #1045 – Access denied for user ‘root’@’localhost’ (using password: YES) 的錯誤訊息,但是使用 user 帳號卻可以登入,目前為止還不知道要怎麼給予 root 從 phpmyadmin 登入的權限。
新增使用者
為了啟動遠端登入,我們需要輸入以下指令。
CREATE USER 'user'@'%' IDENTIFIED BY 'password';
+------------------+-----------+
| user | host |
+------------------+-----------+
| user | % |
| postfix | localhost |
| root | localhost |
| user | localhost |
+------------------+-----------+
3 rows in set (0.00 sec)
查看資料庫使用者權限
在利用 mysql 指令登入之後,我們可以利用以下的指令查看權限:
SHOW GRANTS for user@localhost;
SHOW GRANTS for user@'%';
結果顯示從 localhost 端使用 root 登入可以享有 ALL PRIVILEGES 的權限
+---------------------------------------------------------------------------------------------------------------+
| Grants for user@localhost |
+---------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'user'@'localhost' IDENTIFIED BY PASSWORD '*****************************************' |
| GRANT ALL PRIVILEGES ON `example\_%`.* TO 'user'@'localhost' |
+---------------------------------------------------------------------------------------------------------------+
+-----------------------------------------------------------------------------------------------------+
| Grants for user@% |
+-----------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'user'@'%' IDENTIFIED BY PASSWORD '*****************************************' |
+-----------------------------------------------------------------------------------------------------+
新增使用者權限
下列的指令可以給予 user 使用者從任何地方登入 (%) 查看或是修改 example_ 開頭的所有資料庫。
GRANT ALL PRIVILEGES ON `example\_%`.* TO 'user'@'%';
新增完此一個權限之後,我們再重新查看使用者權限會發現以下資訊:
+-------------------------------------------------------------------------------------------------------+
| Grants for user@% |
+-------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'user'@'%' IDENTIFIED BY PASSWORD '*****************************************' |
| GRANT ALL PRIVILEGES ON `example\_%`.* TO 'user'@'%' |
+-------------------------------------------------------------------------------------------------------+
刪除使用者權限
如果想要刪除權限的時候則是使用以下指令,執行之後 user 的權限回復到最初的樣貌!
REVOKE ALL ON `example\_%`.* from 'user'@'%';