

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 保護 MySQL 資料庫執行個體連線的安全
<a name="securing-mysql-connections"></a>

您可以實作健全的安全措施，保護 MySQL 資料庫執行個體不受未經授權的存取和潛在威脅影響。在安全群組、SSL/TLS 加密和 IAM 資料庫身分驗證的搭配運作下，可為 MySQL 資料庫執行個體建立多層連線安全機制。這些安全控制可協助您達到合規需求、防止資料外洩，以及維護應用程式和資料庫之間的安全通訊管道。您可以藉由加密傳輸中的資料、限制對特定 IP 範圍的存取，以及透過 IAM 角色 (而非資料庫密碼) 管理使用者身分驗證，來保護 MySQL 資料庫執行個體。

MySQL 資料庫執行個體的安全性有三個受管層級：
+ AWS Identity and Access Management 控制誰可以在資料庫執行個體上執行 Amazon RDS 管理動作。當您 AWS 使用 IAM 登入資料連線至 時，您的 IAM 帳戶必須具有 IAM 政策，授予執行 Amazon RDS 管理操作所需的許可。如需詳細資訊，請參閱[Amazon RDS 的 Identity and access management](UsingWithRDS.IAM.md)。
+ 建立資料庫執行個體時，您可使用 VPC 安全群組控管哪些裝置和 Amazon EC2 執行個體可以開啟與端點和資料庫執行個體連接埠的連線。您可以使用 Secure Sockets Layer (SSL) 和 Transport Layer Security (TLS) 建立這些連線。此外，貴公司的防火牆規則可控管在公司內執行的裝置是否可開啟與資料庫執行個體的連線。
+ 若要驗證 MySQL 資料庫執行個體的登入資訊與權限，您可採取下列任一方式，或搭配使用多種方法：
  + 您可採用與 MySQL 獨立執行個體相同的驗證方式。`CREATE USER`、`RENAME USER`、`GRANT`、`REVOKE` 及 `SET PASSWORD` 等命令的運作方式與現場部署資料庫所使用的命令相同，會直接修改資料庫結構描述資料表。不過，直接修改資料庫結構描述資料表並非最佳實務，此外不支援從 RDS for MySQL 8.0.36 版開始。如需詳細資訊，請參閱 MySQL 文件中的[存取控制和帳戶管理](https://dev.mysql.com/doc/refman/8.0/en/access-control.html)。
  + 您也可以使用 IAM 資料庫身分驗證。透過 IAM 資料庫身分驗證，您可以使用 IAM 使用者或 IAM 角色以及身分驗證字符，驗證您的資料庫執行個體。*身分驗證字符*是不重複的值，由 Signature 第 4 版簽署程序所產生。使用 IAM 資料庫身分驗證，便可利用相同的登入資料控管您 AWS 資源與資料庫的存取情形。如需詳細資訊，請參閱[適用於 MariaDB、MySQL 和 PostgreSQL 的 IAM 資料庫身分驗證](UsingWithRDS.IAMDBAuth.md)。
  + 另一種選擇是 RDS for MySQL 適用的 Kerberos 身分驗證。資料庫執行個體使用 AWS Directory Service for Microsoft Active Directory (AWS Managed Microsoft AD) 來啟用 Kerberos 身分驗證。使用者向加入信任網域的 MySQL 資料庫執行個體進行身分驗證時，會轉送身分驗證請求。轉送的請求會移至您用來建立的網域目錄 Directory Service。如需詳細資訊，請參閱[對 Amazon RDS for MySQL 使用 Kerberos 身分驗證](mysql-kerberos.md)。

 在您建立 Amazon RDS 資料庫執行個體後，主要使用者具有下列預設權限：


| 引擎版本 | 系統權限 | 資料庫角色 | 
| --- | --- | --- | 
| RDS for MySQL 8.4.3 版和更高版本 | `GRANT SELECT`, `INSERT`, `UPDATE`, `DELETE`, `CREATE`, `DROP`, `RELOAD`, `PROCESS`, `REFERENCES`,`INDEX`, `ALTER`, `SHOW DATABASES`, `CREATE TEMPORARY TABLES`, `LOCK TABLES`, `EXECUTE`, `REPLICATION SLAVE`, `REPLICATION CLIENT`, `CREATE VIEW`, `SHOW VIEW`, `CREATE ROUTINE`, `ALTER ROUTINE`, `CREATE USER`, `EVENT`, `TRIGGER`, `CREATE ROLE`, `DROP ROLE`, `APPLICATION_PASSWORD_ADMIN`, `FLUSH_OPTIMIZER_COSTS`, `FLUSH_PRIVILEGES`, `FLUSH_STATUS`, `FLUSH_TABLES`, `FLUSH_USER_RESOURCES`, `ROLE_ADMIN`, `SENSITIVE_VARIABLES_OBSERVER`, `SESSION_VARIABLES_ADMIN`, `SET_ANY_DEFINER`, `SHOW_ROUTINE`, `XA_RECOVER_ADMIN` | `rds_superuser_role`<br />如需 `rds_superuser_role` 的相關資訊，請參閱 [RDS for MySQL 的角色型權限模型](Appendix.MySQL.CommonDBATasks.privilege-model.md)。 | 
| RDS for MySQL 8.0.36 版和更高版本 | `SELECT`, `INSERT`, `UPDATE`, `DELETE`, `CREATE`, `DROP`, `RELOAD`, `PROCESS`, `REFERENCES`, `INDEX`, `ALTER`, `SHOW DATABASES`, `CREATE TEMPORARY TABLES`, `LOCK TABLES`, `EXECUTE`, `REPLICATION SLAVE`, `REPLICATION CLIENT`, `CREATE VIEW`, `SHOW VIEW`, `CREATE ROUTINE`, `ALTER ROUTINE`, `CREATE USER`, `EVENT`, `TRIGGER`, `CREATE ROLE`, `DROP ROLE`, `APPLICATION_PASSWORD_ADMIN`, `ROLE_ADMIN`, `SET_USER_ID`, `XA_RECOVER_ADMIN` | `rds_superuser_role`<br />如需 `rds_superuser_role` 的相關資訊，請參閱 [RDS for MySQL 的角色型權限模型](Appendix.MySQL.CommonDBATasks.privilege-model.md)。 | 
| 低於 8.0.36 的 RDS for MySQL 版本 | `SELECT`, `INSERT`, `UPDATE`, `DELETE`, `CREATE`, `DROP`, `RELOAD`, `PROCESS`, `REFERENCES`, `INDEX`, `ALTER`, `SHOW DATABASES`, `CREATE TEMPORARY TABLES`, `LOCK TABLES`, `EXECUTE`, `REPLICATION CLIENT`, `CREATE VIEW`, `SHOW VIEW`, `CREATE ROUTINE`, `ALTER ROUTINE`, `CREATE USER`, `EVENT`, `TRIGGER`, `REPLICATION SLAVE` | 無 | 

**注意**  
雖然您可刪除資料庫執行個體上的主要使用者，但不建議這麼做。若要重新建立主要使用者，請使用 [ModifyDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html) RDS API 操作或執行 [modify-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) AWS CLI 命令，並使用適當的參數指定新的主要使用者密碼。若執行個體中不存在此主要使用者，系統會以指定的密碼建立主要使用者。

為了提供各資料庫執行個體管理服務，建立資料庫執行個體時，系統會一併建立 `rdsadmin` 使用者。若企圖移除、重新命名 `rdsadmin` 帳戶或變更其密碼或權限，皆會導致系統發生錯誤。

請限制使用標準 `kill` 和 `kill_query` 命令，藉此允許資料庫執行個體的管理操作。此外，本服務還提供 Amazon RDS 命令 `rds_kill` 與 `rds_kill_query`，讓您能結束資料庫執行個體上的使用者工作階段或查詢。