比较 Aurora MySQL 版本 3 和 MySQL 8.0 社群版
您可以使用以下信息了解从不同的 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 的数据库引擎更新。
MySQL 8.0 功能在 Aurora MySQL 版本 3 中不可用
社区 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 及更高版本中,支持自动撤消表空间截断
。 -
您无法修改任何 MySQL 插件的设置。
-
不支持 X 插件。
-
不支持多源复制。
基于角色的权限模型
使用 Aurora MySQL 版本 3,您无法直接修改 mysql
数据库中的表。特别是,您无法通过插入到 mysql.user
表来设置用户。相反,您可以使用 SQL 语句授予基于角色的权限。您也无法创建其他类型的对象,例如 mysql
数据库中的存储过程。您仍然可以查询 mysql
表。如果您使用二进制日志复制,则直接对源集群上的 mysql
表进行的更改不会复制到目标集群中。
在某些情况下,您的应用程序可能会使用快捷方式通过插入到 mysql
表来创建用户或其他对象。如果是这样,请更改应用程序代码以使用相应的语句,例如 CREATE
USER
。如果您的应用程序在 mysql
数据库中创建存储过程或其他对象,请改用其他数据库。
要在从外部 MySQL 数据库迁移期间导出数据库用户的元数据,您可以使用 MySQL Shell 命令而非 mysqldump
。有关更多信息,请参阅 Instance Dump Utility, Schema Dump Utility, and Table Dump Utility
为了简化对许多用户或应用程序的权限管理,您可以使用 CREATE ROLE
语句来创建具有一组权限的角色。然后,您可以使用 GRANT
和 SET ROLE
语句以及 current_role
函数将角色分配给用户或应用程序、切换当前角色以及检查哪些角色有效。有关 MySQL 8.0 中基于角色的权限系统的更多信息,请参阅 MySQL 参考手册中的使用角色
重要
我们强烈建议不要直接在应用程序中使用主用户。请遵守使用数据库用户的最佳实践,按照您的应用程序所需的最少权限创建用户。
rds_superuser_role
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
-
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
@'%';
二进制日志复制的权限检查用户
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
用户是保留用户。请勿修改此用户。
用于访问其它 Amazon 服务的角色
Aurora MySQL 版本 3 包括可用于访问其它 Amazon 服务的角色。可以将其中许多角色设置为授予权限的替代。例如,您可以指定 GRANT AWS_LAMBDA_ACCESS TO
而不是 user
GRANT
INVOKE LAMBDA ON *.* TO
。对于访问其他 Amazon 服务的程序,请参阅 将 Amazon Aurora MySQL 与其他Amazon服务集成。Aurora MySQL 版本 3 包括以下与访问其他 Amazon 服务相关的角色:user
-
AWS_LAMBDA_ACCESS
–INVOKE LAMBDA
权限的替代。有关使用信息,请参阅从 Amazon Aurora MySQL 数据库集群中调用 Lambda 函数。 -
AWS_LOAD_S3_ACCESS
–LOAD FROM S3
权限的替代。有关使用信息,请参阅将数据从 Amazon S3 存储桶中的文本文件加载到 Amazon Aurora MySQL 数据库集群。 -
AWS_SELECT_S3_ACCESS
–SELECT INTO S3
权限的替代。有关使用信息,请参阅将数据从 Amazon Aurora MySQL 数据库集群保存到 Amazon S3 存储桶中的文本文件。 -
AWS_COMPREHEND_ACCESS
–INVOKE COMPREHEND
权限的替代。有关使用信息,请参阅授予数据库用户访问 Aurora 机器学习的权限。 -
AWS_SAGEMAKER_ACCESS
–INVOKE SAGEMAKER
权限的替代。有关使用信息,请参阅授予数据库用户访问 Aurora 机器学习的权限。 -
AWS_BEDROCK_ACCESS
– Amazon Bedrock 没有类似的INVOKE
权限。有关使用信息,请参阅授予数据库用户访问 Aurora 机器学习的权限。
当您使用 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 activemysql>
SELECT CURRENT_ROLE();+-----------------------------------------------------+ | CURRENT_ROLE() | +-----------------------------------------------------+ | `AWS_SELECT_S3_ACCESS`@`%`,`rds_superuser_role`@`%` | +-----------------------------------------------------+
身份验证
在社区 MySQL 8.0 中,原定设置的身份验证插件是 caching_sha2_password
。Aurora MySQL 版本 3 仍然使用 mysql_native_password
插件。您将无法更改 default_authentication_plugin
设置。