萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 內建系統資料庫詳解:information_schema、mysql、test

全新安裝 MySQL 後,預設會建立三個系統資料庫,各司其職。理解它們的角色與權限模型,是資料庫管理與安全強化的基礎。

1. information_schema:元資料視圖庫

  • 定位: 資訊資料庫,提供對所有資料庫中繼資料的標準化檢視介面(資料表、欄位、索引、權限、字符集等)。
  • 本質: 內部為唯讀視圖,非實體表,因此資料目錄下無對應 .frm/.ibd 檔案。
  • 權限模型: 所有使用者可訪問,但僅能看到擁有權限的物件對應行(權限過濾在視圖層實現)。
  • 常用場景: 結構同步工具、ORM 反向工程、權限審計、結構變更監控。

隱藏 information_schema 的客戶端設定

部分 GUI 工具預設顯示此庫,易干擾業務開發人員:

  • phpMyAdmin: config.inc.php 加入 $cfg['Servers'][$i]['hide_db'] = 'information_schema';
  • SQLyog: 建立連線時,在「Database(s)」欄位指定僅顯示業務庫(多庫以分號分隔,未實測)。
  • MySQL-Front: 連線屬性「Login」頁籤下的「Database」指定業務庫。

2. mysql:核心權限與控制庫

  • 對應 SQL Server 的 master 資料庫。
  • 儲存:使用者帳號、權限表(user、db、tables_priv...)、幫助主題、時區表、儲存程序/函數/觸發器定義、元件/外掛資訊。
  • 嚴禁刪除;非專業 DBA 請勿手動修改表結構或資料,否則極易導致權限體系崩潰、服務無法啟動。

3. test:臨時測試庫

  • 安裝腳本自動建立,空庫無任何表。
  • 預設授予 PUBLIC 權限(任何使用者可建表),生產環境建議刪除或回收權限:DROP DATABASE test; REVOKE ALL ON test.* FROM PUBLIC;

安全加固清單

  1. 刪除 test 庫或收回 PUBLIC 權限。
  2. 移除匿名帳號:DELETE FROM mysql.user WHERE user=''; FLUSH PRIVILEGES;
  3. 根帳號僅允許 localhost 登入,強制強密碼。
  4. 生產庫採用專用帳號,最小權限原則(僅 SELECT/INSERT/UPDATE/DELETE)。
  5. 啟用 skip_show_database 參數,限制非管理員執行 SHOW DATABASES。

熟悉三大系統庫的分工與風險點,能幫助 DBA 從安裝第一天起就建立安全、可維運的資料庫基線。

copyright © 萬盛學電腦網 all rights reserved