首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 內建系統資料庫 INFORMATION_SCHEMA、mysql、test 用途詳解與隱藏技巧

     編輯:MySQL 資料庫相關知識

MySQL 內建系統資料庫 INFORMATION_SCHEMA、mysql、test 用途詳解與隱藏技巧


全新安裝 MySQL 後預設存在三個系統資料庫,理解其用途對安全管理、權限控制、工具配置至關重要。


1. INFORMATION_SCHEMA:元資料的虛擬視圖

核心定位

  • **資料字典/系統目錄**:提供唯讀視圖,反映伺服器維護的所有資料庫、資料表、欄位、索引、權限、分區等元資料。
  • **非實體表**:無對應 .frm/.ibd 檔案,查詢時動態從內存結構生成結果。
  • **權限隔離**:每位使用者僅能看到自己有權限物件的元資料行。

常用查詢範例

-- 列出所有資料表大小
SELECT TABLE_SCHEMA, TABLE_NAME, 
       ROUND((DATA_LENGTH+INDEX_LENGTH)/1024/1024,2) AS Size_MB
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA NOT IN ('mysql','information_schema','performance_schema','sys')
ORDER BY Size_MB DESC;

-- 檢查欄位定義
SELECT COLUMN_NAME, DATA_TYPE, COLUMN_KEY, IS_NULLABLE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA='mydb' AND TABLE_NAME='users';

隱藏技巧:在 phpMyAdmin/SQLyog/MySQL-Front 隱藏此庫

  • phpMyAdmin:config.inc.php 加入 $cfg['Servers'][$i]['hide_db'] = 'information_schema';
  • SQLyog:連線設定 → Database(s) 欄位僅填入需顯示的資料庫名。
  • MySQL-Front:登入分頁 → Database 欄位指定顯示的資料庫。

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

關鍵內容

  • user 表:帳號、主機、密碼雜湊、全域權限(Select_priv、Shutdown_priv 等)。
  • db、tables_priv、columns_priv、procs_priv:層層遞減的物件級權限。
  • help_* 表:內建說明文件內容。
  • time_zone_* 表:時區資料(需手動載入)。
  • plugin、servers、func:插件、外部伺服器、UDF 註冊資訊。

操作鐵律

  1. **嚴禁手工 DELETE/UPDATE mysql 表**,務必使用 CREATE USER、GRANT、SET PASSWORD 等 SQL 語句,確保權限快取同步刷新(FLUSH PRIVILEGES)。
  2. **不可刪除、不可輕易變更表結構**,升級 MySQL 版本時執行 mysql_upgrade 自動調整。
  3. **備份策略**:邏輯備份(mysqldump --system=mysql)與實體備份並重,災難恢復時優先恢復 mysql 系統表。

3. test:臨時測試用空資料庫

  • 安裝腳本自動建立,**完全空白,無任何表**。
  • **可安全刪除**:DROP DATABASE test; 生產環境建議移除,減少攻擊面。
  • 若需測試,建議建立專用 dev_test 資料庫並限制權限。

安全加固建議

資料庫風險對策
INFORMATION_SCHEMA資訊洩露(表結構、版本)工具端隱藏;最小權限帳號無法查看敏感表
mysql權限竄改、密碼雜湊洩露僅 DBA 可存取;啟用 SSL;審計登入嘗試
test匿名使用者建表、佔用資源安裝後立即刪除;mysql_secure_installation 自動處理

掌握三大系統庫特性,是 MySQL DBA 入門必修課,也是安全基線檢查的起點。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved