分配使用者權限的格言是,應該為使用者分配執行其工作職能所需的最低權限,而不必分配更高權限。這就是 MySQL 提供如此精細的存取控制系統的原因。儘管不是最容易掌握的系統,但是一旦 DBA 做到了,他或她就會傾向於認為此系統確實非常有效。在今天的文章中,我們將學習如何防止使用者列出在 MySQL 的資料庫。
使用 mysql.user 資料表
mysql.user 資料表包含有關有權存取 MySQL 伺服器的使用者的資訊,以及其全域權限。儘管可以直接查詢和更新 user 資料表,但是最好使用 GRANT 和 CREATE USER 加入使用者和權限。若要查看 user 資料表的內容,我們可以使用 DESC 命令:
允許使用者執行 SHOW_DATABASES 命令取得資料庫清單的權限是 Show_db_priv。因此,在新資料庫上,我們可以簡單地不將使用者加入資料庫以防止使用者看到它。否則,你可以發出 SHOW GRANTS 命令來查看使用者目前擁有哪些權限:
SHOW GRANTS FOR 'bob_s'@'localhost';
這是 Navicat Premium 中「bob_s@localhost」使用者的一些範例輸出:
撤銷使用者權限
上面的輸出確認 bob_s 確實具有 SHOW DATABASES 權限。如果現在要刪除該權限,可以發出 REVOKE 命令:
REVOKE Show_db_priv ON sakila FROM bob_s'@'localhost;
在 Navicat 中,我們可在使用者詳細資料的「伺服器權限」和「權限」索引標籤中,於伺服器和資料庫層級設定使用者權限。若要存取它們,請按一下主要按鈕列上的「使用者」按鈕,選取你感興趣的使用者,然後按一下物件工具列上的「權限管理員」按鈕:
以下是 bob_s@localhost 的伺服器層級權限(包括 SHOW DATABASES):
若要撤銷 SHOW DATABASES 權限,我們只需取消勾選 SHOW DATABASES 標籤旁邊的核取方塊,然後按一下「儲存」按鈕。
以下是 bob_s@localhost 的 sakila 資料庫權限:
在這裡,我們還可以設定數據庫特定的權限,例如用於建立檢視、顯示檢視、刪除資料表、執行 INSERT 陳述式等的權限。我們甚至可以在資料表和欄層級管理權限!
總結
在今天的文章中,我們看到如何透過 MySQL REVOKE 命令以及使用 Navicat 的「伺服器權限」和「權限」索引標籤來阻止使用者在 MySQL 中列出資料庫。大家可能爭論兩者哪個比較容易,但我個人認為核取方塊方法更為直覺。
若要了解有關在 Navicat 中管理使用者的更多資訊,請看「在 Navicat Premium 中管理 MySQL 使用者」系列的文章:
如果你對 Navicat for MySQL 感興趣,可以免費試用 14 天!