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

MySQL 錯誤 1142「INSERT command denied to user」權限不足排查與修復

     編輯:MySQL 資料庫相關知識

錯誤全文

MySQL Server error report:
INSERT command denied to user 'user'@'localhost' for table 'table_name', errno: 1142

核心原因

當前連線用戶 缺少目標表的 INSERT 權限。

三步排查修復

1. 檢查用戶權限

SHOW GRANTS FOR 'user'@'localhost';
-- 或查看具體表權限
SELECT * FROM mysql.tables_priv WHERE User='user' AND Host='localhost' AND Table_name='table_name';

若無 INSERT 權限,需授予:

GRANT INSERT ON db_name.table_name TO 'user'@'localhost';
FLUSH PRIVILEGES;

2. 核對應用配置文件中的帳號

  • 配置文件 (如 config.php、web.config、jdbc.properties) 內的資料庫用戶名/密碼/主機是否正確。
  • 是否誤用唯讀賬號、或連到錯實例 (開發/測試/生產環境混用)。

3. 檢查資料庫/磁碟空間是否耗盡

df -h /var/lib/mysql   -- 檢查磁碟剩餘
SHOW TABLE STATUS LIKE 'table_name'; -- 檢查 Data_length/Max_data_length
-- MyISAM 表滿 (達 MAX_ROWS/AVG_ROW_LENGTH 上限) 也會報此錯誤

空間不足解決:清理日誌、歸檔舊數據、擴容磁碟、調大 MAX_ROWS (見文章 90230)。

延伸:權限層級與生效

  • GRANT INSERT ON *.* — 全域 (所有庫所有表)。
  • GRANT INSERT ON db.* — 庫級。
  • GRANT INSERT ON db.table — 表級 (最精準)。
  • GRANT INSERT (col1,col2) ON db.table — 欄位級 (極少用)。

授權後無需重啟,FLUSH PRIVILEGES 或新連線即生效。

預防建議

  1. 應用賬號最小權限:讀寫分離、僅授必要表 SELECT/INSERT/UPDATE/DELETE。
  2. 定期 pt-show-grants 審計權限異常。
  3. 監控磁碟空間、表大小、Max_used_connections 等關鍵指標。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved