iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 9
1
AI & Data

一名合格的DBA要從底層一步步爬起系列 第 9

《Day9》MySQL 權限與安全性

設定資料庫的權限與資料庫安全是息息相關的,如果給予不當的權限可能會有資安疑慮,所以我們必須對權限設置有一定的認識。


MySQL的權限系統是透過兩個階段進行認證的,首先會先對連接用戶的IP與用戶名稱進行身分認證,若驗證不合格將會拒絕連線,連結成功的用戶則可以在其擁有權限對資料庫進行操作。

  • 身分驗證

MySQL帳戶是透過IP與用戶名稱結合而成的,譬如有一個用戶為andy@localhost,代表用戶andy只能透過本機連線到MySQL,
但也可以限制IP來源,只要建立用戶andy@%就可以了,不過這個方式會有資安問題,不太建議使用。
%是代表任何IP。

  • 權限表

MySQL的權限表儲存在資料庫「mysql」中,其中資料表user與db最重要,我們就來看一下裡面的內容吧!

Table Name User db
使用者列 Host Host
User db
user
權限列 Select_priv Select_priv
Insert_priv Insert_priv
Update_priv Update_priv
Delete_priv Delete_priv
Create_priv Create_priv
Drop_priv Drop_priv
Reload_priv
Shutdown_priv
Process_priv
File_priv
Grant_priv Grant_priv
References_priv References_priv
Index_priv Index_priv
Alter_priv Alter_priv
Show_db_priv
Super_priv
Create_tmp_table_priv Create_tmp_table_priv
Lock_tables_priv Lock_tables_priv
Execute_priv
Repl_slave_priv
Repl_client_priv
Create_view_priv Create_view_priv
Show_view_priv Show_view_priv
Create_routine_priv Create_routine_priv
Alter_routine_priv Alter_routine_priv
Create_user_priv
Event_priv
Trigger_priv
Create_tablespace_privc
Execute_priv
Event_priv
Trigger_priv

根據上方資料表欄位,若使用者有權限,值將會顯示Y,若無權限將會顯示N。
若在User表擁有權限,代表對於所有資料庫的權限,但若只是在db表有權限,則是只對目標資料庫擁有權限。
現在我們就建立一個新用戶Nini,限制只能從本機連線,再給他select全部資料庫的權限。

mysql> create user 'Nini'@'localhost' identified by '密碼';
mysql> grant select on *.* to 'Nini'@'localhost';

查看user表確認Nini擁有select權限。
如下圖,用戶Nini@localhost對所有資料庫已經擁有select權限。
https://ithelp.ithome.com.tw/upload/images/20200912/20129969efZNnhjlWM.png

我們再來測試建立一個新用戶chichi,也是限制只能從本機連線,但只給他select資料庫test01的權限。

mysql> create user 'chichi'@'localhost' identified by '密碼';
mysql> grant select on test01.* to 'chichi'@'localhost';

因為chichi只有針對test01資料庫有select權限,不是所有資料庫,所以在user表會顯示N。
https://ithelp.ithome.com.tw/upload/images/20200912/20129969uSx6LRmVkB.png

查看db表,發現chichi已經有select權限。
https://ithelp.ithome.com.tw/upload/images/20200912/20129969O2VcXaZuyY.png

當使用者連接時,會先從user表的host、user與authentication_string欄位判斷連結的IP、用戶名稱與密碼是否存在,通過驗證之後會依照下列順序取得資料庫權限。
User – db – tables_priv

在user表中有幾個比較重要的權限,File、Process與Super,這邊也要認識一下。
File:權限可以將資料庫資訊匯出到主機,所以如果有重要資訊,會有很大的安全問題。
Process:可以用來查看所有用戶運行的線程,包括設定與更改密碼。
Super:可以執行kill來終止其他用戶session。

我們在設置權限時一定要基於最小權限原則,否則如果給出不必要的權限,可能會造成資安的疑慮。


上一篇
《Day8》MySQL儲存引擎
下一篇
《Day10》輕鬆操作MySQL工具
系列文
一名合格的DBA要從底層一步步爬起30

尚未有邦友留言

立即登入留言