我想使用 AWS Identity and Access Management (IAM) 驗證連線到 Amazon Relational Database Service (Amazon RDS) for MySQL 執行個體。但是,我收到「存取遭拒」錯誤。
簡短描述
錯誤訊息可能是因為 IAM 角色權限不足、關閉 IAM 驗證、資料庫使用者設定錯誤,或連線字串錯誤而發生。您可能會收到類似以下內容的錯誤訊息:
"ERROR 1045 (28000): Access denied for user 'root'@'10.0.4.253' (using password: YES)" (「錯誤 1045 (28000):拒絕使用者 'root'@'10.0.4.253' 存取 (使用密碼:是)」)
使用 AWSSupport-TroubleshootRDSIAMAuthentication 執行手冊自動驗證使用 Amazon RDS 執行個體進行 IAM 驗證所需的組態,然後使用解決方案解決此錯誤。
解決方案
IAM 角色權限不足
若要使用 IAM 資料庫驗證連線到您的 Amazon RDS for MySQL 執行個體,您必須具有 rds-db:connect 動作的存取權。如需詳細資訊,請參閱針對 IAM 資料庫存取建立和使用 IAM 政策。
如果您使用服務控制政策 (SCP),請確認您的政策允許連線到資料庫執行個體。如需詳細資訊,請參閱使用 AWS Organizations 建立組織政策。
啟用 IAM 驗證
預設情況下,資料庫執行個體的 IAM 驗證處於關閉狀態。若要啟用 IAM 驗證,請完成下列步驟:
- 開啟 Amazon RDS console (Amazon RDS 主控台)。
- 選取執行個體。
- 選擇 Modify (修改)。
- 在 Database Authentication (資料庫驗證) 中,選擇 Password (密碼)。
- 選取 IAM 資料庫驗證。
- 若要更新您的組態設定,請選擇 Continue (繼續)。
- 若要修改執行個體,請選擇 Apply (套用)。
**注意:**如果您在更新叢集組態設定時選擇 Apply Immediately (立即套用),則所有待處理的修改都會立即套用,而不是在維護時段內套用。此動作可能會導致您的 Amazon RDS for MySQL 執行個體發生較長時間的中斷。如需詳細資訊,請參閱排程修改設定。
資料庫使用者設定錯誤
AWSAuthenticationPlugin 負責處理 Amazon RDS for MySQL 執行個體的 IAM 驗證。若要確認此外掛程式已連線到您的 IAM 角色,請執行以下命令:
select user,plugin,host from mysql.user where user like '%db-user-name%';
**注意:**將 db-user-name 替換為您的資料庫使用者名稱。
輸出範例:
+------+-------------------------+------+|
user | plugin | host |
+------+-------------------------+------+
| root | AWSAuthenticationPlugin | % |
+------+-------------------------+------+
1 row in set (0.00 sec)
如果 IAM 角色使用特定主機,那麼您必須使用該主機名稱。另外,請確認您有存取指定資料庫的權限。
若要查看授予使用者的權限,請使用下列命令:
show grants for user;
**注意:**將 user 替換為使用者名稱。
若要授予另一個使用者權限,請使用下列命令:
grant select on mydb.mytable to user;
**注意:**將 mydb 替換為您的資料庫執行個體名稱,將 mytable 替換為您的資料表名稱,並將 user 替換為您的使用者名稱。
如需詳細資訊,請參閱 MySQL 網站上的 GRANT 陳述式。
連線字串不正確
若要連線到 Amazon RDS for MySQL 資料庫,請在連線字串中使用 --enable-cleartext-plugin 選項。--enable-cleartext-plugin 語法會充當驗證權杖,您必須在資料庫連線和設定資料庫使用者時使用。
連線字串範例:
$ mysql -h <endpoint> -P 3306 --enable-cleartext-plugin --user=RDSConnect --password=$
相關資訊
如何允許使用者透過其 Amazon IAM 憑證對 Amazon RDS MySQL 資料庫執行個體進行驗證?
IAM 資料庫驗證