天天看點

SELECT command denied to user 'username'@'ip' for table 'user'錯誤處理

錯誤資訊

使用RDS for MySQL,程式執行查詢SQL時報錯如下:

<div class="code-tools">
  <i class="theme-switch-btn"></i><i class="copy-btn"></i>
</div>
<pre class="pre codeblock" id="codeblock-op1-mla-6o9"><code class="hljs pgsql"><span class="hljs-keyword">SELECT</span> command denied <span class="hljs-keyword">to</span> <span class="hljs-keyword">user</span> <span class="hljs-string">'username'</span>@<span class="hljs-string">'ip'</span> <span class="hljs-keyword">for</span> <span class="hljs-keyword">table</span> <span class="hljs-string">'user'</span> </code></pre>
<div class="pre-scrollbar-track" style="display: none;width: 100%;height: 4px;margin-bottom: 16px;">
  <div class="pre-scrollbar-thumb" style="height: 100%;background-color: #d7d8d9;position: relative;"></div>
</div>
           
</div> 
           

排查步驟

  1. 測試RDS執行個體是否異常。可以使用mysql用戶端連接配接到RDS,查詢對應的表,如果可以正常查詢,說明RDS沒有問題。
  2. 用Wireshark軟體抓包本機發出的實際請求:
    1. 在Wireshark界面中,選擇捕獲 > 選項,在輸入頁簽選擇連接配接RDS的内網網卡,在輸出頁簽填寫輸出的檔案名,然後單擊開始。
      SELECT command denied to user 'username'@'ip' for table 'user'錯誤處理
    2. 複現問題,問題複現後,停止抓包。
  3. 打開生成的抓封包件,在顯示過濾器裡輸入mysql,過濾出mysql協定,找到報錯的包。
    SELECT command denied to user 'username'@'ip' for table 'user'錯誤處理
  4. 在報錯的條目上單擊右鍵,選擇追蹤流 > TCP流。
    SELECT command denied to user 'username'@'ip' for table 'user'錯誤處理
  5. 檢查發送的SQL是否正确。

    說明 上面的案例中,報錯原因在于庫名是fnb,而程式拼接出來的是hnb.user,資料庫名拼接錯誤導緻報錯, 修正資料庫名後問題解決。