

# 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 では利用できないか、異なる動作をします。
+ リソースグループと関連付けられた SQL ステートメントは、Aurora MySQL ではサポートされていません。
+ Aurora MySQL は、ユーザー定義の UNDO テーブルスペースおよび関連する SQL ステートメント (`CREATE UNDO TABLESPACE`、`ALTER UNDO TABLESPACE ... SET INACTIVE` および `DROP UNDO TABLESPACE` など) をサポートしていません。
+ Aurora MySQL は 3.06 より前のバージョンの Aurora MySQL の UNDO テーブルスペースの切り捨てをサポートしていません。Aurora MySQL バージョン 3.06 以降では、[UNDO テーブルスペースの自動切り捨て](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 データベースからの移行中にデータベースユーザーのメタデータをエクスポートするには、`mysqldump` の代わりに MySQL Shell コマンドを使用します。詳細については、「[インスタンスダンプユーティリティ、スキーマダンプユーティリティ、テーブルダンプユーティリティ](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\$1superuser\$1role](#AuroraMySQL.privilege-model.rds_superuser_role)
+ [バイナリログレプリケーションの権限チェックユーザー](#AuroraMySQL.privilege-model.binlog)
+ [他の AWS サービスにアクセスするためのロール](#AuroraMySQL.privilege-model.other)

### rds\$1superuser\$1role
<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` ストアドプロシージャを呼び出してバイナリログレプリケーションを有効にすると、`rdsrepladmin_priv_checks_user` が作成されます。

`rdsrepladmin_priv_checks_user@localhost` ユーザーは予約済みユーザーです。変更しないでください。

### 他の AWS サービスにアクセスするためのロール
<a name="AuroraMySQL.privilege-model.other"></a>

Aurora MySQL バージョン 3 には、他の AWS サービスにアクセスするために使用できるロールが含まれています。権限を付与する代わりに、これらのロールの多くを設定できます。例えば、`GRANT INVOKE LAMBDA ON *.* TO user` の代わりに `GRANT AWS_LAMBDA_ACCESS TO user` を指定します。他の AWS サービスにアクセスする手順については、[Amazon Aurora MySQL と他の AWS のサービスの統合](AuroraMySQL.Integrating.md) を参照してください。Aurora MySQLバージョン 3 には、他の AWS サービスへのアクセスに関連する次のロールが含まれています。
+ `AWS_LAMBDA_ACCESS` – `INVOKE LAMBDA` の権限の代替。使用に関する情報については、「[Amazon Aurora MySQL DB クラスターからの Lambda 関数の呼び出し](AuroraMySQL.Integrating.Lambda.md)」を参照してください。
+ `AWS_LOAD_S3_ACCESS` – `LOAD FROM S3` の権限の代替。使用に関する情報については、「[Amazon S3 バケットのテキストファイルから Amazon Aurora MySQL DB クラスターへのデータのロード](AuroraMySQL.Integrating.LoadFromS3.md)」を参照してください。
+ `AWS_SELECT_S3_ACCESS` – `SELECT INTO S3` の権限の代替。使用に関する情報については、「[Amazon Aurora MySQL DB クラスターから Amazon S3 バケット内のテキストファイルへのデータの保存](AuroraMySQL.Integrating.SaveIntoS3.md)」を参照してください。
+ `AWS_COMPREHEND_ACCESS` – `INVOKE COMPREHEND` の権限の代替。使用に関する情報については、「[データベースユーザーに Aurora 機械学習へのアクセスを許可する](mysql-ml.md#aurora-ml-sql-privileges)」を参照してください。
+ `AWS_SAGEMAKER_ACCESS` – `INVOKE SAGEMAKER` の権限の代替。使用に関する情報については、「[データベースユーザーに Aurora 機械学習へのアクセスを許可する](mysql-ml.md#aurora-ml-sql-privileges)」を参照してください。
+ `AWS_BEDROCK_ACCESS` – Amazon Bedrock には類似した `INVOKE` の権限はありません。使用に関する情報については、「[データベースユーザーに Aurora 機械学習へのアクセスを許可する](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`) が必要です。サーバー ID を確認する方法は、Aurora MySQL とコミュニティ MySQL では異なります。

コミュニティ MySQL では、サーバー ID は数字であり、サーバーにログインしている間に次の構文を使用して取得します。

```
mysql> select @@server_id;

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

Aurora MySQL では、サーバー ID は DB インスタンス ID であり、DB インスタンスにログインしている間に次の構文を使用して取得します。

```
mysql> select @@aurora_server_id;

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

バイナリログレプリケーションの詳細については、「[Aurora と MySQL との間、または Aurora と別の Aurora DB クラスターとの間のレプリケーション (バイナリログレプリケーション)](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)
```