

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

# 比較 Aurora MySQL 第 3 版與 MySQL 8.0 社群版
<a name="AuroraMySQL.Compare-80-v3"></a>

您可以使用下列資訊，來了解當您從不同的 MySQL 8.0 相容系統轉換為 Aurora MySQL 第 3 版時，應注意的變更。

 通常，Aurora MySQL 第 3 版支援社群 MySQL 8.0.23 的功能集。來自 MySQL 8.0 社群版的一些新功能不適用於 Aurora MySQL。其中有些功能與 Aurora 的某些方面不相容，例如 Aurora 儲存架構。不需要其他功能，因為 Amazon RDS 管理服務會提供同等功能。社群 MySQL 8.0 中的下列功能不受支援，或在 Aurora MySQL 第 3 版中以不同方式運作。

 如需所有 Aurora MySQL 第 3 版的版本備註，請參閱 *Aurora MySQL 版本備註*中的 [Amazon Aurora MySQL 第 3 版的資料庫引擎更新](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraMySQLReleaseNotes/AuroraMySQL.Updates.30Updates.html)。

**Topics**
+ [MySQL 8.0 功能不適用於 Aurora MySQL 第 3 版](#AuroraMySQL.Compare-80-v3-features)
+ [角色型權限模型](#AuroraMySQL.privilege-model)
+ [尋找資料庫伺服器 ID](#AuroraMySQL.server-id)
+ [身分驗證](#AuroraMySQL.mysql80-authentication)

## MySQL 8.0 功能不適用於 Aurora MySQL 第 3 版
<a name="AuroraMySQL.Compare-80-v3-features"></a>

來自社群 MySQL 8.0 中的下列功能無法使用，或在 Aurora MySQL 第 3 版中以不同方式運作。
+ Aurora MySQL 中不支援資源群組和相關聯的 SQL 陳述式。
+ Aurora MySQL 不支援使用者定義的復原資料表空間和相關聯的 SQL 陳述式，例如 `CREATE UNDO TABLESPACE`、`ALTER UNDO TABLESPACE ... SET INACTIVE` 和 `DROP UNDO TABLESPACE`。
+ 對於低於 3.06 的 Aurora MySQL 版本，Aurora MySQL 不支援復原資料表空間截斷。在 Aurora MySQL 3.06 版和更新版本中，支援[自動復原資料表空間截斷](https://dev.mysql.com/doc/refman/8.0/en/innodb-undo-tablespaces.html#truncate-undo-tablespace)。
+ 支援密碼驗證外掛程式。
+ 您無法修改任何 MySQL 外掛程式的設定，包括密碼驗證外掛程式。
+ 不支援 X 外掛程式。
+ 不支援多來源複寫。

## 角色型權限模型
<a name="AuroraMySQL.privilege-model"></a>

使用 Aurora MySQL 第 3 版，您無法直接修改 `mysql` 資料庫中的資料表。尤其，您無法藉由插入至 `mysql.user` 資料表來設定使用者。相反地，您可以使用 SQL 陳述式來授與角色型權限。您也無法建立其他類型的物件，例如 `mysql` 資料庫中已存放的程序。您仍然可以查詢 `mysql` 資料表。如果您使用二進位日誌複寫，則直接對來源叢集上 `mysql` 資料表所做的變更不會複寫至目標叢集。

 在某些情況下，您的應用程式可能會使用捷徑來建立使用者或其他物件，方法是插入至 `mysql` 資料表。若是這樣，請變更您應用程式的程式碼來使用對應的陳述式，例如 `CREATE USER`。如果您的應用程式在 `mysql` 資料庫中建立已存放的程序或其他物件，請改為使用不同的資料庫。

若要在遷移期間從外部 MySQL 資料庫匯出資料庫使用者的中繼資料，您可以使用 MySQL Shell 命令，而不是 `mysqldump`。如需詳細資訊，請參閱[執行個體傾印公用程式、結構描述傾印公用程式和資料表傾印公用程式](https://dev.mysql.com/doc/mysql-shell/8.0/en/mysql-shell-utilities-dump-instance-schema.html#mysql-shell-utilities-dump-about)。

若要簡化許多使用者或應用程式的權限管理，您可以使用 `CREATE ROLE` 陳述式來建立具有一組權限的角色。然後，您可以使用 `GRANT` 和 `SET ROLE` 陳述式，以及 `current_role` 函數，將角色指派給使用者或應用程式、切換目前角色，並檢查哪些角色有效。如需 MySQL 8.0 中角色型權限系統的詳細資訊，請參閱《MySQL 參考手冊》中的[使用角色](https://dev.mysql.com/doc/refman/8.0/en/roles.html)。

**重要**  
我們強烈建議您不要直接在您的應用程式中使用主要使用者。而是遵循最佳實務，使用以應用程式所需的最低權限建立的資料庫使用者。

**Topics**
+ [rds\_superuser\_role](#AuroraMySQL.privilege-model.rds_superuser_role)
+ [權限檢查使用者是否有二進位日誌複寫](#AuroraMySQL.privilege-model.binlog)
+ [存取其他 AWS 服務的角色](#AuroraMySQL.privilege-model.other)

### rds\_superuser\_role
<a name="AuroraMySQL.privilege-model.rds_superuser_role"></a>

Aurora MySQL 第 3 版包含具有下列所有權限的特殊角色。此角色已命名為 `rds_superuser_role`。每個叢集的主要管理使用者已授與此角色。`rds_superuser_role` 角色包含所有資料庫物件的下列權限：
+ `ALTER`
+ `APPLICATION_PASSWORD_ADMIN`
+ `ALTER ROUTINE`
+ `CONNECTION_ADMIN`
+ `CREATE`
+ `CREATE ROLE`
+ `CREATE ROUTINE`
+ `CREATE TEMPORARY TABLES`
+ `CREATE USER`
+ `CREATE VIEW`
+ `DELETE`
+ `DROP`
+ `DROP ROLE`
+ `EVENT`
+ `EXECUTE`
+ `FLUSH_OPTIMIZER_COSTS` (Aurora MySQL 3.09 版及更新版本)
+ `FLUSH_STATUS` (Aurora MySQL 3.09 版及更新版本)
+ `FLUSH_TABLES` (Aurora MySQL 3.09 版及更新版本)
+ `FLUSH_USER_RESOURCES` (Aurora MySQL 3.09 版及更新版本)
+ `INDEX`
+ `INSERT`
+ `LOCK TABLES`
+ `PROCESS`
+ `REFERENCES`
+ `RELOAD`
+ `REPLICATION CLIENT`
+ `REPLICATION SLAVE`
+ `ROLE_ADMIN`
+ `SET_USER_ID`
+ `SELECT`
+ `SHOW DATABASES`
+ `SHOW_ROUTINE` (Aurora MySQL 3.04 版及更新版本)
+ `SHOW VIEW`
+ `TRIGGER`
+ `UPDATE`
+ `XA_RECOVER_ADMIN`

角色定義還包括 `WITH GRANT OPTION`，以便管理使用者可以將該角色授與其他使用者。尤其，管理員必須授與執行二進位日誌複寫所需的任何權限，以 Aurora MySQL 叢集做為目標。

**提示**  
若要查看權限的完整詳細資訊，請輸入下列陳述式。  

```
SHOW GRANTS FOR rds_superuser_role@'%';
SHOW GRANTS FOR {{name_of_administrative_user_for_your_cluster}}@'%';
```

### 權限檢查使用者是否有二進位日誌複寫
<a name="AuroraMySQL.privilege-model.binlog"></a>

Aurora MySQL 第 3 版包含權限檢查使用者是否有二進位日誌 (binlog) 複寫，`rdsrepladmin_priv_checks_user`。除了 `rds_superuser_role` 的權限之外，此使用者還有 `replication_applier` 權限。

當您呼叫 `mysql.rds_start_replication` 預存程序來開啟 binlog 複寫時，`rdsrepladmin_priv_checks_user` 會建立。

`rdsrepladmin_priv_checks_user@localhost` 使用者是預留使用者。請勿修改它。

### 存取其他 AWS 服務的角色
<a name="AuroraMySQL.privilege-model.other"></a>

Aurora MySQL 第 3 版包含您可用來存取其他 AWS 服務的角色。您可以設定許多這些角色作為授予權限的替代方案。例如，您可以指定 `GRANT AWS_LAMBDA_ACCESS TO {{user}}`，而不是 `GRANT INVOKE LAMBDA ON *.* TO {{user}}`。如需存取其他 AWS 服務的程序，請參閱 [將 Amazon Aurora MySQL 與其他 AWS 服務整合](AuroraMySQL.Integrating.md)。Aurora MySQL 第 3 版包含與存取其他 AWS 服務相關的下列角色：
+ `AWS_LAMBDA_ACCESS` – 作為 `INVOKE LAMBDA` 權限的替代項目。如需使用方式的資訊，請參閱 [從 Amazon Aurora MySQL 資料庫叢集叫用 Lambda 函式](AuroraMySQL.Integrating.Lambda.md)。
+ `AWS_LOAD_S3_ACCESS` – 作為 `LOAD FROM S3` 權限的替代項目。如需使用方式的資訊，請參閱 [從 Amazon S3 儲存貯體中的文字檔案將資料載入 Amazon Aurora MySQL 資料庫叢集](AuroraMySQL.Integrating.LoadFromS3.md)。
+ `AWS_SELECT_S3_ACCESS` – 作為 `SELECT INTO S3` 權限的替代項目。如需使用方式的資訊，請參閱 [將來自 Amazon Aurora MySQL 資料庫叢集的資料儲存至 Amazon S3 儲存貯體中的文字檔案](AuroraMySQL.Integrating.SaveIntoS3.md)。
+ `AWS_COMPREHEND_ACCESS` – 作為 `INVOKE COMPREHEND` 權限的替代項目。如需使用方式的資訊，請參閱 [授與資料庫使用者存取 Aurora Machine Learning 的權限](mysql-ml.md#aurora-ml-sql-privileges)。
+ `AWS_SAGEMAKER_ACCESS` – 作為 `INVOKE SAGEMAKER` 權限的替代項目。如需使用方式的資訊，請參閱 [授與資料庫使用者存取 Aurora Machine Learning 的權限](mysql-ml.md#aurora-ml-sql-privileges)。
+ `AWS_BEDROCK_ACCESS` – Amazon Bedrock 沒有類似 `INVOKE` 權限。如需使用方式的資訊，請參閱 [授與資料庫使用者存取 Aurora Machine Learning 的權限](mysql-ml.md#aurora-ml-sql-privileges)。

當使用 Aurora MySQL 第 3 版中的角色授與存取權時，您也可以使用 `SET ROLE {{role_name}}` 或 `SET ROLE ALL` 陳述式啟用角色。下列範例會顯示作法。以適當的角色名稱替代 `AWS_SELECT_S3_ACCESS`。

```
# Grant role to user.

mysql> GRANT AWS_SELECT_S3_ACCESS TO '{{user}}'@'{{domain-or-ip-address}}'

# Check the current roles for your user. In this case, the AWS_SELECT_S3_ACCESS role has not been activated.
# Only the rds_superuser_role is currently in effect.
mysql> SELECT CURRENT_ROLE();
+--------------------------+
| CURRENT_ROLE()           |
+--------------------------+
| `rds_superuser_role`@`%` |
+--------------------------+
1 row in set (0.00 sec)

# Activate all roles associated with this user using SET ROLE.
# You can activate specific roles or all roles.
# In this case, the user only has 2 roles, so we specify ALL.
mysql> SET ROLE ALL;
Query OK, 0 rows affected (0.00 sec)

# Verify role is now active
mysql> SELECT CURRENT_ROLE();
+-----------------------------------------------------+
| CURRENT_ROLE()                                      |
+-----------------------------------------------------+
| `AWS_SELECT_S3_ACCESS`@`%`,`rds_superuser_role`@`%` |
+-----------------------------------------------------+
```

## 尋找資料庫伺服器 ID
<a name="AuroraMySQL.server-id"></a>

二進位記錄 (binlog) 複寫需要資料庫伺服器 ID (`server_id`)。在 Aurora MySQL 和 Community MySQL 中尋找伺服器 ID MySQL 的方式不同。

在 Community MySQL 中，伺服器 ID 是您在登入伺服器時使用下列語法取得的數字：

```
mysql> select @@server_id;

+-------------+
| @@server_id |
+-------------+
| 2           |
+-------------+
1 row in set (0.00 sec)
```

在 Aurora MySQL 中，伺服器 ID 是您在登入資料庫執行個體時使用下列語法取得的資料庫執行個體 ID：

```
mysql> select @@aurora_server_id;

+------------------------+
| @@aurora_server_id     |
+------------------------+
| mydbcluster-instance-2 |
+------------------------+
1 row in set (0.00 sec)
```

如需 binlog 複寫的詳細資訊，請參閱 [Aurora 與 MySQL 之間或 Aurora 與另一個 Aurora 資料庫叢集之間的複寫 (二進位複寫)](AuroraMySQL.Replication.MySQL.md)。

## 身分驗證
<a name="AuroraMySQL.mysql80-authentication"></a>

在社群 MySQL 8.0 中，預設身分驗證外掛程式為 `caching_sha2_password`。Aurora MySQL 第 3 版仍會使用 `mysql_native_password` 外掛程式。您無法變更 `default_authentication_plugin` 設定。不過，您可以建立新的使用者並變更目前的使用者，而且其個別密碼會使用新的身分驗證外掛程式。以下是範例。

```
mysql> CREATE USER 'testnewsha'@'%' IDENTIFIED WITH caching_sha2_password BY 'aNewShaPassword';
Query OK, 0 rows affected (0.74 sec)
```