如何對嘗試連線到我的 Amazon Relational Database Service (Amazon RDS) 或 Amazon Aurora MySQL 資料庫叢集時收到的存取錯誤進行疑難排解?
我嘗試連線到我的 Amazon Relational Database Service (Amazon RDS) 或 Amazon Aurora MySQL 資料庫叢集時遇到存取錯誤,我想要解決。
簡短說明
發生 Access denied 錯誤或其他存取問題,可能是下列原因導致:
- 使用者名稱或密碼無效
- 資料庫執行個體未處於 AVAILABLE 狀態
- 嘗試連線時使用了錯誤的主機
- 使用者存在,但主機未具備正確的權限來進行連線,或無法將存取權授予另一位使用者
- 用戶端未使用必要的 SSL
- 存在具有相同使用者名稱的重複使用者
- 密碼中的特殊字元經 Bash 轉換
- 連線封包未包含正確的資訊
- max_allowed_packet 參數值太小
- AWS Identity and Access Management (IAM) 身分驗證問題
- Amazon RDS Proxy 問題
- Kerberos 身分驗證問題
- 缺乏權限
- AWS Lambda 函式組態問題
- 資料庫使用者遭鎖定
- 應用程式程式碼擷取到錯誤的密碼
- 使用 SELECT INTO OUTFILE Amazon Simple Storage Service (Amazon S3) 選項時發生的問題
若要對您的 Amazon Aurora MySQL 資料庫叢集進行身分驗證,請完成下列任一選項:
- 在 MySQL 網站上存取控制和帳戶管理。
- 進行 IAM 資料庫身分驗證
- 透過 Amazon RDS Proxy 連線至資料庫
- 針對 Amazon Aurora MySQL 使用 Kerberos 身分驗證
如需更多資訊,請參閱 MySQL 網站上的 Access denied (拒絕遭拒)。
解決方法
**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤,請確認您執行的是最新版 AWS CLI。
注意:請務必檢查所有命令,並將所有範例字串執行個體替換為所需的值。
使用者名稱或密碼無效
使用者名稱不正確
1. 檢查使用者是否存在:
mysql> SELECT user FROM mysql.user WHERE User='username';
2. 如果使用者不存在,請建立新的使用者:
mysql> CREATE USER 'example-new-username'@'%' IDENTIFIED BY 'example-new-password-here'; mysql> FLUSH PRIVILEGES;
如需更多資訊,請參閱 Master user account privileges (主要使用者帳戶權限)。
密碼不正確
請確保您在連線至資料庫時輸入正確的使用者名稱與密碼。請勿在密碼中使用特殊字元。
如果您使用的是非主要使用者帳戶且忘記密碼,請透過 Amazon RDS 主要使用者來重設密碼。如果忘記 Amazon RDS 主要使用者密碼,請參閱 How do I reset the admin user password for my Amazon RDS DB instance? (如何重設 Amazon RDS 資料庫執行個體的管理員使用者密碼?)
重設非主要使用者密碼:
ALTER USER 'example-username'@'example-localhost' IDENTIFIED BY 'example-new-password';
**注意:**在 Amazon RDS 中,預設會將 log_error_verbosity 設為 2。請務必驗證 Amazon RDS 所記錄的錯誤與警告,以深入了解因身分驗證而導致的連線失敗。
資料庫執行個體未處於 AVAILABLE 狀態
請檢閱下列主題,確認您的資料庫執行個體目前處於 AVAILABLE 狀態:
- 針對 Amazon RDS,請參閱 View Amazon RDS DB instance status (檢視 Amazon RDS 資料庫執行個體狀態)。
- 針對 Amazon Aurora,請參閱 View DB instance status in an Aurora cluster (檢視 Aurora 叢集中的資料庫執行個體狀態)。
如需更多資訊,請參閱 How do I resolve problems when I connect to my Amazon RDS DB instance? (如何解決連線到 Amazon RDS 資料庫執行個體時發生的問題?)
嘗試連線時使用了錯誤的主機
為確保您不會使用錯誤的主機連線至資料庫執行個體,請完成下列步驟:
- 使用 -h 旗標與連接埠來指定正確的主機。
- 檢閱 Aurora 和 RDS 主控台上的 Instance (執行個體) 頁面,然後檢查您的主機名稱與連接埠。
- 請確保您沒有嘗試使用資料庫執行個體的 IP 位址進行連線。IP 位址可能會因執行個體停止與啟動、主機更換、容錯移轉或升級而發生變更。
使用者存在,但主機未具備正確的權限來進行連線,或無法將存取權授予另一位使用者
1. 識別 MySQL 允許從中進行連線的主機使用者:
mysql> SELECT host, user FROM mysql.user WHERE User='username';
2. 修改現有使用者以允許新的 IP 位址:
RENAME USER example-current-user@example-ipaddress TO example-new-user@example-ipaddress;
3. 若要建立具有正確主機,或具有正確 % 的新使用者以比對任何 IP 位址,請執行此命令:
mysql> CREATE USER 'example-db-user'@'%' IDENTIFIED BY 'example-new-password';
用戶端未使用必要的 SSL
若要檢查是否有使用者在連線時需要使用 SSL,請執行此命令:
mysql> SELECT * FROM mysql.user WHERE ssl_type <> '';
如果使用者需要 SSL,則必須使用 SSL 進行連線。如需更多資訊,請參閱 Use SSL/TLS to encrypt a connection to a DB cluster (使用 SSL/TLS 加密至資料庫叢集的連線) 和 Connect from the MySQL command-line client with SSL/TLS (encrypted) (從 MySQL 命令列用戶端使用 SSL/TLS 連線 (已加密))。
存在具有相同使用者名稱的重複使用者
如果存在另一個具有相同使用者名稱的使用者,您的連線會遭拒絕。
檢查是否存在具有相同使用者名稱的使用者:
mysql> SELECT host, user FROM mysql.user WHERE User='example-username';
如果是,請完成下列步驟:
- 以其他使用者,或有權移除其他使用者的使用者身分登入。
- 移除重複的使用者名稱。
- 以先前因使用者名稱重複而遭拒的使用者進行連線。
如需更多資訊,請參閱 How do I create another admin user for my Amazon RDS DB instance that is running MySQL? (如何為執行 MySQL 的 Amazon RDS 資料庫執行個體建立另一個管理員使用者?)
密碼中的特殊字元經 Bash 轉換
如果您密碼中的特殊字元會受到 Bash 解釋,請用單引號將密碼括起來。
連線封包未包含正確的資訊
若要取得連線封包,您花費的時間必須超過 connect_timeout 參數值 (秒)。請聯絡您的資料庫管理員,然後根據您的查詢與工作負載調整資料庫參數的值。如需更多資訊,請參閱 MySQL 網站上的 connect_timeout。
max_allowed_packet 參數值太小
根據預設,max_allowed_packet 參數的值較小,這樣系統便可抓出大型且不正確的封包。如果您使用大型 BLOB 欄位或長字串,請增加 max_allowed_packet 參數值。如需詳細資訊,請參閱 MySQL 網站上的 max_allowed_packet 和 Best practices for configuring parameters for Amazon RDS for MySQL (為 Amazon RDS for MySQL 設定參數的最佳實作)。
IAM 身分驗證問題
若要排解與 IAM 身分驗證相關的連線問題,請完成下列步驟:
- 若要連線至執行個體,請參閱如何允許使用者透過其 IAM 憑證對 Amazon RDS for MySQL 資料庫執行個體進行驗證?
- 若要排解錯誤,請參閱當我嘗試使用 IAM 驗證連線到 Amazon RDS for MySQL 時,為什麼會收到「存取遭拒」錯誤?
- 若要擷取偵錯錯誤訊息的資訊,請執行下列命令:
$ TOKEN="$(aws rds generate-db-auth-token --hostname <example-endpoint> --port 3306 --username <example-username> --region <example-region-debug)"
Amazon RDS Proxy 問題
若要排解與 Amazon RDS Proxy 相關的連線問題,請完成下列步驟:
- 若要連線,請參閱 How do I connect to my Amazon RDS MySQL DB instance or Aurora MySQL DB cluster with Amazon RDS Proxy? (如何透過 Amazon RDS Proxy 連線至我的 Amazon RDS MySQL 資料庫執行個體或 Aurora MySQL 資料庫叢集?)
- 如果無法連線,請參閱為什麼我無法使用 RDS Proxy 連線至 Amazon RDS 資料庫或 Amazon Aurora 資料庫執行個體?
**注意:**若要記錄有關連線失敗的更多詳細資訊,請在進一步隔離問題之前使用增強型日誌記錄。此外,僅在 Amazon Virtual Private Cloud (Amazon VPC) 網路內可從 Amazon RDS Proxy 進行連線,非 Amazon VPC 的連線則會遭到封鎖。
Kerberos 身分驗證問題
若要為 Amazon Aurora MySQL 資料庫叢集設定 Kerberos 身分驗證,請參閱 Set up Kerberos authentication for Aurora MySQL DB clusters (為 Aurora MySQL 資料庫叢集設定 Kerberos 身分驗證)。
缺乏權限
在您授予支援的權限之前,執行授權命令的資料庫使用者必須擁有要求的權限與授權選項。如果您以 Amazon RDS 主要使用者身分收到拒絕存取錯誤,請重設密碼,然後重試執行命令。
**注意:**重設主要使用者密碼不會產生停機時間。
若要檢視使用者的權限,請執行此命令:
SHOW GRANTS for username;
如需支援的 Amazon Aurora MySQL 權限清單,請參閱 Master user account privileges (主要使用者帳戶權限)。
AWS Lambda 函式組態問題
若要排解 AWS Lambda 函式組態問題,請參閱如何設定 Lambda 函式以連線到 RDS 執行個體?
資料庫使用者遭鎖定
當資料庫使用者遭鎖定時,您可能會收到此錯誤:
"Error:[3118] Access denied for user 'example-username'@'example-localhost'.Account is locked"
若要解決此錯誤,請完成下列步驟:
1. 從 Amazon RDS 主要使用者帳戶解鎖帳戶:
ALTER USER 'example-db-username'@'example-%' ACCOUNT UNLOCK;
2. 檢查使用者帳戶是否仍處於鎖定狀態:
SELECT user, host, account_locked FROM mysql.user where user = 'example-username';
應用程式程式碼擷取到錯誤的密碼
應用程式程式碼會從儲存在變數中的值擷取使用者名稱和密碼,並可能因組態錯誤而失敗。若要驗證此連線失敗,請手動輸入使用者名稱和密碼,以從另一個 MySQL 用戶端工具進行連線。接著,檢查連線狀態。
使用 SELECT INTO OUTFILE S3 選項時發生的問題
若要使用 SELECT INTO OUTFILE S3 選項,您的 IAM 政策、叢集參數群組值及傳出安全群組規則等設定需正確。不正確的設定可能會導致拒絕遭拒錯誤。如需更多資訊,請參閱 Save data from an Amazon Aurora MySQL DB cluster into text files in an Amazon S3 bucket (將資料從 Amazon Aurora MySQL 資料庫叢集儲存至 Amazon S3 儲存貯體中的文字檔案)。
相關資訊
Connect to an Amazon Aurora MySQL DB cluster (連線至 Amazon Aurora MySQL 資料庫叢集)
IAM database authentication for MariaDB, MySQL, and PostgreSQL (適用於 MariaDB、MySQL 和 PostgreSQL 的 IAM 資料庫身分驗證)
Work with parameter groups (使用參數群組)
How can I troubleshoot connectivity to an Amazon RDS DB instance that uses a public or private subnet of a VPC? (如何對使用 VPC 公有或私有子網路之 Amazon RDS 資料庫執行個體的連線進行疑難排解?)
相關內容
已提問 2 年前
已提問 3 年前
