原文:docs.oracle.com/javase/tutorial/reallybigindex.html
原文:dev.mysql.com/doc/refman/8.0/en/validate-password-transitioning.html
8.4.3.3 过渡到密码验证组件
消息
在MySQL 8.0 中,validate_password 插件已被重新实现为validate_password 组件。 validate_password 插件已被弃用,并将在MySQL 的未来版本中删除。
当前使用validate_password 插件的MySQL 安装应迁移到使用validate_password 组件。为此,请按照下列步骤操作:此过程会在卸载插件之前安装组件,并避免出现不进行密码验证的窗口。 (组件和插件可以同时安装,在这种情况下,服务器将尝试使用该组件,如果插件不可用,则回退到插件。)
安装validate_password 组件。
安装组件\’file://component_validate_password\’;
测试validate_password 组件以确保其按预期工作。如果您需要设置validate_password.*xxx* 系统变量,您可以在运行时使用SET GLOBAL 执行此操作。 (所需的选项文件更改将在下一步中执行。)
调整对插件系统和状态变量的引用以引用相应的组件系统和状态变量。假设您之前使用类似于以下内容的选项文件在启动时配置了插件:
[mysqld]
验证密码=FORCE_PLUS_PERMANENT
validate_password_dictionary_file=/usr/share/dict/words
验证密码长度=10
validate_password_number_count=2
这些设置适用于插件,但必须更改为适用于组件。要调整选项文件,请省略–validate-password 选项(仅适用于插件,不适用于组件)并将系统变量引用从插件的点名称更改为组件的点名称。
[mysqld]
validate_password.dictionary_file=/usr/share/dict/words
validate_password.length=10
validate_password.number_count=2
对于在运行时引用validate_password 插件系统和状态变量的应用程序,也需要进行类似的调整。将不带点的插件变量名称更改为相应的带点组件变量名称。
卸载validate_password 插件。
卸载插件validate_password;
如果使用–plugin-load 或–plugin-load-add 选项在服务器启动时加载validate_password 插件,请从服务器启动过程中忽略此选项。例如,如果服务器选项文件中列出了此选项,请将其从文件中删除。
重新启动服务器。
8.4.4 MySQL 密钥环
原文:dev.mysql.com/doc/refman/8.0/en/keyring.html
8.4.4.1 密钥环组件和密钥环插件的比较
8.4.4.2 安装密钥环组件
8.4.4.3 安装密钥环插件
8.4.4.4 使用component_keyring_file 的基于文件的密钥环组件
8.4.4.5 要加密文件密钥环组件,请使用component_keyring_encrypted_file。
8.4.4.6 keyring_file 使用基于文件的密钥环插件
8.4.4.7 keyring_encrypted_file 使用加密文件密钥环插件
8.4.4.8 使用keyring_okv KMIP 插件
8.4.4.9 keyring_aws 使用Amazon Web Services 密钥环插件
8.4.4.10 使用HashiCorp Vault 密钥环插件
8.4.4.11 使用Oracle Cloud Infrastructure Vault 密钥环组件
8.4.4.12 使用Oracle Cloud Infrastructure Vault 密钥环插件
8.4.4.13 支持的密钥环密钥类型和长度
8.4.4.14 按键迁移
8.4.4.15 通用密钥环密钥管理功能
8.4.4.16 插件特定的密钥环密钥管理功能
8.4.4.17 密钥环元数据
8.4.4.18 密钥环命令选项
8.4.4.19 密钥环系统变量
MySQL 服务器支持密钥环,允许内部服务器组件和插件安全地存储敏感信息以供以后检索。该实施包括以下要素:
管理支持存储或与存储后端通信的密钥环组件和插件。要使用密钥环,您必须从可用的组件和插件中安装它。密钥环组件和插件都管理密钥环数据,但它们的配置不同,并且可能存在操作差异(请参阅第8.4.4.1 节“密钥环组件和密钥环插件”)。
可以使用以下密钥环组件:
Component_keyring_file: 将密钥环数据保存到服务器主机上的本地文件。从MySQL 版本8.0.24 开始,它在MySQL Community Edition 和MySQL Enterprise Edition 发行版中提供。请参阅使用component_keyring_file 的基于文件的密钥环组件。
Component_keyring_encrypted_file: 将密钥环数据存储在服务器主机本地的受密码保护的加密文件中。从MySQL 8.0.24 开始,可在MySQL 企业版版本中使用。请参阅使用component_keyring_encrypted_file 加密基于文件的密钥环组件。
Component_keyring_oci:将密钥环数据存储在Oracle Cloud Infrastructure Vault 中。从MySQL 8.0.31 开始,可在MySQL 企业版版本中使用。请参阅使用Oracle Cloud Infrastructure Vault 密钥环组件。
可用的密钥环插件包括:
keyring_file(自MySQL 8.0.34 起已弃用):将密钥环数据存储在服务器主机本地的文件中。在MySQL 社区版和MySQL 企业版发行版中可用。请参阅使用keyring_file 基于文件的密钥环插件。
keyring_encrypted_file(自MySQL 8.0.34 起已弃用):将密钥环数据存储在服务器主机本地的受密码保护的加密文件中。在MySQL 企业版发行版中可用。请参阅使用keyring_encrypted_file 加密文件密钥环插件。
keyring_okv:KMIP 1.1 插件,用于支持KMIP 的后端密钥环存储产品,例如Oracle Key Vault 和Gemalto SafeNet KeySecure Appliance。在MySQL 企业版发行版中可用。请参阅使用keyring_okv KMIP 插件。
keyring_aws:与Amazon Web Services 密钥管理服务通信以生成密钥并使用本地文件进行密钥存储。在MySQL 企业版发行版中可用。请参阅使用keyring_aws Amazon Web Services 密钥环插件。
keyring_bashicorp:与HashiCorp Vault 通信以进行后端存储。从MySQL 8.0.18 开始,可在MySQL 企业版版本中使用。请参阅使用HashiCorp Vault 密钥环插件。
keyring_oci(自MySQL 8.0.31 起已弃用):与Oracle Cloud Infrastructure Vault 通信以进行后端存储。从MySQL 8.0.22 开始,可在MySQL 企业版版本中使用。请参阅使用Oracle Cloud Infrastructure Vault 密钥环插件。
用于密钥环密钥管理的密钥环服务接口。可以通过两个级别访问此服务:
SQL 接口:SQL 语句调用通用密钥环密钥管理函数中描述的函数。
C 接口:在C 语言代码中,调用Keyring Service 中描述的Keyring 服务函数。
访问关键元数据:
性能架构中的keyring_keys 表公开密钥环中密钥的元数据。密钥元数据包括密钥ID、密钥所有者和后端密钥ID。 keyring_keys 表不会公开敏感的密钥环数据,例如密钥内容。在MySQL 版本8.0.16 及更高版本中可用。请参阅keyring_keys 表。
性能架构中的keyring_component_status 表显示有关正在使用的密钥环组件(如果已安装)的状态信息。在MySQL 版本8.0.24 及更高版本中可用。请参阅keyring_component_status 表。
按键迁移功能。 MySQL 支持密钥库之间的密钥迁移,允许DBA 将其MySQL 安装从一个密钥库切换到另一个密钥库。请参阅在密钥环密钥库之间迁移密钥。
从MySQL 版本8.0.24 开始,密钥环插件实现已修改为使用组件基础结构。这是通过使用名为daemon_keyring_proxy_plugin 的内置插件来完成的,该插件充当插件和组件服务API 之间的桥梁。请参阅密钥环代理桥插件。
警告
对于加密密钥管理,component_keyring_file 和component_keyring_encrypted_file 组件以及keyring_file 和keyring_encrypted_file 插件不打算作为合规性解决方案。 PCI 和FIPS 等安全标准要求使用密钥管理系统来保护、管理和保护密钥库或硬件安全模块(HSM) 中的加密密钥。
在MySQL 中,密钥环服务的使用者包括:
InnoDB 存储引擎使用密钥环来存储表空间加密的密钥。请参阅在InnoDB 中加密静态数据。
MySQL Enterprise Audit 使用密钥环来存储审核日志文件的加密密码。请参阅加密审核日志文件。
二进制日志和中继日志管理支持基于密钥环的日志文件加密。启用日志文件加密后,密钥环存储用于加密二进制日志文件和中继日志文件密码的密钥。请参阅加密二进制日志文件和中继日志文件。
用于解密保存敏感系统变量的文件密钥的主密钥存储在您的密钥环上。 MySQL 服务器实例必须启用密钥环组件以支持持久系统变量值的安全存储,而不是使用不支持此功能的密钥环插件。请参阅保留敏感系统变量。
有关一般密钥环安装说明,请参阅安装密钥环组件和安装密钥环插件。有关特定密钥环组件或插件的安装和配置信息,请参阅描述该组件的部分。
有关使用密钥环功能的更多信息,请参阅通用密钥环密钥管理功能。
密钥环组件、插件和功能访问提供与密钥环交互的密钥环服务。有关访问此服务和创建密钥环插件的信息,请参阅密钥环服务和创建密钥环插件。
原文:dev.mysql.com/doc/refman/8.0/en/keyring-component-plugin-comparison.html
8.4.4.1 密钥环组件与密钥环插件
MySQL Keyring 最初使用服务器插件来实现密钥库功能,但从MySQL 8.0.24 开始,它开始转向使用组件基础架构。本节简要比较密钥环组件和插件并概述它们的差异。如果您要从插件过渡到组件,或者您不熟悉密钥环,这可以帮助您在组件和插件之间进行选择。
密钥环插件使用–early-plugin-load 选项加载。加载密钥环组件的使用清单。
获得清单后,继续配置密钥环组件。为此,请参阅您选择的密钥环组件的说明,了解特定于该组件的配置步骤。
“component_keyring_file:”第8.4.4.4 节“使用基于文件的component_keyring_file 密钥环组件”。
component_keyring_encrypted_file: 第8.4.4.5 节“使用基于文件的component_keyring_encrypted_file 加密密钥环组件”。
component_keyring_oci: 第8.4.4.11 节“使用Oracle Cloud Infrastructure Vault 密钥环组件”。
执行特定于组件的配置后,启动服务器。通过在性能模式下检查keyring_component_status 表来验证组件安装。
mysql SELECT * FROM Performance_schema.keyring_component_status;
+————————+———— ———– — ———————————-+
| 状态键|
+————————+———————— ———– —- ———————–+
| 组件名称| 组件密钥环文件
| 作者| 甲骨文公司|
| 许可证|
| 实施_密钥环_文件|
| 1.0 版|
| 组件状态为活动|
| 数据文件| /usr/local/mysql/keyring/component 密钥环文件|
| 只读|
+————————+———————— ———– —- ———————–+
Component_status 的值为Active 表示组件已成功初始化。
如果组件加载失败,服务器启动失败
。检查服务器错误日志以获取诊断信息。如果组件加载但由于配置问题而无法初始化,服务器将启动,但Component_status值为Disabled。检查服务器错误日志,纠正配置问题,并使用ALTER INSTANCE RELOAD KEYRING语句重新加载配置。
密钥环组件应该只能通过使用清单文件加载,而不是使用INSTALL COMPONENT语句加载。使用该语句加载的密钥环组件可能在服务器启动序列中的某些组件需要使用密钥环时太晚可用,比如InnoDB,因为它们在mysql.component系统表中注册并在后续服务器重启时自动加载。但mysql.component是一个InnoDB表,因此在InnoDB初始化后才能在启动时加载任何在其中命名的组件。
如果组件尝试访问密钥环服务时没有可用的密钥环组件或插件,该服务将无法被该组件使用。因此,该组件可能无法初始化或以有限功能初始化。例如,如果InnoDB在初始化时发现有加密表空间,它会尝试访问密钥环。如果密钥环不可用,InnoDB只能访问未加密的表空间。
原文:dev.mysql.com/doc/refman/8.0/en/keyring-plugin-installation.html
8.4.4.3 Keyring Plugin Installation
Keyring 服务的使用者要求安装一个 keyring 组件或插件:
若要使用 keyring 插件,请从这里的说明开始。(此外,有关安装插件的一般信��,请参见 Section 7.6.1, “Installing and Uninstalling Plugins”。)
若要使用 keyring 组件,请从 Section 8.4.4.2, “Keyring Component Installation”开始。
如果您打算与所选的 keyring 组件或插件一起使用 keyring 函数,请在安装该组件或插件后安装函数,使用 Section 8.4.4.15, “General-Purpose Keyring Key-Management Functions”中的说明。
注意
一次只能启用一个 keyring 组件或插件。不支持启用多个 keyring 组件或插件,结果可能不如预期。
如果您需要支持持久化系统变量值的安全存储,而不是支持该功能的 keyring 插件,则必须在 MySQL Server 实例上启用 keyring 组件。请参阅 Persisting Sensitive System Variables。
MySQL 提供以下 keyring 插件选择:
keyring_file(自 MySQL 8.0.34 起已弃用):将 keyring 数据存储在服务器主机本地的文件中。在 MySQL Community Edition 和 MySQL Enterprise Edition 发行版中可用。有关安装替代此插件的组件的说明,请参见 Section 8.4.4.2, “Keyring Component Installation”。
keyring_encrypted_file(自 MySQL 8.0.34 起已弃用):将 keyring 数据存储在服务器主机本地的加密、受密码保护的文件中。仅在 MySQL Enterprise Edition 发行版中可用。有关安装替代此插件的组件的说明,请参见 Section 8.4.4.2, “Keyring Component Installation”。
keyring_okv:用于与 KMIP 兼容的后端 keyring 存储产品(如 Oracle Key Vault 和 Gemalto SafeNet KeySecure Appliance)一起使用的 KMIP 1.1 插件。仅在 MySQL Enterprise Edition 发行版中可用。
keyring_aws:与亚马逊 Web 服务密钥管理服务通信,用于密钥生成的后端,并使用本地文件进行密钥存储。仅在 MySQL Enterprise Edition 发行版中可用。
keyring_hashicorp:与 HashiCorp Vault 通信,用于后端存储。仅在 MySQL Enterprise Edition 发行版中可用。
keyring_oci(自 MySQL 8.0.31 起已弃用):与 Oracle Cloud 基础设施 Vault 进行后端存储通信。请参阅第 8.4.4.12 节,“使用 Oracle Cloud 基础设施 Vault 密钥环插件”。
要让服务器能够使用插件库文件,插件库文件必须位于 MySQL 插件目录中(由plugin_dir系统变量命名的目录)。如果需要,通过在服务器启动时设置plugin_dir的值来配置插件目录位置。
密钥环组件或插件必须在服务器启动序列的早期加载,以便其他组件在其自身初始化期间根据需要访问它。例如,InnoDB 存储引擎使用密钥环进行表空间加密,因此必须在 InnoDB 初始化之前加载并可用密钥环组件或插件。
每个密钥环插件的安装方式类似。以下说明描述了如何安装keyring_file。要使用不同的密钥环插件,请将其名称替换为keyring_file。
keyring_file插件库文件基本名称为keyring_file。文件名后缀因平台而异(例如,Unix 和类 Unix 系统为.so,Windows 为.dll)。
要加载插件,请使用–early-plugin-load选项来命名包含插件库文件的插件。例如,在插件库文件后缀为.so的平台上,请在服务器my.cnf文件中使用以下行,根据需要调整.so后缀以适应您的平台:
[mysqld]
early-plugin-load=keyring_file.so
在启动服务器之前,请查看您选择的密钥环插件的注意事项,以获取特定于该插件的配置说明:
keyring_file: 第 8.4.4.6 节,“使用基于文件的 keyring_file 插件”。
keyring_encrypted_file: 第 8.4.4.7 节,“使用加密文件的 keyring_encrypted_file 插件”。
keyring_okv: 第 8.4.4.8 节,“使用 keyring_okv KMIP 插件”。
keyring_aws: 第 8.4.4.9 节,“使用 keyring_aws 亚马逊网络服务密钥环插件”
keyring_hashicorp: 第 8.4.4.10 节,“使用 HashiCorp Vault 密钥环插件”
keyring_oci: 第 8.4.4.12 节,“使用 Oracle Cloud 基础设施 Vault 密钥环插件”
在执行任何特定于插件的配置后,启动服务器。通过检查信息模式PLUGINS表或使用SHOW PLUGINS语句(参见 Section 7.6.2, “Obtaining Server Plugin Information”)来验证插件安装。例如:
mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS
FROM INFORMATION_SCHEMA.PLUGINS
WHERE PLUGIN_NAME LIKE \’keyring%\’;
+————–+—————+
| PLUGIN_NAME | PLUGIN_STATUS |
+————–+—————+
| keyring_file | ACTIVE |
+————–+—————+
如果插件初始化失败,请检查服务器错误日志以获取诊断消息。
插件可以通过–early-plugin-load之外的方法加载,例如–plugin-load或–plugin-load-add选项或INSTALL PLUGIN语句。然而,使用这些方法加载的密钥环插件可能在服务器启动序列中对于某些使用密钥环的组件来说太晚了,比如InnoDB:
使用–plugin-load或–plugin-load-add进行插件加载发生在InnoDB初始化之后。
使用INSTALL PLUGIN安装的插件会在mysql.plugin系统表中注册,并在后续服务器重新启动时自动加载。然而,由于mysql.plugin是一个InnoDB表,其中列出的任何插件只能在InnoDB初始化后的启动期间加载。
如果在组件尝试访问密钥环服务时没有可用的密钥环组件或插件,则该服务无法被该组件使用。因此,该组件可能无法初始化或以有限功能初始化。例如,如果InnoDB在初始化时发现存在加密表空间,它会尝试访问密钥环。如果密钥环不可用,InnoDB只能访问未加密的表空间。为确保InnoDB也可以访问加密表空间,请使用–early-plugin-load加载密钥环插件。
原文:dev.mysql.com/doc/refman/8.0/en/keyring-file-component.html
8.4.4.4 使用基于文件的密钥环组件
component_keyring_file密钥环组件将密钥环数据存储在服务器主机本地的文件中。
警告
对于加密密钥管理,component_keyring_file和component_keyring_encrypted_file组件,以及keyring_file和keyring_encrypted_file插件并不是用作符合法规的解决方案。PCI、FIPS 等安全标准要求使用密钥管理系统来保护、管理和保护密钥库或硬件安全模块(HSM)中的加密密钥。
要使用component_keyring_file进行密钥库管理,您必须:
按照 8.4.4.2 节“密钥环组件安装”中描述的方式编写一个清单,告诉服务器加载component_keyring_file。
按照这里的描述为component_keyring_file编写一个配置文件。
当初始化时,component_keyring_file会读取全局配置文件,或者全局配置文件与本地配置文件配对:
该组件尝试从组件库文件安装的目录(即服务器插件目录)中读取其全局配置文件。
如果全局配置文件指示使用本地配置文件,组件将尝试从数据目录中读取其本地配置文件。
尽管全局和本地配置文件位于不同的目录中,但文件名在两个位置都是component_keyring_file.cnf。
如果不存在配置文件,则无法初始化component_keyring_file。没有有效配置是一个错误。
本地配置文件允许设置多个服务器实例使用component_keyring_file,以便每个服务器实例的组件配置特定于给定的数据目录实例。这使得相同的密钥环组件可以与每个实例的不同数据文件一起使用。
component_keyring_file配置文件具有以下属性:
配置文件必须是有效的 JSON 格式。
配置文件允许设置这些配置项:
\”read_local_config\”:此项仅允许在全局配置文件中。如果该项不存在,则组件仅使用全局配置文件。如果该项存在,则其值为true或false,指示组件是否应从本地配置文件中读取配置信息。
如果全局配置文件中存在\”read_local_config\”项以及其他项,则组件首先检查\”read_local_config\”项的值:
如果值为false,组件将处理全局配置文件中的其他项并忽略本地配置文件。
如果数值为true,组件将忽略全局配置文件中的其他项,并尝试读取本地配置文件。
\”path\”:项目值是一个字符串,用于命名用于存储密钥环数据的文件。文件应使用绝对路径而不是相对路径命名。此项目在配置中是强制性的。如果未指定,则component_keyring_file初始化失败。
\”read_only\”:项目值指示密钥环数据文件是否为只读。项目值为true(只读)或false(读/写)。此项目在配置中是强制性的。如果未指定,则component_keyring_file初始化失败。
数据库管理员有责任创建要使用的任何配置文件,并确保其内容正确。如果发生错误,服务器启动将失败,并且管理员必须根据服务器错误日志中的诊断信息纠正任何问题。
鉴于前述配置文件属性,要配置component_keyring_file,请在安装了component_keyring_file库文件的目录中创建一个名为component_keyring_file.cnf的全局配置文件,并在数据目录中创建一个名为component_keyring_file.cnf的本地配置文件(可选)。以下说明假定要以读/写方式使用名为/usr/local/mysql/keyring/component_keyring_file的密钥环数据文件。
要仅使用全局配置文件,文件内容如下所示:
{
\”path\”: \”/usr/local/mysql/keyring/component_keyring_file\”,
\”read_only\”: false
}
在安装了component_keyring_file库文件的目录中创建此文件。
或者,要使用全局和本地配置文件对,全局文件如下所示:
{
\”read_local_config\”: true
}
在安装了component_keyring_file库文件的目录中创建此文件。
本地文件如下所示:
{
\”path\”: \”/usr/local/mysql/keyring/component_keyring_file\”,
\”read_only\”: false
}
在数据目录中创建此文件。
密钥环操作是事务性的:component_keyring_file在写操作期间使用备份文件,以确保如果操作失败,可以回滚到原始文件。备份文件与数据文件具有相同的名称,后缀为.backup。
component_keyring_file支持组成标准 MySQL 密钥环服务接口的函数。这些函数执行的密钥环操作可在两个级别访问:
SQL 接口:在 SQL 语句中,调用第 8.4.4.15 节,“通用密钥环密钥管理函数”中描述的函数。
C 接口:在 C 语言代码中,调用第 7.6.9.2 节,“密钥环服务”中描述的密钥环服务函数。
示例(使用 SQL 接口):
SELECT keyring_key_generate(\’MyKey\’, \’AES\’, 32);
SELECT keyring_key_remove(\’MyKey\’);
有关component_keyring_file允许的关键值特征的信息,请参阅第 8.4.4.13 节,“支持的钥匙环键类型和长度”。
原文:dev.mysql.com/doc/refman/8.0/en/keyring-encrypted-file-component.html
8.4.4.5 使用 component_keyring_encrypted_file 加密文件型密钥环组件
注意
component_keyring_encrypted_file 是包含在 MySQL 企业版中的扩展,这是一个商业产品。要了解更多关于商业产品的信息,请参阅 www.mysql.com/products/。
component_keyring_encrypted_file 密钥环组件将密钥环数据存储在一个加密的、受密码保护的文件中,该文件位于服务器主机本地。
警告
对于加密密钥管理,component_keyring_file 和 component_keyring_encrypted_file 组件,以及 keyring_file 和 keyring_encrypted_file 插件并非旨在作为符合监管合规性的解决方案。诸如 PCI、FIPS 等安全标准要求使用密钥管理系统来保护、管理和保护密钥在密钥库或硬件安全模块(HSMs)中。
要使用 component_keyring_encrypted_file 进行密钥库管理,您必须:
编写一个清单,告诉服务器加载 component_keyring_encrypted_file,如 8.4.4.2 节“密钥环组件安装” 中所述。
编写一个 component_keyring_encrypted_file 的配置文件,如此处所述。
当初始化时,component_keyring_encrypted_file 会读取全局配置文件或与本地配置文件配对的全局配置文件:
该组件尝试从组件库文件安装的目录(即服务器插件目录)中读取其全局配置文件。
如果全局配置文件指示使用本地配置文件,则组件会尝试从数据目录中读取其本地配置文件。
尽管全局和本地配置文件位于不同的目录中,但文件名在两个位置都是 component_keyring_encrypted_file.cnf。
如果不存在预配置文件,则会出错。component_keyring_encrypted_file 在没有有效配置的情况下无法初始化。
本地配置文件允许设置多个服务器实例使用 component_keyring_encrypted_file,因此每个服务器实例的组件配置特定于给定的数据目录实例。这使得相同的密钥环组件可以与每个实例的不同数据文件一起使用。
component_keyring_encrypted_file 配置文件具有以下属性:
配置文件必须是有效的 JSON 格式。
配置文件允许这些配置项:
\”read_local_config\”:此项仅允许在全局配置文件中出现。如果该项不存在,则组件仅使用全局配置文件。如果该项存在,则其值为true或false,表示组件是否应从本地配置文件中读取配置信息。
如果全局配置文件中存在\”read_local_config\”项以及其他项,则组件首先检查\”read_local_config\”项的值:
如果值为false,组件将处理全局配置文件中的其他项,并忽略本地配置文件。
如果值为true,组件将忽略全局配置文件中的其他项,并尝试读取本地配置文件。
\”path\”:该项值是一个指定用于存储密钥环数据的文件的字符串。文件应使用绝对路径而不是相对路径命名。此项在配置中是强制性的。如果未指定,component_keyring_encrypted_file初始化将失败。
\”password\”:该项值是一个指定访问数据文件密码的字符串。此项在配置中是强制性的。如果未指定,component_keyring_encrypted_file初始化将失败。
\”read_only\”:该项值指示密钥环数据文件是否为只读。该项值为true(只读)或false(读/写)。此项在配置中是强制性的。如果未指定,component_keyring_encrypted_file初始化将失败。
数据库管理员有责任创建要使用的任何配置文件,并确保其内容正确。如果发生错误,服务器启动将失败,管理员必须根据服务器错误日志中的诊断信息纠正任何问题。
存储密码的任何配置文件应具有限制模式,并且只能由用于运行 MySQL 服务器的帐户访问。
给定前述配置文件属性,要配置component_keyring_encrypted_file,请在安装component_keyring_encrypted_file库文件的目录中创建一个名为component_keyring_encrypted_file.cnf的全局配置文件,并可选择在数据目录中创建一个名为component_keyring_encrypted_file.cnf的本地配置文件。以下说明假定要使用一个名为/usr/local/mysql/keyring/component_keyring_encrypted_file的密钥环数据文件进行读/写操作。您还必须选择一个密码。
要仅使用全局配置文件,文件内容如下所示:
{
\”path\”: \”/usr/local/mysql/keyring/component_keyring_encrypted_file\”,
\”password\”: \”*password*\”,
\”read_only\”: false
}
在安装component_keyring_encrypted_file库文件的目录中创建此文件。
或者,要使用全局和本地配置文件对,全局文件如下所示:
{
\”read_local_config\”: true
}
在安装component_keyring_encrypted_file库文件的目录中创建此文件。
本地文件如下所示:
{
\”path\”: \”/usr/local/mysql/keyring/component_keyring_encrypted_file\”,
\”password\”: \”*password*\”,
\”read_only\”: false
}
在数据目录中创建此文件。
密钥环操作是事务性的:component_keyring_encrypted_file在写操作期间使用备份文件,以确保如果操作失败,可以回滚到原始文件。备份文件与数据文件同名,后缀为.backup。
component_keyring_encrypted_file支持组成标准 MySQL 密钥环服务接口的函数。这些函数执行的密钥环操作可在两个级别访问:
SQL 接口:在 SQL 语句中,调用第 8.4.4.15 节,“通用密钥环密钥管理函数”中描述的函数。
C 接口:在 C 语言代码中,调用第 7.6.9.2 节,“密钥环服务”中描述的密钥环服务函数。
示例(使用 SQL 接口):
SELECT keyring_key_generate(\’MyKey\’, \’AES\’, 32);
SELECT keyring_key_remove(\’MyKey\’);
有关component_keyring_encrypted_file允许的密钥值特性的信息,请参阅第 8.4.4.13 节,“支持的密钥环密钥类型和长度”。
dev.mysql.com/doc/refman/8.0/en/keyring-file-plugin.html
8.4.4.6 使用基于文件的 keyring_file 密钥环插件
keyring_file 密钥环插件将密钥环数据存储在服务器主机上的一个文件中。
截至 MySQL 8.0.34 版本,此插件已被弃用,并可能在将来的 MySQL 版本中被移除。相反,考虑使用 component_keyring_file 组件来存储密钥环数据(参见 第 8.4.4.4 节,“使用 component_keyring_file 基于文件的密钥环组件”)。
警告
对于加密密钥管理,keyring_file 插件并不是一个符合监管合规性的解决方案。诸如 PCI、FIPS 等安全标准要求使用密钥管理系统来在密钥保险库或硬件安全模块(HSM)中安全、管理和保护加密密钥。
要安装 keyring_file,请使用 第 8.4.4.3 节,“密钥环插件安装” 中找到的一般说明,以及此处找到的特定于 keyring_file 的配置信息。
为了在服务器启动过程中可用,必须使用 –early-plugin-load 选项加载 keyring_file。keyring_file_data 系统变量可选地配置 keyring_file 插件用于数据存储的文件位置。默认值是特定于平台的。要显式配置文件位置,请在启动时设置变量值。例如,在服务器的 my.cnf 文件中使用以下行,根据需要调整 .so 后缀和文件位置:
[mysqld]
early-plugin-load=keyring_file.so
keyring_file_data=/usr/local/mysql/mysql-keyring/keyring
密钥环操作是事务性的:keyring_file 插件在写操作期间使用备份文件,以确保如果操作失败,可以回滚到原始文件。备份文件的名称与 keyring_file_data 系统变量的值相同,后缀为 .backup。
有关 keyring_file_data 的更多信息,请参阅 第 8.4.4.19 节,“密钥环系统变量”。
为了确保只有在正确的密钥环存储文件存在时才刷新密钥,keyring_file 在文件中存储了密钥环的 SHA-256 校验和。在更新文件之前,插件会验证文件是否包含预期的校验和。
keyring_file 插件支持组成标准 MySQL 密钥环服务接口的函数。这些函数执行的密钥环操作可在两个级别访问:
SQL 接口:在 SQL 语句中,调用第 8.4.4.15 节,“通用密钥环密钥管理函数”中描述的函数。
C 接口:在 C 语言代码中,调用第 7.6.9.2 节,“密钥环服务”中描述的密钥环服务函数。
示例(使用 SQL 接口):
SELECT keyring_key_generate(\’MyKey\’, \’AES\’, 32);
SELECT keyring_key_remove(\’MyKey\’);
有关keyring_file允许的密钥值特性的信息,请参阅第 8.4.4.13 节,“支持的密钥环密钥类型和长度”。
原文:dev.mysql.com/doc/refman/8.0/en/keyring-encrypted-file-plugin.html
8.4.4.7 使用 keyring_encrypted_file 加密文件型密钥环插件
注意
keyring_encrypted_file 插件是包含在 MySQL 企业版中的一个扩展,这是一个商业产品。要了解更多关于商业产品的信息,请参见 www.mysql.com/products/。
keyring_encrypted_file 密钥环插件将密钥环数据存储在一个加密的、受密码保护的文件中,该文件位于服务器主机本地。
截至 MySQL 8.0.34 版本,该插件已被弃用,并可能在未来的 MySQL 版本中被移除。相反,考虑使用 component_encrypted_keyring_file 组件来存储密钥环数据(参见 Section 8.4.4.5, “Using the component_keyring_encrypted_file Encrypted File-Based Keyring Component”)。
警告
对于加密密钥管理,keyring_encrypted_file 插件并不是一个旨在符合监管合规性的解决方案。安全标准如 PCI、FIPS 等要求使用密钥管理系统来保护、管理和保护密钥库或硬件安全模块(HSM)中的加密密钥。
要安装 keyring_encrypted_file,请使用在 Section 8.4.4.3, “Keyring Plugin Installation” 中找到的一般说明,以及在此处找到的特定于 keyring_encrypted_file 的配置信息。
为了在服务器启动过程中可用,keyring_encrypted_file 必须使用 –early-plugin-load 选项加载。要为加密密钥环数据文件指定密码,请设置 keyring_encrypted_file_password 系统变量。(密码是必需的;如果在服务器启动时未指定,keyring_encrypted_file 初始化将失败。)keyring_encrypted_file_data 系统变量可选地配置 keyring_encrypted_file 插件用于数据存储的文件位置。默认值是特定于平台的。要显式配置文件位置,请在启动时设置变量值。例如,在服务器 my.cnf 文件中使用这些行,根据需要调整 .so 后缀和文件位置以适应您的平台,并替换您选择的密码:
[mysqld]
early-plugin-load=keyring_encrypted_file.so
keyring_encrypted_file_data=/usr/local/mysql/mysql-keyring/keyring-encrypted
keyring_encrypted_file_password=*password*
因为 my.cnf 文件在写入时会存储密码,所以应该具有限制模式,并且只能被用来运行 MySQL 服务器的账户访问。
Keyring 操作是事务性的:keyring_encrypted_file插件在写操作期间使用备份文件,以确保如果操作失败,可以回滚到原始文件。备份文件的名称与keyring_encrypted_file_data系统变量的值相同,后缀为.backup。
有关用于配置keyring_encrypted_file插件的系统变量的附加信息,请参阅 Section 8.4.4.19, “Keyring 系统变量”。
为确保仅在存在正确的 keyring 存储文件时才刷新密钥,keyring_encrypted_file在文件中存储了密钥环的 SHA-256 校验和。在更新文件之前,插件会验证文件是否包含预期的校验和。此外,keyring_encrypted_file在写入文件之前使用 AES 加密文件内容,并在读取文件后解密文件内容。
keyring_encrypted_file插件支持组成标准 MySQL Keyring 服务接口的函数。这些函数执行的 Keyring 操作可在两个级别访问:
SQL 接口:在 SQL 语句中,调用 Section 8.4.4.15, “通用 Keyring 密钥管理函数”中描述的函数。
C 接口:在 C 语言代码中,调用 Section 7.6.9.2, “Keyring 服务”中描述的 keyring 服务函数。
示例(使用 SQL 接口):
SELECT keyring_key_generate(\’MyKey\’, \’AES\’, 32);
SELECT keyring_key_remove(\’MyKey\’);
有关keyring_encrypted_file允许的关键值特征的信息,请参阅 Section 8.4.4.13, “支持的 Keyring 密钥类型和长度”。
原文:dev.mysql.com/doc/refman/8.0/en/keyring-okv-plugin.html
8.4.4.8 使用 keyring_okv KMIP 插件
注意
keyring_okv插件是包含在 MySQL 企业版中的扩展,这是一款商业产品。要了解更多关于商业产品的信息,请参阅www.mysql.com/products/。
密钥管理互操作性协议(KMIP)使密钥管理服务器和其客户端之间能够通信。keyring_okv密钥环插件使用 KMIP 1.1 协议作为 KMIP 后端的客户端进行安全通信。密钥材料仅由后端生成,而不是由keyring_okv生成。该插件与以下支持 KMIP 的产品配合使用:
Oracle Key Vault
Gemalto SafeNet KeySecure Appliance
Townsend Alliance Key Manager
Entrust KeyControl
每个 MySQL 服务器实例必须单独注册为 KMIP 的客户端。如果两个或更多 MySQL 服务器实例使用相同的凭据集,它们可能会干扰彼此的功能。
keyring_okv插件支持组成标准 MySQL 密钥环服务接口的功能。这些功能执行的密钥环操作可在两个级别访问:
SQL 接口:在 SQL 语句中,调用第 8.4.4.15 节“通用密钥环密钥管理功能”中描述的函数。
C 接口:在 C 语言代码中,调用第 7.6.9.2 节“密钥环服务”中描述的密钥环服务函数。
示例(使用 SQL 接口):
SELECT keyring_key_generate(\’MyKey\’, \’AES\’, 32);
SELECT keyring_key_remove(\’MyKey\’);
有关keyring_okv允许的密钥值特性的信息,请参阅第 8.4.4.13 节“支持的密钥环密钥类型和长度”。
要安装keyring_okv,请使用第 8.4.4.3 节“密钥环插件安装”中的通用说明,以及此处找到的特定于keyring_okv的配置信息。
通用 keyring_okv 配置
为 Oracle Key Vault 配置 keyring_okv
为 Gemalto SafeNet KeySecure Appliance 配置 keyring_okv
为 Townsend Alliance Key Manager 配置 keyring_okv
为 Entrust KeyControl 配置 keyring_okv
保护 keyring_okv 密钥文件的密码
一般 keyring_okv 配置
无论keyring_okv插件使用哪个 KMIP 后端进行密钥存储,keyring_okv_conf_dir系统变量都配置了keyring_okv用于其支持文件的目录位置。默认值为空,因此必须在插件能够与 KMIP 后端通信之前设置变量以命名一个正确配置的目录。否则,keyring_okv在服务器启动期间向错误日志写入一条消息,说明无法通信:
[Warning] Plugin keyring_okv reported: \’For keyring_okv to be
initialized, please point the keyring_okv_conf_dir variable to a directory
containing Oracle Key Vault configuration file and ssl materials\’
keyring_okv_conf_dir变量必须命名一个包含以下项目的目录:
okvclient.ora:包含keyring_okv与之通信的 KMIP 后端详细信息的文件。
ssl:包含用于与 KMIP 后端建立安全连接所需的证书和密钥文件的目录:CA.pem、cert.pem和key.pem。如果密钥文件受密码保护,ssl目录可以包含一个名为password.txt的单行文本文件,其中包含解密密钥文件所需的密码。
keyring_okv正常工作需要okvclient.ora文件和包含证书和密钥文件的ssl目录。用于将这些文件填充到配置目录的过程取决于与keyring_okv一起使用的 KMIP 后端,如其他地方所述。
由keyring_okv用作其支持文件位置的配置目录应具有严格的模式,并且只能由用于运行 MySQL 服务器的帐户访问。例如,在 Unix 和类 Unix 系统上,要使用/usr/local/mysql/mysql-keyring-okv目录,以下命令(以root身份执行)创建目录并设置其模式和所有权:
cd /usr/local/mysql
mkdir mysql-keyring-okv
chmod 750 mysql-keyring-okv
chown mysql mysql-keyring-okv
chgrp mysql mysql-keyring-okv
要在服务器启动过程中可用,必须使用–early-plugin-load选项加载keyring_okv。此外,设置keyring_okv_conf_dir系统变量,告诉keyring_okv在哪里找到其配置目录。例如,在服务器my.cnf文件中使用以下行,根据需要调整平台的.so后缀和目录位置:
[mysqld]
early-plugin-load=keyring_okv.so
keyring_okv_conf_dir=/usr/local/mysql/mysql-keyring-okv
有关keyring_okv_conf_dir的更多信息,请参见第 8.4.4.19 节,“Keyring 系统变量”。
为 Oracle Key Vault 配置 keyring_okv
这里的讨论假定您熟悉 Oracle Key Vault。一些相关信息来源:
Oracle Key Vault 网站
Oracle Key Vault 文档
在 Oracle Key Vault 术语中,使用 Oracle Key Vault 存储和检索安全对象的客户端称为端点。要与 Oracle Key Vault 通信,必须注册为端点并通过下载和安装端点支持文件进行注册。请注意,必须为每个 MySQL Server 实例注册一个单独的端点。如果两个或更多个 MySQL Server 实例使用相同的端点,则它们可能会干扰彼此的功能。
以下过程简要总结了设置keyring_okv以与 Oracle Key Vault 一起使用的过程:
创建keyring_okv插件使用的配置目录。
在 Oracle Key Vault 中注册一个端点以获取注册令牌。
使用注册令牌获取okvclient.jar客户端软件下载。
安装客户端软件以填充包含 Oracle Key Vault 支持文件的keyring_okv配置目录。
使用以下过程配置keyring_okv和 Oracle Key Vault 一起工作。此描述仅概述了如何与 Oracle Key Vault 交互。有关详细信息,请访问Oracle Key Vault网站并查阅 Oracle Key Vault 管理员指南。
创建包含 Oracle Key Vault 支持文件的配置目录,并确保keyring_okv_conf_dir系统变量设置为该目录的名称(有关详细信息,请参阅通用 keyring_okv 配置)。
以具有系统管理员角色的用户身份登录到 Oracle Key Vault 管理控制台。
选择“端点”选项卡以到达端点页面。在端点页面上,点击“添加”。
提供所需的端点信息并点击“注册”。端点类型应为其他。成功注册将产生一个注册令牌。
从 Oracle Key Vault 服务器注销。
再次连接到 Oracle Key Vault 服务器,这次不需要登录。使用端点注册令牌进行注册并请求okvclient.jar软件下载。将此文件保存到您的系统中。
使用以下命令安装okvclient.jar文件(您必须具有 JDK 1.4 或更高版本):
java -jar okvclient.jar -d *dir_name* [-v]
-d选项后面的目录名称是安装提取文件的位置。如果给出-v选项,则会产生日志信息,如果命令失败,这些信息可能会有用。
当命令要求输入 Oracle Key Vault 端点密码时,请不要提供密码。而是按下Enter键。(结果是端点连接到 Oracle Key Vault 时不需要密码。)
前面的命令会生成一个 okvclient.ora 文件,应该位于前面 java -jar 命令中 -d 选项指定的目录下的这个位置:
install_dir/conf/okvclient.ora
预期的文件内容包括类似于这样的行:
SERVER=*host_ip*:*port_num*
STANDBY_SERVER=*host_ip*:*port_num*
SERVER 变量是必需的,STANDBY_SERVER 变量是可选的。keyring_okv 插件尝试与由 SERVER 变量指定的主机上运行的服务器通信,如果失败则退回到 STANDBY_SERVER。
注意
如果现有文件不是这种格式,则创建一个新文件,其中包含前面示例中显示的行。此外,在运行 okvutil 命令之前,请考虑备份 okvclient.ora 文件。根据需要恢复文件。
从 MySQL 8.0.29 开始,您可以指定多个备用服务器(最多 64 个)。如果这样做,keyring_okv 插件会迭代它们,直到建立连接,如果无法建立连接则会失败。要添加额外的备用服务器,请编辑 okvclient.ora 文件,将服务器的 IP 地址和端口号作为 STANDBY_SERVER 变量的值以逗号分隔的列表指定。例如:
STANDBY_SERVER=*host_ip*:*port_num*,*host_ip*:*port_num*,*host_ip*:*port_num*,*host_ip*:*port_num*
确保备用服务器列表保持简短、准确和最新,并删除不再有效的服务器。每次连接尝试都会等待 20 秒,因此长列表中存在无效服务器会显著影响 keyring_okv 插件的连接时间,从而影响服务器启动时间。
转到 Oracle Key Vault 安装程序目录,并通过运行此命令测试设置:
okvutil/bin/okvutil list
输出应该类似于这样:
Unique ID Type Identifier
255AB8DE-C97F-482C-E053-0100007F28B9 Symmetric Key –
264BF6E0-A20E-7C42-E053-0100007FB29C Symmetric Key –
对于一个全新的 Oracle Key Vault 服务器(一个没有任何密钥的服务器),输出看起来像这样,以表明保险库中没有密钥:
no objects found
使用此命令从 okvclient.jar 文件中提取包含 SSL 材料的 ssl 目录:
jar xf okvclient.jar ssl
将 Oracle Key Vault 支持文件(okvclient.ora 文件和 ssl 目录)复制到配置目录中。
(可选)如果您希望对密钥文件进行密码保护,请使用 Password-Protecting the keyring_okv Key File 中的说明。
完成前述过程后,重新启动 MySQL 服务器。它会加载 keyring_okv 插件,并且 keyring_okv 使用其配置目录中的文件与 Oracle Key Vault 进行通信。
配置 keyring_okv 以适用于 Gemalto SafeNet KeySecure Appliance
Gemalto SafeNet KeySecure Appliance 使用 KMIP 协议(版本 1.1 或 1.2)。支持 KMIP 1.1 的 keyring_okv 密钥环插件可以使用 KeySecure 作为其 KMIP 后端进行密钥环存储。
使用以下步骤配置 keyring_okv 和 KeySecure 一起工作。描述仅总结了如何与 KeySecure 交互。有关详细信息,请参阅 KeySecure 用户指南 中的添加 KMIP 服务器部分。
创建包含 KeySecure 支持文件的配置目录,并确保 keyring_okv_conf_dir 系统变量设置为该目录的名称(有关详细信息,请参阅 通用 keyring_okv 配置)。
在配置目录中,创建一个名为 ssl 的子目录,用于存储所需的 SSL 证书和密钥文件。
在配置目录中,创建一个名为 okvclient.ora 的文件。它应具有以下格式:
SERVER=*host_ip*:*port_num*
STANDBY_SERVER=*host_ip*:*port_num*
例如,如果 KeySecure 在主机 198.51.100.20 上运行,并在端口 9002 上监听,同时也在备用主机 203.0.113.125 上运行,并在端口 8041 上监听,那么 okvclient.ora 文件如下所示:
SERVER=198.51.100.20:9002
STANDBY_SERVER=203.0.113.125:8041
从 MySQL 8.0.29 开始,您可以指定多个备用服务器(最多 64 个)。如果这样做,keyring_okv 插件会对它们进行迭代,直到建立连接,如果无法建立连接则会失败。要添加额外的备用服务器,请编辑 okvclient.ora 文件,将服务器的 IP 地址和端口号作为逗号分隔列表指定在 STANDBY_SERVER 变量的值中。例如:
STANDBY_SERVER=*host_ip*:*port_num*,*host_ip*:*port_num*,*host_ip*:*port_num*,*host_ip*:*port_num*
确保备用服务器列表保持简短、准确和最新,并删除不再有效的服务器。每次连接尝试都会等待 20 秒,因此长时间的无效服务器列表会显著影响 keyring_okv 插件的连接时间,从而影响服务器启动时间。
以具有证书颁发机构访问权限的管理员凭据登录到 KeySecure 管理控制台。
导航至安全性 >> 本地 CA 并创建本地证书颁发机构(CA)。
转到受信任的 CA 列表。选择默认并点击属性。然后选择受信任证书颁发机构列表的编辑并添加刚创建的 CA。
下载 CA 并将其保存在 ssl 目录中,文件名为 CA.pem。
导航至安全性 >> 证书请求并创建证书。然后您可以下载一个包含证书 PEM 文件的压缩 tar 文件。
从下载的文件中提取 PEM 文件。例如,如果文件名为 csr_w_pk_pkcs8.gz,请使用以下命令进行解压缩和解包:
tar zxvf csr_w_pk_pkcs8.gz
提取操作会生成两个文件:certificate_request.pem 和 private_key_pkcs8.pem。
使用此 openssl 命令解密私钥并创建名为 key.pem 的文件:
openssl pkcs8 -in private_key_pkcs8.pem -out key.pem
将 key.pem 文件复制到 ssl 目录中。
将certificate_request.pem中的证书请求复制到剪贴板中。
导航至安全性 >> 本地 CA。选择之前创建的相同 CA(用于创建CA.pem文件的那个),然后点击签署请求。将剪贴板中的证书请求粘贴进去,选择客户端的证书目的(密钥环是 KeySecure 的客户端),然后点击签署请求。结果是在新页面中使用所选 CA 签署的证书。
将签署的证书复制到剪贴板,然后将剪贴板内容保存为名为cert.pem的文件,保存在ssl目录中。
(可选)如果您希望对密钥文件进行密码保护,请使用密码保护 keyring_okv 密钥文件中的说明。
完成上述过程后,重新启动 MySQL 服务器。它会加载keyring_okv插件,并且keyring_okv会使用其配置目录中的文件与 KeySecure 进行通信。
配置用于 Townsend Alliance Key Manager 的keyring_okv
Townsend Alliance Key Manager 使用 KMIP 协议。keyring_okv密钥环插件可以使用 Alliance Key Manager 作为其 KMIP 后端进行密钥环存储。有关更多信息,请参见用于 MySQL 的 Alliance Key Manager。
配置用于 Entrust KeyControl 的keyring_okv
Entrust KeyControl 使用 KMIP 协议。keyring_okv密钥环插件可以使用 Entrust KeyControl 作为其 KMIP 后端进行密钥环存储。有关更多信息,请参见Oracle MySQL 和 Entrust KeyControl 与 nShield HSM 集成指南。
保护 keyring_okv 密钥文件的密码
您可以选择使用密码保护密钥文件,并提供包含密码的文件以启用密钥文件的解密。要这样做,请切换到ssl目录并执行以下步骤:
加密key.pem密钥文件。例如,使用以下命令,并在提示时输入加密密码:
$> openssl rsa -des3 -in key.pem -out key.pem.new
Enter PEM pass phrase:
Verifying – Enter PEM pass phrase:
将加密密码保存在名为password.txt的单行文本文件中,保存在ssl目录中。
验证加密密钥文件是否可以使用以下命令解密。解密后的文件应显示在控制台上:
$> openssl rsa -in key.pem.new -passin file:password.txt
删除原始的key.pem文件,并将key.pem.new重命名为key.pem。
更改新的key.pem文件和password.txt文件的所有权和访问模式,以确保它们具有与ssl目录中其他文件相同的限制。
原文:dev.mysql.com/doc/refman/8.0/en/keyring-aws-plugin.html
8.4.4.9 使用 keyring_aws 亚马逊网络服务密钥环插件
注意
keyring_aws插件是 MySQL 企业版中包含的扩展,这是一个商业产品。要了解更多关于商业产品的信息,请参阅www.mysql.com/products/。
keyring_aws密钥环插件与亚马逊网络服务密钥管理服务(AWS KMS)通信,作为密钥生成的后端,并使用本地文件进行密钥存储。所有密钥材料均由 AWS 服务器独家生成,而不是由keyring_aws生成。
MySQL 企业版可以在 Red Hat Enterprise Linux、SUSE Linux Enterprise Server、Debian、Ubuntu、macOS 和 Windows 上与keyring_aws一起使用。MySQL 企业版不支持在以下平台上使用keyring_aws:
EL6
通用 Linux(glibc2.12)
SLES 12(MySQL Server 5.7 之后的版本)
Solaris
这里的讨论假定您对 AWS 有一般了解,特别是对 KMS 有了解。一些相关信息来源:
AWS 网站
KMS 文档
以下各节提供了keyring_aws密钥环插件的配置和使用信息:
keyring_aws 配置
keyring_aws 操作
keyring_aws 凭据更改
keyring_aws 配置
要安装keyring_aws,请使用第 8.4.4.3 节中找到的一般说明,“密钥环插件安装”,以及此处找到的插件特定配置信息。
插件库文件包含keyring_aws插件和两个可加载函数,keyring_aws_rotate_cmk()和keyring_aws_rotate_keys()。
要配置keyring_aws,您必须获取一个提供与 AWS KMS 通信凭据的秘密访问密钥,并将其写入配置文件:
创建一个 AWS KMS 账户。
使用 AWS KMS 创建一个秘密访问密钥 ID 和秘密访问密钥。访问密钥用于验证您的身份及您的应用程序的身份。
使用 AWS KMS 账户创建一个 KMS 密钥 ID。在 MySQL 启动时,将keyring_aws_cmk_id系统变量设置为 CMK ID 值。此变量是强制性的,没有默认值。(如果需要,可以使用SET GLOBAL在运行时更改其值。)
如有必要,创建应放置配置文件的目录。该目录应具有限制模式,并且只能由用于运行 MySQL 服务器的帐户访问。例如,在 Unix 和类 Unix 系统上,要将/usr/local/mysql/mysql-keyring/keyring_aws_conf用作文件名,以下命令(以root身份执行)创建其父目录并设置目录模式和所有权:
$> cd /usr/local/mysql
$> mkdir mysql-keyring
$> chmod 750 mysql-keyring
$> chown mysql mysql-keyring
$> chgrp mysql mysql-keyring
在 MySQL 启动时,将keyring_aws_conf_file系统变量设置为/usr/local/mysql/mysql-keyring/keyring_aws_conf,以指示服务器配置文件的位置。
准备keyring_aws配置文件,其中应包含两行:
第 1 行:秘密访问密钥 ID
第 2 行:秘密访问密钥
例如,如果密钥 ID 为wwwwwwwwwwwwwEXAMPLE,密钥为xxxxxxxxxxxxx/yyyyyyy/zzzzzzzzEXAMPLEKEY,则配置文件如下所示:
wwwwwwwwwwwwwEXAMPLE
xxxxxxxxxxxxx/yyyyyyy/zzzzzzzzEXAMPLEKEY
在服务器启动过程中可用,必须使用–early-plugin-load选项加载keyring_aws。keyring_aws_cmk_id系统变量是必需的,并配置从 AWS KMS 服务器获取的 KMS 密钥 ID。keyring_aws_conf_file和keyring_aws_data_file系统变量可选地配置keyring_aws插件用于配置信息和数据存储的文件位置。文件位置变量的默认值是特定于平台的。要显式配置位置,请在启动时设置变量值。例如,在服务器my.cnf文件中使用这些行,根据需要调整.so后缀和文件位置:
[mysqld]
early-plugin-load=keyring_aws.so
keyring_aws_cmk_id=\’arn:aws:kms:us-west-2:111122223333:key/abcd1234-ef56-ab12-cd34-ef56abcd1234\’
keyring_aws_conf_file=/usr/local/mysql/mysql-keyring/keyring_aws_conf
keyring_aws_data_file=/usr/local/mysql/mysql-keyring/keyring_aws_data
要成功启动keyring_aws插件,配置文件必须存在并包含有效的秘密访问密钥信息,如前所述初始化。存储文件不需要存在。如果不存在,keyring_aws会尝试创建它(以及必要时的父目录)。
有关用于配置keyring_aws插件的系统变量的更多信息,请参见第 8.4.4.19 节,“Keyring 系统变量”。
启动 MySQL 服务器并安装与keyring_aws插件关联的函数。这是一次性操作,通过执行以下语句执行,根据需要调整.so后缀以适应您的平台:
CREATE FUNCTION keyring_aws_rotate_cmk RETURNS INTEGER
SONAME \’keyring_aws.so\’;
CREATE FUNCTION keyring_aws_rotate_keys RETURNS INTEGER
SONAME \’keyring_aws.so\’;
有关keyring_aws函数的更多信息,请参见第 8.4.4.16 节,“插件特定的 Keyring 密钥管理函数”。
keyring_aws 操作
在插件启动时,keyring_aws 插件从其配置文件中读取 AWS 秘密访问密钥 ID 和密钥。它还将存储文件中包含的任何加密密钥读入其内存缓存中。
在运行过程中,keyring_aws 在内存缓存中维护加密密钥,并使用存储文件作为本地持久存储。每个 keyring_aws 操作都是事务性的:keyring_aws 要么成功地更改内存中的密钥缓存和密钥环存储文件,要么操作失败,密钥环状态保持不变。
为了确保仅在存在正确的密钥环存储文件时才刷新密钥,keyring_aws 在文件中存储密钥环的 SHA-256 校验和。在更新文件之前,插件会验证文件是否包含预期的校验和。
keyring_aws 插件支持组成标准 MySQL 密钥环服务接口的函数。通过这些函数执行的密钥环操作可在两个级别访问:
SQL 接口:在 SQL 语句中,调用 第 8.4.4.15 节,“通用密钥环密钥管理函数” 中描述的函数。
C 接口:在 C 语言代码中,调用 第 7.6.9.2 节,“密钥环服务” 中描述的密钥环服务函数。
示例(使用 SQL 接口):
SELECT keyring_key_generate(\’MyKey\’, \’AES\’, 32);
SELECT keyring_key_remove(\’MyKey\’);
此外,keyring_aws_rotate_cmk() 和 keyring_aws_rotate_keys() 函数“扩展”了密钥环插件接口,提供了标准密钥环服务接口未涵盖的与 AWS 相关的功能。只能通过使用 SQL 调用这些函数来访问这些功能。没有相应的 C 语言密钥服务函数。
有关 keyring_aws 允许的密钥值特性的信息,请参阅 第 8.4.4.13 节,“支持的密钥环密钥类型和长度”。
keyring_aws 凭据更改
假设 keyring_aws 插件在服务器启动时已经正确初始化,可以更改用于与 AWS KMS 通信的凭据:
使用 AWS KMS 创建新的秘密访问密钥 ID 和秘密访问密钥。
将新凭据存储在配置文件中(由 keyring_aws_conf_file 系统变量命名的文件)。文件格式如前所述。
重新初始化 keyring_aws 插件,以便重新读取配置文件。假设新凭据有效,插件应该成功初始化。
有两种重新初始化插件的方法:
重新启动服务器。这更简单,没有副作用,但不适用于需要最小化服务器停机时间并尽可能少重启的安装。
通过执行以下语句重新初始化插件,根据需要调整.so后缀以适应您的平台,而无需重新启动服务器:
UNINSTALL PLUGIN keyring_aws;
INSTALL PLUGIN keyring_aws SONAME \’keyring_aws.so\’;
注意
除了在运行时加载插件外,INSTALL PLUGIN 还具有在 mysql.plugin 系统表中注册插件的副作用。因此,如果您决定停止使用keyring_aws,仅仅从用于启动服务器的选项集中删除–early-plugin-load选项是不够的。这样可以阻止插件早期加载,但服务器仍会在启动序列中加载在mysql.plugin中注册的插件。
因此,如果您执行上述描述的UNINSTALL PLUGIN加INSTALL PLUGIN序列来更改 AWS KMS 凭据,那么要停止使用keyring_aws,需要再次执行UNINSTALL PLUGIN来取消注册插件,同时删除–early-plugin-load选项。
原文:dev.mysql.com/doc/refman/8.0/en/keyring-hashicorp-plugin.html
8.4.4.10 使用 HashiCorp Vault 密钥环插件
注意
keyring_hashicorp 插件是包含在 MySQL Enterprise Edition 中的扩展,这是一款商业产品。要了解更多关于商业产品的信息,请参阅 www.mysql.com/products/。
keyring_hashicorp 密钥环插件与 HashiCorp Vault 进行后端存储通信。该插件支持 HashiCorp Vault AppRole 认证。没有密钥信息永久存储在 MySQL 服务器本地存储中(可使用可选的内存中密钥缓存作为中间存储)。随机密钥生成在 MySQL 服务器端执行,然后将密钥存储到 Hashicorp Vault。
keyring_hashicorp 插件支持组成标准 MySQL 密钥环服务接口的函数。这些函数执行的密钥环操作可在两个级别访问:
SQL 接口:在 SQL 语句中,调用 第 8.4.4.15 节,“通用密钥环密钥管理函数” 中描述的函数。
C 接口:在 C 语言代码中,调用 第 7.6.9.2 节,“密钥环服务” 中描述的密钥环服务函数。
示例(使用 SQL 接口):
SELECT keyring_key_generate(\’MyKey\’, \’AES\’, 32);
SELECT keyring_key_remove(\’MyKey\’);
有关 keyring_hashicorp 允许的密钥值特性的信息,请参阅 第 8.4.4.13 节,“支持的密钥环密钥类型和长度”。
要安装 keyring_hashicorp,请使用 第 8.4.4.3 节,“密钥环插件安装” 中找到的一般说明,以及此处找到的特定于 keyring_hashicorp 的配置信息。插件特定配置包括准备连接到 HashiCorp Vault 所需的证书和密钥文件,以及配置 HashiCorp Vault 本身。以下部分提供了必要的说明。
证书和密钥准备
HashiCorp Vault 设置
keyring_hashicorp 配置
证书和密钥准备
keyring_hashicorp 插件需要与 HashiCorp Vault 服务器建立安全连接,使用 HTTPS 协议。典型设置包括一组证书和密钥文件:
company.crt: 组织拥有的自定义 CA 证书。此文件同时被 HashiCorp Vault 服务器和 keyring_hashicorp 插件使用。
vault.key:HashiCorp Vault 服务器实例的私钥。此文件由 HashiCorp Vault 服务器使用。
vault.crt:HashiCorp Vault 服务器实例的证书。此文件必须由组织 CA 证书签名。
以下说明描述了如何使用 OpenSSL 创建证书和密钥文件。(如果您已经有这些文件,请继续进行 HashiCorp Vault 设置。)所示的说明适用于 Linux 平台,可能需要调整以适用于其他平台。
重要提示
根据这些说明生成的证书是自签名的,可能不太安全。在使用这些文件获得经验后,考虑从注册的证书颁发机构获取证书/密钥材料。
准备公司和 HashiCorp Vault 服务器密钥。
使用以下命令生成密钥文件:
openssl genrsa -aes256 -out company.key 4096
openssl genrsa -aes256 -out vault.key 2048
这些命令生成包含公司私钥(company.key)和 Vault 服务器私钥(vault.key)的文件。这些密钥分别是随机生成的 4,096 位和 2,048 位的 RSA 密钥。
每个命令都会提示输入密码。为了测试目的,密码不是必需的。要禁用密码,请省略-aes256参数。
密钥文件包含敏感信息,应存储在安全位置。密码(也是敏感信息)稍后会被要求,因此请记下并将其存储在安全位置。
(可选)使用以下命令检查密钥文件内容和有效性:
openssl rsa -in company.key -check
openssl rsa -in vault.key -check
创建公司 CA 证书。
使用以下命令创建一个有效期为 365 天的名为company.crt的公司 CA 证书文件(在一行上输入命令):
openssl req -x509 -new -nodes -key company.key
-sha256 -days 365 -out company.crt
如果在生成密钥时使用了-aes256参数进行密钥加密,则在创建 CA 证书时会提示输入公司密钥密码。还会提示输入有关证书持有者(即您或您的公司)的信息,如下所示:
Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:
Email Address []:
用适当的值回答提示。
创建证书签名请求。
要为新创建的服务器密钥准备一个 HashiCorp Vault 服务器证书,必须创建一个名为request.conf的配置文件,其中包含以下行。如果 HashiCorp Vault 服务器不在本地主机上运行,请替换适当的 CN 和 IP 值,并进行任何其他必要的更改。
[req]
distinguished_name = vault
x509_entensions = v3_req
prompt = no
[vault]
C = US
ST = CA
L = RWC
O = Company
CN = 127.0.0.1
[v3_req]
subjectAltName = @alternatives
authorityKeyIdentifier = keyid,issuer
basicConstraints = CA:TRUE
[alternatives]
IP = 127.0.0.1
使用以下命令创建签名请求:
openssl req -new -key vault.key -config request.conf -out request.csr
输出文件(request.csr)是一个中间文件,用作创建服务器证书的输入。
创建 HashiCorp Vault 服务器证书。
使用公司证书(company.crt)对 HashiCorp Vault 服务器密钥(vault.key)和 CSR(request.csr)中的组合信息进行签名,以创建 HashiCorp Vault 服务器证书(vault.crt)。使用以下命令执行此操作(在一行上输入命令):
openssl x509 -req -in request.csr
-CA company.crt -CAkey company.key -CAcreateserial
-out vault.crt -days 365 -sha256
要使 vault.crt 服务器证书有效,将 company.crt 公司证书的内容附加到其中。这是必需的,以便公司证书在请求中与服务器证书一起传递。
cat company.crt >> vault.crt
如果显示 vault.crt 文件的内容,它应该如下所示:
—–BEGIN CERTIFICATE—–
… *content of HashiCorp Vault server certificate* …
—–END CERTIFICATE—–
—–BEGIN CERTIFICATE—–
… *content of company certificate* …
—–END CERTIFICATE—–
HashiCorp Vault 设置
以下说明描述了如何创建一个 HashiCorp Vault 设置,以便测试 keyring_hashicorp 插件。
重要
测试设置类似于生产设置,但是 HashiCorp Vault 的生产使用涉及额外的安全考虑,例如使用非自签名证书和将公司证书存储在系统信任存储中。您必须实施任何额外的安全步骤以满足您的运营需求。
这些说明假定在 证书和密钥准备 中创建了证书和密钥文件。如果您没有这些文件,请参阅该部分。
获取 HashiCorp Vault 二进制文件。
从 www.vaultproject.io/downloads.html 下载适合您平台的 HashiCorp Vault 二进制文件。
解压缩存档内容以生成可执行的 vault 命令,该命令用于执行 HashiCorp Vault 操作。如有必要,将安装该命令的目录添加到系统路径中。
(可选)HashiCorp Vault 支持自动补全选项,使其更易于使用。有关更多信息,请参阅 learn.hashicorp.com/vault/getting-started/install#command-completion。
创建 HashiCorp Vault 服务器配置文件。
准备一个名为 config.hcl 的配置文件,内容如下。对于 tls_cert_file、tls_key_file 和 path 值,请替换适合您系统的路径名。
listener \”tcp\” {
address=\”127.0.0.1:8200\”
tls_cert_file=\”/home/username/certificates/vault.crt\”
tls_key_file=\”/home/username/certificates/vault.key\”
}
storage \”file\” {
path = \”/home/username/vaultstorage/storage\”
}
ui = true
启动 HashiCorp Vault 服务器。
要启动 Vault 服务器,请使用以下命令,其中 -config 选项指定刚创建的配置文件的路径:
vault server -config=config.hcl
在此步骤中,您可能会被要求为存储在 vault.key 文件中的 Vault 服务器私钥输入密码。
服务器应该启动,并在控制台上显示一些信息(IP、端口等)。
为了能够输入剩余的命令,请将 vault server 命令放在后台运行或在继续之前打开另一个终端。
初始化 HashiCorp Vault 服务器。
注意
在启动 Vault 第一次时,执行本步骤中描述的操作以获取解封密钥和根令牌。后续 Vault 实例重新启动仅需要使用解封密钥进行解封。
发出以下命令(假设 Bourne shell 语法):
export VAULT_SKIP_VERIFY=1
vault operator init -n 1 -t 1
第一个命令使vault命令暂时忽略尚未添加到系统信任存储库的公司证书的事实。它弥补了我们的自签名 CA 未添加到该存储库的事实。(对于生产使用,应添加这样的证书。)
第二个命令创建一个具有单个解封密钥的要求,要求一个解封密钥存在以解封。 (对于生产使用,一个实例将具有多个解封密钥,最多需要输入相同数量的密钥来解封。解封密钥应交付给公司内的密钥保管员。使用单个密钥可能被视为安全问题,因为这允许单个密钥保管员解封保险库。)
Vault 应该回复有关解封密钥和 root 令牌的信息,以及一些附加文本(实际的解封密钥和 root 令牌值与此处显示的值不同):
…
Unseal Key 1: I2xwcFQc892O0Nt2pBiRNlnkHzTUrWS+JybL39BjcOE=
Initial Root Token: s.vTvXeo3tPEYehfcd9WH7oUKz
…
将解封密钥和 root 令牌存储在安全位置。
解封 HashiCorp Vault 服务器。
使用此命令解封 Vault 服务器:
vault operator unseal
在提示输入解封密钥时,使用在 Vault 初始化期间先前获得的密钥。
Vault 应该生成指示设置完成并解封保险库的输出。
登录到 HashiCorp Vault 服务器并验证其状态。
准备登录为 root 所需的环境变量:
vault login s.vTvXeo3tPEYehfcd9WH7oUKz
在该命令中的令牌值中,用之前在 Vault 初始化期间获得的 root 令牌的内容替换。
验证 Vault 服务器状态:
vault status
输出应包含以下行(以及其他内容):
…
Initialized true
Sealed false
…
设置 HashiCorp Vault 身份验证和存储。
注意
在运行 Vault 实例时,描述的操作仅在第一次运行时需要。之后不需要重复。
启用 AppRole 身份验证方法并验证其是否在身份验证方法列表中:
vault auth enable approle
vault auth list
启用 Vault KeyValue 存储引擎:
vault secrets enable -version=1 kv
为与keyring_hashicorp插件一起使用设置一个角色(在一行上输入命令):
vault write auth/approle/role/mysql token_num_uses=0
token_ttl=20m token_max_ttl=30m secret_id_num_uses=0
添加一个 AppRole 安全策略。
注意
在运行 Vault 实例时,描述的操作仅在第一次运行时需要。之后不需要重复。
准备一个策略,以允许先前创建的角色访问适当的机密。创建一个名为mysql.hcl的新文件,内容如下:
path \”kv/mysql/*\” {
capabilities = [\”create\”, \”read\”, \”update\”, \”delete\”, \”list\”]
}
注意
在这个示例中,kv/mysql/可能需要根据您的本地安装政策和安全要求进行调整。如果需要,无论这些说明中的kv/mysql/出现在哪里,都要进行相同的调整。
将策略文件导入 Vault 服务器以创建名为mysql-policy的策略,然后将策略分配给新角色:
vault policy write mysql-policy mysql.hcl
vault write auth/approle/role/mysql policies=mysql-policy
获取新创建角色的 ID 并将其存储在安全位置:
vault read auth/approle/role/mysql/role-id
为角色生成一个秘密 ID,并将其存储在安全位置:
vault write -f auth/approle/role/mysql/secret-id
生成这些 AppRole 角色 ID 和密钥 ID 凭证后,它们预计会无限期保持有效。不需要再次生成它们,keyring_hashicorp插件可以配置它们以供持续使用。有关 AuthRole 身份验证的更多信息,请访问www.vaultproject.io/docs/auth/approle.html。
keyring_hashicorp 配置
插件库文件包含keyring_hashicorp插件和一个可加载的函数,keyring_hashicorp_update_config()。当插件初始化和终止时,它会自动加载和卸载该函数。无需手动加载和卸载该函数。
keyring_hashicorp插件支持以下表中显示的配置参数。要指定这些参数,请为相应的系统变量赋值。
配置参数系统变量必须HashiCorp 服务器 URLkeyring_hashicorp_server_url否AppRole 角色 IDkeyring_hashicorp_role_id是AppRole 密钥 IDkeyring_hashicorp_secret_id是存储路径keyring_hashicorp_store_path是授权路径keyring_hashicorp_auth_path否CA 证书文件路径keyring_hashicorp_ca_path否缓存控制keyring_hashicorp_caching否
为了在服务器启动过程中可用,必须使用–early-plugin-load选项加载keyring_hashicorp。如前表所示,还必须设置几个与插件相关的系统变量。例如,在服务器的my.cnf文件中使用以下行,根据需要调整.so后缀和文件位置:
[mysqld]
early-plugin-load=keyring_hashicorp.so
keyring_hashicorp_role_id=\’ee3b495c-d0c9-11e9-8881-8444c71c32aa\’
keyring_hashicorp_secret_id=\’0512af29-d0ca-11e9-95ee-0010e00dd718\’
keyring_hashicorp_store_path=\’/v1/kv/mysql\’
keyring_hashicorp_auth_path=\’/v1/auth/approle/login\’
注意
根据HashiCorp 文档,所有 API 路由都以协议版本为前缀(在前面的示例中可以看到为/v1/,在keyring_hashicorp_store_path和keyring_hashicorp_auth_path的值中)。如果 HashiCorp 开发新的协议版本,可能需要在配置中将/v1/更改为其他内容。
MySQL 服务器使用 AppRole 身份验证对 HashiCorp Vault 进行身份验证。成功的身份验证需要向 Vault 提供两个秘密,一个角色 ID 和一个秘密 ID,类似于用户名和密码的概念。要指定这两个 ID,将它们的值分配给keyring_hashicorp_role_id和keyring_hashicorp_secret_id系统变量。设置过程还会导致存储路径为/v1/kv/mysql,这个值应分配给keyring_hashicorp_commit_store_path。
在插件初始化时,keyring_hashicorp尝试使用配置数值连接到 HashiCorp Vault 服务器。如果连接成功,插件会将这些数值存储在相应的系统变量中,这些变量的名称中包含_commit_。例如,连接成功后,插件会将keyring_hashicorp_role_id和keyring_hashicorp_store_path的数值存储在keyring_hashicorp_commit_role_id和keyring_hashicorp_commit_store_path中。
可以通过keyring_hashicorp_update_config()函数在运行时重新配置:
使用SET语句将所需的新值分配给前表中显示的配置系统变量。这些分配本身对正在进行的插件操作没有影响。
调用keyring_hashicorp_update_config()函数会导致插件重新配置并使用新的变量值重新连接到 HashiCorp Vault 服务器。
如果连接成功,插件会将更新后的配置数值存储在相应的系统变量中,这些变量的名称中包含_commit_。
例如,如果已将 HashiCorp Vault 重新配置为监听端口 8201 而不是默认的 8200,则像这样重新配置keyring_hashicorp:
mysql> SET GLOBAL keyring_hashicorp_server_url = \’https://127.0.0.1:8201\’;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT keyring_hashicorp_update_config();
+————————————–+
| keyring_hashicorp_update_config() |
+————————————–+
| Configuration update was successful. |
+————————————–+
1 row in set (0.03 sec)
如果插件在初始化或重新配置期间无法连接到 HashiCorp Vault,并且没有现有连接,则对于字符串值变量,_commit_系统变量将设置为\’Not committed\’,对于布尔值变量,将设置为OFF。如果插件无法连接但存在现有连接,则该连接保持活动状态,并且_commit_变量反映用于它的值。
注意
如果在服务器启动时未设置必需的系统变量,或者发生其他插件初始化错误,初始化将失败。在这种情况下,您可以使用运行时重新配置过程来初始化插件,而无需重新启动服务器。
有关keyring_hashicorp插件特定系统变量和功能的其他信息,请参见 Section 8.4.4.19, “Keyring System Variables”和 Section 8.4.4.16, “Plugin-Specific Keyring Key-Management Functions”。
原文:dev.mysql.com/doc/refman/8.0/en/keyring-oci-component.html
8.4.4.11 使用 Oracle Cloud Infrastructure Vault 密钥环组件
注意
Oracle Cloud Infrastructure Vault 密钥环组件包含在 MySQL Enterprise Edition 中,这是一个商业产品。要了解更多关于商业产品的信息,请参见 www.mysql.com/products/。
component_keyring_oci 是与 Oracle Cloud Infrastructure Vault 进行后端存储通信的组件基础设施的一部分。没有任何密钥信息永久存储在 MySQL 服务器本地存储中。所有密钥都存储在 Oracle Cloud Infrastructure Vault 中,使得这个组件非常适合 Oracle Cloud Infrastructure MySQL 客户管理他们的 MySQL Enterprise Edition 密钥。
在 MySQL 8.0.24 中,MySQL Keyring 开始从插件过渡到使用组件基础设施。MySQL 8.0.31 中引入的 component_keyring_oci 是这一努力的延续。有关更多信息,请参见 密钥环组件与密钥环插件。
注意
一次只能启用一个密钥环组件或插件。启用多个密钥环组件或插件是不受支持的,结果可能不如预期。
要使用 component_keyring_oci 进行密钥库管理,您必须:
编写一个清单,告诉服务器加载 component_keyring_oci,如 Section 8.4.4.2, “密钥环组件安装” 中所述。
编写一个 component_keyring_oci 的配置文件,如此处所述。
在编写清单和配置文件之后,只要您指定相同的配置选项集来初始化密钥环组件,您就应该能够访问使用 keyring_oci 插件创建的密钥。component_keyring_oci 的内置向后兼容性简化了从密钥环插件迁移到组件的过程。
配置注意事项
验证组件安装
Vault 密钥环组件使用
配置注意事项
当初始化时,component_keyring_oci 会读取全局配置文件,或者全局配置文件与本地配置文件配对:
该组件尝试从安装组件库文件的目录(即服务器插件目录)读取其全局配置文件。
如果全局配置文件指示使用本地配置文件,则组件将尝试从数据目录读取其本地配置文件。
尽管全局和本地配置文件位于不同的目录中,但文件名在两个位置都是 component_keyring_oci.cnf。
如果不存在配置文件,则会出现错误。没有有效配置时,component_keyring_oci 无法初始化。
本地配置文件允许设置多个服务器实例以使用 component_keyring_oci,因此每个服务器实例的组件配置特定于给定的数据目录实例。这使得可以为每个实例使用不同的 Oracle Cloud Infrastructure 保险库来使用相同的密钥环组件。
假设您熟悉 Oracle Cloud Infrastructure 概念,但在设置资源以供 component_keyring_oci 使用时,以下文档可能会有所帮助:
保险库概述
所需密钥和 OCID
密钥管理
管理区段
管理保险库
管理秘密
component_keyring_oci 配置文件具有以下属性:
配置文件必须采用有效的 JSON 格式。
配置文件允许这些配置项:
\”read_local_config\”:此项仅允许在全局配置文件中。如果该项不存在,则组件仅使用全局配置文件。如果该项存在,则其值为 true 或 false,表示组件是否应从本地配置文件中读取配置信息。
如果全局配置文件中同时存在 \”read_local_config\” 项和其他项,则组件首先检查 \”read_local_config\” 项的值:
如果值为 false,组件将处理全局配置文件中的其他项,并忽略本地配置文件。
如果值为 true,组件将忽略全局配置文件中的其他项,并尝试读取本地配置文件。
“user”:component_keyring_oci 用于连接的 Oracle Cloud Infrastructure 用户的 OCID。在使用 component_keyring_oci 之前,用户帐户必须存在并被授予访问权限以使用配置的 Oracle Cloud Infrastructure 租户、区段和保险库资源。要从控制台获取用户 OCID,请使用 所需密钥和 OCID 中的说明。
此值为必填项。
“tenancy”: Oracle Cloud Infrastructure 租户的 OCID,component_keyring_oci用作 MySQL 区域的位置。在使用component_keyring_oci之前,如果租户不存在,则必须创建一个租户。要从控制台获取租户 OCID,请使用必需的密钥和 OCID中的说明。
此值为必填项。
“compartment”: 租户区域的 OCID,component_keyring_oci用作 MySQL 密钥的位置。在使用component_keyring_oci之前,如果 MySQL 区域或子区域不存在,则必须创建一个。此区域不应包含保险库密钥或保险库机密。它不应被除 MySQL Keyring 之外的系统使用。有关管理区域和获取 OCID 的信息,请参阅管理区域。
此值为必填项。
“virtual_vault”: Oracle Cloud Infrastructure Vault 的 OCID,component_keyring_oci用于加密操作。在使用component_keyring_oci之前,如果 MySQL 区域不存在,则必须在 MySQL 区域中创建一个新的保险库。(或者,您可以重用位于 MySQL 区域的父区域中的现有保险库。)区域用户只能看到并使用其各自区域中的密钥。有关创建保险库和获取保险库 OCID 的信息,请参阅管理保险库。
此值为必填项。
“encryption_endpoint”: Oracle Cloud Infrastructure 加密服务器的端点,component_keyring_oci用于为新密钥生成加密或编码信息(密文)。加密端点是与保险库相关的,Oracle Cloud Infrastructure 在创建保险库时分配它。要获取端点 OCID,请查看您的 keyring_oci 保险库的配置详细信息,使用管理保险库中的说明。
此值为必填项。
\”management_endpoint\”: Oracle Cloud Infrastructure 密钥管理服务器的端点,component_keyring_oci用于列出现有密钥的端点。密钥管理端点是与保险库相关的,Oracle Cloud Infrastructure 在创建保险库时分配它。要获取端点 OCID,请查看您的 keyring_oci 保险库的配置详细信息,使用管理保险库中的说明。
此值为必填项。
“vaults_endpoint”: Oracle Cloud Infrastructure 保险库服务器的终端点,component_keyring_oci用于获取秘密的值。保险库终端点是特定于保险库的,Oracle Cloud Infrastructure 在创建保险库时分配它。要获取终端点 OCID,请查看您的 keyring_oci 保险库的配置详细信息,使用管理保险库中的说明。
此值为必填项。
“secrets_endpoint”: Oracle Cloud Infrastructure 秘密服务器的终端点,component_keyring_oci用于列出、创建和撤销秘密。秘密终端点是特定于保险库的,Oracle Cloud Infrastructure 在创建保险库时分配它。要获取终端点 OCID,请查看您的 keyring_oci 保险库的配置详细信息,使用管理保险库中的说明。
此值为必填项。
“master_key”: Oracle Cloud Infrastructure 主加密密钥的 OCID,component_keyring_oci用于加密秘密。在使用component_keyring_oci之前,如果不存在,您必须为 Oracle Cloud Infrastructure 区段创建一个加密密钥。为生成的密钥提供一个特定于 MySQL 的名称,并且不要将其用于其他目的。有关密钥创建的信息,请参阅管理密钥。
此值为必填项。
“key_file”: 包含 RSA 私钥的文件路径名,component_keyring_oci用于 Oracle Cloud Infrastructure 身份验证。您还必须使用控制台上传相应的 RSA 公钥。控制台显示密钥指纹值,您可以使用它来设置\”key_fingerprint\”值。有关生成和上传 API 密钥的信息,请参阅必需的密钥和 OCIDs。
此值为必填项。
“key_fingerprint”: RSA 私钥的指纹,component_keyring_oci用于 Oracle Cloud Infrastructure 身份验证。在创建 API 密钥时获取密钥指纹,请执行此命令:
openssl rsa -pubout -outform DER -in ~/.oci/oci_api_key.pem | openssl md5 -c
或者,从控制台获取指纹,当您上传 RSA 公钥时,控制台会自动显示指纹。有关获取密钥指纹的信息,请参阅必需的密钥和 OCID。
此值为必填项。
“ca_certificate”:component_keyring_oci组件用于 Oracle Cloud Infrastructure 证书验证的 CA 证书捆绑文件的路径名。该文件包含一个或多个用于对等验证的证书。如果未指定文件,则使用系统上安装的默认 CA 捆绑。如果值设置为disabled(区分大小写),component_keyring_oci不执行证书验证。
鉴于上述配置文件属性,要配置component_keyring_oci,请在安装component_keyring_oci库文件的目录中创建一个名为component_keyring_oci.cnf的全局配置文件,并可选地在数据目录中创建一个名为component_keyring_oci.cnf的本地配置文件。
验证组件安装
执行任何特定于组件的配置后,启动服务器。通过检查性能模式keyring_component_status表来验证组件安装:
mysql> SELECT * FROM performance_schema.keyring_component_status;
+———————+——————————————————————–+
| STATUS_KEY | STATUS_VALUE |
+———————+——————————————————————–+
| Component_name | component_keyring_oci |
| Author | Oracle Corporation |
| License | PROPRIETARY |
| Implementation_name | component_keyring_oci |
| Version | 1.0 |
| Component_status | Active |
| user | ocid1.user.oc1..aaaaaaaasqly<…> |
| tenancy | ocid1.tenancy.oc1..aaaaaaaai<…> |
| compartment | ocid1.compartment.oc1..aaaaaaaah2swh<…> |
| virtual_vault | ocid1.vault.oc1.iad.bbo5xyzkaaeuk.abuwcljtmvxp4r<…> |
| master_key | ocid1.key.oc1.iad.bbo5xyzkaaeuk.abuwcljrbsrewgap<…> |
| encryption_endpoint | bbo5xyzkaaeuk-crypto.kms.us-<…> |
| management_endpoint | bbo5xyzkaaeuk-management.kms.us-<…> |
| vaults_endpoint | vaults.us-<…> |
| secrets_endpoint | secrets.vaults.us-<…> |
| key_file | ~/.oci/oci_api_key.pem |
| key_fingerprint | ca:7c:e1:fa:86:b6:40:af:39:d6<…> |
| ca_certificate | disabled |
+———————+——————————————————————–+
Component_status值为Active表示组件初始化成功。
如果组件无法加载,服务器启动将失败。检查服务器错误日志以获取诊断消息。如果组件加载但由于配置问题而无法初始化,则服务器启动,但Component_status值为Disabled。检查服务器错误日志,纠正配置问题,并使用ALTER INSTANCE RELOAD KEYRING语句重新加载配置。
可以查询 MySQL 服务器以获取现有密钥列表。要查看存在哪些密钥,请检查性能模式keyring_keys表。
mysql> SELECT * FROM performance_schema.keyring_keys;
+—————————–+————–+—————-+
| KEY_ID | KEY_OWNER | BACKEND_KEY_ID |
+—————————–+————–+—————-+
| audit_log-20210322T130749-1 | | |
| MyKey | me@localhost | |
| YourKey | me@localhost | |
+—————————–+————–+—————-+
保险库密钥环组件用法
component_keyring_oci支持组成标准 MySQL 密钥环服务接口的函数。这些函数执行的密钥环操作可在两个级别访问:
SQL 接口:在 SQL 语句中,调用第 8.4.4.15 节,“通用密钥环密钥管理函数”中描述的函数。
C 接口:在 C 语言代码中,调用第 7.6.9.2 节,“密钥环服务”中描述的密钥环服务函数。
示例(使用 SQL 接口):
SELECT keyring_key_generate(\’MyKey\’, \’AES\’, 32);
SELECT keyring_key_remove(\’MyKey\’);
有关component_keyring_oci允许的密钥值特性的信息,请参见第 8.4.4.13 节,“支持的密钥类型和长度”。
原文:dev.mysql.com/doc/refman/8.0/en/keyring-oci-plugin.html
8.4.4.12 使用 Oracle Cloud 基础设施 Vault Keyring 插件
注意
keyring_oci 插件是包含在 MySQL 企业版中的扩展,这是一个商业产品。要了解更多关于商业产品的信息,请参阅 www.mysql.com/products/。
keyring_oci 插件是一个与 Oracle Cloud 基础设施 Vault 通信的 keyring 插件,用于后端存储。没有密钥信息永久存储在 MySQL 服务器本地存储中。所有密钥都存储在 Oracle Cloud 基础设施 Vault 中,使得这个插件非常适合 Oracle Cloud 基础设施 MySQL 客户管理他们的 MySQL 企业版密钥。
截至 MySQL 8.0.31,此插件已被弃用,并可能在将来的 MySQL 版本中被移除。相反,考虑使用 component_keyring_oci 组件来存储 keyring 数据(请参阅 第 8.4.4.11 节,“使用 Oracle Cloud 基础设施 Vault Keyring 组件”)。
keyring_oci 插件支持组成标准 MySQL Keyring 服务接口的函数。这些函数执行的 keyring 操作可在两个级别访问:
SQL 接口:在 SQL 语句中,调用 第 8.4.4.15 节,“通用 Keyring 密钥管理函数” 中描述的函数。
C 接口:在 C 语言代码中,调用 第 7.6.9.2 节,“Keyring 服务” 中描述的 keyring 服务函数。
示例(使用 SQL 接口):
SELECT keyring_key_generate(\’MyKey\’, \’AES\’, 32);
SELECT keyring_key_remove(\’MyKey\’);
有关 keyring_oci 允许的密钥值特性的信息,请参阅 第 8.4.4.13 节,“支持的 Keyring 密钥类型和长度”。
要安装 keyring_oci,请使用 第 8.4.4.3 节,“Keyring 插件安装” 中的通用说明,以及此处找到的特定于 keyring_oci 的配置信息。插件特定的配置涉及设置多个系统变量以指示 Oracle Cloud 基础设施资源的名称或值。
假设您熟悉 Oracle Cloud 基础设施概念,但在设置资源以供 keyring_oci 插件使用时,以下文档可能会有所帮助:
Vault 概述
资源标识符
必需的密钥和 OCID
管理密钥
管理区段
管理保险柜
管理机密
keyring_oci 插件支持下表中显示的配置参数。要指定这些参数,请为相应的系统变量赋值。
配置参数系统变量强制用户 OCIDkeyring_oci_user是租户 OCIDkeyring_oci_tenancy是区段 OCIDkeyring_oci_compartment是保险柜 OCIDkeyring_oci_virtual_vault是主密钥 OCIDkeyring_oci_master_key是加密服务器端点keyring_oci_encryption_endpoint是密钥管理服务器端点keyring_oci_management_endpoint是保险柜服务器端点keyring_oci_vaults_endpoint是机密服务器端点keyring_oci_secrets_endpoint是RSA 私钥文件keyring_oci_key_file是RSA 私钥指纹keyring_oci_key_fingerprint是CA 证书捆绑文件keyring_oci_ca_certificate否配置参数系统变量强制
为了在服务器启动过程中可用,必须使用 –early-plugin-load 选项加载 keyring_oci。如前表所示,几个与插件相关的系统变量是强制性的,也必须设置:
Oracle Cloud 基础设施广泛使用 Oracle Cloud ID(OCID)来指定资源,而且几个 keyring_oci 参数指定要使用的资源的 OCID 值。因此,在使用 keyring_oci 插件之前,必须满足这些先决条件:
必须存在用于连接到 Oracle Cloud Infrastructure 的用户。如有必要,请创建用户并将用户 OCID 分配给 keyring_oci_user 系统变量。
必须存在要使用的 Oracle Cloud Infrastructure 租户,以及租户内的 MySQL 专用区和专用区内的保险库。如有必要,请创建这些资源,并确保用户已启用以使用它们。将租户、专用区和保险库的 OCID 分配给 keyring_oci_tenancy、keyring_oci_compartment 和 keyring_oci_virtual_vault 系统变量。
必须存在用于加密的主密钥。如有必要,请创建它并将其 OCID 分配给 keyring_oci_master_key 系统变量。
必须指定几个服务器端点。这些端点是特定于保险库的,Oracle Cloud Infrastructure 在创建保险库时分配它们。从保险库详细信息页面获取它们的值,并将其分配给 keyring_oci_encryption_endpoint、keyring_oci_management_endpoint、keyring_oci_vaults_endpoint 和 keyring_oci_secrets_endpoint 系统变量。
Oracle Cloud Infrastructure API 使用 RSA 公钥/私钥对进行身份验证。要创建此密钥对并获取密钥指纹,请使用 必需的密钥和 OCID 中的说明。将私钥文件名和密钥指纹分配给 keyring_oci_key_file 和 keyring_oci_key_fingerprint 系统变量。
除了必填的系统变量外,keyring_oci_ca_certificate 可以选择设置以指定用于对等身份验证的证书颁发机构(CA)证书包文件。
重要提示
如果从 Oracle Cloud Infrastructure 控制台复制参数,则复制的值可能包含初始的 https:// 部分。在设置相应的 keyring_oci 系统变量时,请省略该部分。
例如,要加载和配置 keyring_oci,请在服务器的 my.cnf 文件中使用以下行(根据需要调整平台的 .so 后缀和文件位置):
[mysqld]
early-plugin-load=keyring_oci.so
keyring_oci_user=ocid1.user.oc1..*longAlphaNumericString*
keyring_oci_tenancy=ocid1.tenancy.oc1..*longAlphaNumericString*
keyring_oci_compartment=ocid1.compartment.oc1..*longAlphaNumericString*
keyring_oci_virtual_vault=ocid1.vault.oc1.iad.*shortAlphaNumericString*.*longAlphaNumericString*
keyring_oci_master_key=ocid1.key.oc1.iad.*shortAlphaNumericString*.*longAlphaNumericString*
keyring_oci_encryption_endpoint=*shortAlphaNumericString*-crypto.kms.us-ashburn-1.oraclecloud.com
keyring_oci_management_endpoint=*shortAlphaNumericString*-management.kms.us-ashburn-1.oraclecloud.com
keyring_oci_vaults_endpoint=vaults.us-ashburn-1.oci.oraclecloud.com
keyring_oci_secrets_endpoint=secrets.vaults.us-ashburn-1.oci.oraclecloud.com
keyring_oci_key_file=*file_name*
keyring_oci_key_fingerprint=12:34:56:78:90:ab:cd:ef:12:34:56:78:90:ab:cd:ef
有关 keyring_oci 插件特定系统变量的更多信息,请参见 第 8.4.4.19 节,“Keyring 系统变量”。
keyring_oci 插件不支持运行时重新配置,其系统变量均无法在运行时修改。要更改配置参数,请执行以下操作:
修改 my.cnf 文件中的参数设置,或者对于持久化到 mysqld-auto.conf 的参数,使用 SET PERSIST_ONLY。
重新启动服务器。
原文:dev.mysql.com/doc/refman/8.0/en/keyring-key-types.html
8.4.4.13 支持的关键环关键类型和长度
MySQL 关键环支持不同类型(加密算法)和长度的关键:
可用的关键类型取决于安装了哪个关键环插件。
允许的关键长度受多个因素影响:
一般关键环可加载函数接口限制(用于使用第 8.4.4.15 节,“通用关键环关键管理函数”中描述的关键环函数之一管理的关键),或来自后端实现的限制。这些长度限制可以根据关键操作类型而变化。
除了一般限制外,单独的关键环插件可能对每种关键类型的关键长度施加限制。
表 8.32,“一般关键环关键长度限制”显示了一般关键长度限制。(keyring_aws的较低限制由 AWS KMS 接口而不是关键环函数强加。)对于关键环插件,表 8.33,“关键环插件关键类型和长度”显示了每个关键环插件允许的关键类型,以及任何插件特定的关键长度限制。对于大多数关键环组件,一般关键长度限制适用,没有关键类型限制。
注意
component_keyring_oci(类似于keyring_oci插件)只能生成大小为 16, 24 或 32 字节的AES类型的关键。
表 8.32 一般关键环关键长度限制
关键操作最大关键长度生成关键16,384 字节(MySQL 8.0.18 之前为 2,048);keyring_aws为 1,024存储关键16,384 字节(MySQL 8.0.18 之前为 2,048);keyring_aws为 4,096获取关键16,384 字节(MySQL 8.0.18 之前为 2,048);keyring_aws为 4,096
表 8.33 关键环插件关键类型和长度
插件名称允许的关键类型插件特定长度限制keyring_awsAES“SECRET16, 24 或 32 字节 Nonekeyring_encrypted_fileAES“DSA“RSA“SECRETNoneNoneNoneNonekeyring_fileAES“DSA“RSA“SECRETNoneNoneNoneNonekeyring_hashicorpAES“DSA“RSA“SECRETNoneNoneNoneNonekeyring_ociAES16, 24 或 32 字节keyring_okvAES“SECRET16, 24 或 32 字节 None
SECRET关键类型,自 MySQL 8.0.19 起可用,旨在使用 MySQL 关键环对敏感数据进行通用存储,并受大多数关键环组件和关键环插件支持。关键环在存储和检索时将SECRET数据加密和解密为字节流。
涉及SECRET关键类型的示例关键环操作:
SELECT keyring_key_generate(\’MySecret1\’, \’SECRET\’, 20);
SELECT keyring_key_remove(\’MySecret1\’);
SELECT keyring_key_store(\’MySecret2\’, \’SECRET\’, \’MySecretData\’);
SELECT keyring_key_fetch(\’MySecret2\’);
SELECT keyring_key_length_fetch(\’MySecret2\’);
SELECT keyring_key_type_fetch(\’MySecret2\’);
SELECT keyring_key_remove(\’MySecret2\’);
原文:dev.mysql.com/doc/refman/8.0/en/keyring-key-migration.html
8.4.4.14 在密钥环密钥库之间迁移密钥
密钥环迁移将密钥从一个密钥库复制到另一个,使得 DBA 可以将 MySQL 安装切换到不同的密钥库。成功的迁移操作会产生以下结果:
目标密钥库包含迁移前具有的密钥,以及源密钥库中的密钥。
在迁移前后,源密钥库保持不变(因为密钥是复制而不是移动)。
如果要复制的密钥已经存在于目标密钥库中,则会发生错误,并且目标密钥库将恢复到迁移前的状态。
密钥环使用密钥环组件和密钥环插件管理密钥库。这与迁移策略有关,因为源密钥库和目标密钥库的管理方式决定了是否可能进行特定类型的密钥迁移以及执行该操作的程序:
从一个密钥环插件迁移到另一个:MySQL 服务器具有提供此功能的操作模式。
从密钥环插件迁移到密钥环组件:MySQL 服务器在 MySQL 8.0.24 版本中提供了此功能的操作模式。
从一个密钥环组件迁移到另一个:mysql_migrate_keyring 实用程序提供了这种能力。mysql_migrate_keyring 自 MySQL 8.0.24 版本起可用。
从密钥环组件迁移到密钥环插件:没有提供此功能。
以下部分讨论了离线和在线迁移的特点,并描述了如何执行迁移。
离线和在线密钥迁移
使用迁移服务器进行密钥迁移
使用 mysql_migrate_keyring 实用程序进行密钥迁移
涉及多个运行服务器的密钥迁移
离线和在线密钥迁移
密钥迁移可以是离线或在线的:
离线迁移:用于确保本地主机上没有运行中的服务器使用源或目标密钥库时使用。在这种情况下,迁移操作可以将密钥从源密钥库复制到目标密钥库,而在操作期间不会发生运行中服务器修改密钥库内容的可能性。
在线迁移:用于当本地主机上运行的服务器正在使用源密钥库时。在这种情况下,必须小心防止服务器在迁移过程中更新密钥库。这涉及连接到运行的服务器并指示其暂停密钥环操作,以便可以安全地从源密钥库复制密钥到目标位置。当密钥复制完成后,允许运行的服务器恢复密钥环操作。
当计划进行密钥迁移时,请使用以下要点来决定是离线还是在线:
不要执行涉及正在运行的服务器使用的密钥库的离线迁移。
在线迁移过程中暂停密钥环操作是通过连接到运行的服务器并将其全局 keyring_operations 系统变量设置为 OFF 来实现的,然后在复制密钥之前设置为 ON。这有几个影响:
keyring_operations 是在 MySQL 5.7.21 中引入的,因此只有运行的服务器是 MySQL 5.7.21 或更高版本时才能进行在线迁移。如果运行的服务器较旧,则必须停止它,执行离线迁移,然后重新启动。所有其他地方提到的与 keyring_operations 相关的迁移说明都受到此条件的约束。
用于连接到运行的服务器的帐户必须具有修改 keyring_operations 所需的特权。这些特权是 ENCRYPTION_KEY_ADMIN 以及 SYSTEM_VARIABLES_ADMIN 或已弃用的 SUPER 特权。
如果在线迁移操作异常退出(例如,被强制终止),则可能导致 keyring_operations 在运行的服务器上保持禁用,导致无法执行密钥环操作。在这种情况下,可能需要连接到运行的服务器并使用以下语句手动启用 keyring_operations:
SET GLOBAL keyring_operations = ON;
在线密钥迁移允许在单个运行的服务器上暂停密钥环操作。如果多个运行的服务器正在使用涉及的密钥库,则使用在 涉及多个运行服务器的密钥迁移 中描述的过程。
使用迁移服务器进行密钥迁移
注意
仅当运行的服务器允许套接字连接或使用 TLS 的 TCP/IP 连接时,才支持使用迁移服务器进行在线密钥迁移;例如,当服务器在 Windows 平台上运行并且仅允许共享内存连接时,不支持此功能。
如果以支持密钥迁移的特殊操作模式调用,则 MySQL 服务器将成为迁移服务器。迁移服务器不接受客户端连接。相反,它只运行足够长的时间来迁移密钥,然后退出。迁移服务器将错误报告给控制台(标准错误输出)。
迁移服务器支持以下迁移类型:
从一个密钥环插件迁移到另一个。
从密钥环插件迁移到密钥环组件。此功能自 MySQL 8.0.24 版本开始提供。较旧的服务器仅支持从一个密钥环插件迁移到另一个,此时这些指令中涉及密钥环组件的部分不适用。
迁移服务器不支持从一个密钥环组件迁移到另一个密钥环组件。对于这种类型的迁移,请参阅使用 mysql_migrate_keyring 实用程序进行密钥迁移。
要使用迁移服务器执行密钥迁移操作,请确定需要的密钥迁移选项,以指定涉及哪些密钥环插件或组件,以及迁移是离线还是在线的:
要指示源密钥环插件和目标密钥环插件或组件,请指定这些选项:
–keyring-migration-source: 管理要迁移的密钥的源密钥环插件。
–keyring-migration-destination: 要将迁移的密钥复制到的目标密钥环插件或组件。
–keyring-migration-to-component: 如果目标是密钥环组件而不是密钥环插件,则需要此选项。
–keyring-migration-source 和 –keyring-migration-destination 选项表示服务器应该运行在密钥迁移模式下。对于密钥迁移操作,这两个选项都是必需的。每个插件或组件都使用其库文件的名称指定,包括任何特定于平台的扩展,如.so或.dll。源和目标必须不同,并且迁移服务器必须支持它们两者。
对于离线迁移,不需要额外的密钥迁移选项。
对于在线迁移,某个运行服务器当前正在使用源或目标密钥库。要调用迁移服务器,请指定额外的密钥迁移选项,指示如何连接到运行服务器。这是必要的,以便迁移服务器可以连接到运行服务器并告诉其在迁移操作期间暂停密钥环使用。
使用以下任何选项表示在线迁移:
–keyring-migration-host:运行服务器所在的主机。这始终是本地主机,因为迁移服务器只能在本地插件和组件管理的密钥库之间迁移密钥。
–keyring-migration-user,–keyring-migration-password:用于连接到运行服务器的帐户凭据。
–keyring-migration-port:对于 TCP/IP 连接,连接到运行服务器的端口号。
–keyring-migration-socket:对于 Unix 套接字文件或 Windows 命名管道连接,连接到运行服务器的套接字文件或命名管道。
有关密钥迁移选项的更多详细信息,请参见第 8.4.4.18 节,“密钥环命令选项”。
使用指示源和目标密钥库以及迁移是离线还是在线的密钥迁移选项启动迁移服务器,可能还有其他选项。请牢记以下考虑事项:
可能需要其他服务器选项,例如两个密钥环插件的配置参数。例如,如果keyring_file是源或目标,则必须设置keyring_file_data系统变量,如果密钥环数据文件位置不是默认位置。还可能需要其他非密钥环选项。指定这些选项的一种方法是使用–defaults-file命名包含所需选项的选项文件。
迁移服务器期望路径名选项值为完整路径。相对路径名可能不会按您的预期解析。
调用服务器以密钥迁移模式启动的用户不得是root操作系统用户,除非使用–user选项指定一个非root用户名来以该用户身份运行服务器。
以密钥迁移模式运行的服务器的用户必须具有读取和写入任何本地密钥环文件的权限,例如基于文件的插件的数据文件。
如果您以不同于通常用于运行 MySQL 的系统帐户调用迁移服务器,则可能会创建对服务器在正常操作期间无法访问的密钥环目录或文件。假设mysqld通常以mysql操作系统用户运行,但您以isabel登录时调用迁移服务器。迁移服务器创建的任何新目录或文件都归isabel所有。当以mysql操作系统用户运行的服务器尝试访问由isabel拥有的文件系统对象时,后续启动将失败。
为避免此问题,请将迁移服务器作为root操作系统用户启动,并提供–user=*user_name*选项,其中*user_name*是通常用于运行 MySQL 的系统帐户。或者,在迁移后,使用chown、chmod或类似命令检查与密钥环相关的文件系统对象,并根据需要更改其所有权和权限,以便运行服务器可以访问这些对象。
离线迁移两个密钥环插件之间的示例命令行(在一行上输入命令):
mysqld –defaults-file=/usr/local/mysql/etc/my.cnf
–keyring-migration-source=keyring_file.so
–keyring-migration-destination=keyring_encrypted_file.so
–keyring_encrypted_file_password=*password*
两个密钥环插件之间的在线迁移示例命令行:
mysqld –defaults-file=/usr/local/mysql/etc/my.cnf
–keyring-migration-source=keyring_file.so
–keyring-migration-destination=keyring_encrypted_file.so
–keyring_encrypted_file_password=*password*
–keyring-migration-host=127.0.0.1
–keyring-migration-user=root
–keyring-migration-password=*root_password*
若要执行将目标设置为密钥环组件而不是密钥环插件的迁移,请指定–keyring-migration-to-component选项,并将组件命名为–keyring-migration-destination选项的值。
从密钥环插件迁移到密钥环组件的离线迁移示例命令行:
mysqld –defaults-file=/usr/local/mysql/etc/my.cnf
–keyring-migration-to-component
–keyring-migration-source=keyring_file.so
–keyring-migration-destination=component_keyring_encrypted_file.so
请注意,在这种情况下,未指定keyring_encrypted_file_password值。组件数据文件的密码列在组件配置文件中。
从密钥环插件迁移到密钥环组件的在线迁移示例命令行:
mysqld –defaults-file=/usr/local/mysql/etc/my.cnf
–keyring-migration-to-component
–keyring-migration-source=keyring_file.so
–keyring-migration-destination=component_keyring_encrypted_file.so
–keyring-migration-host=127.0.0.1
–keyring-migration-user=root
–keyring-migration-password=*root_password*
密钥迁移服务器执行以下迁移操作:
(仅在线迁移)使用连接选项连接到运行中的服务器。
(仅在线迁移)在运行中的服务器上禁用keyring_operations。
加载源和目标密钥环插件/组件库。
将密钥从源密钥库复制到目标密钥库。
卸载源和目标密钥环插件/组件库。
(仅在线迁移)在运行中的服务器上启用keyring_operations。
(仅在线迁移)断开与运行中的服务器的连接。
如果在密钥迁移过程中发生错误,则目标密钥库将恢复到迁移前的状态。
成功进行在线密钥迁移操作后,可能需要重新启动运行中的服务器:
如果运行的服务器在迁移前使用源密钥库,并且在迁移后应继续使用它,则在迁移后无需重新启动。
如果运行的服务器在迁移前使用目标密钥库,并且在迁移后应继续使用它,则应在迁移后重新启动以加载所有迁移到目标密钥库中的密钥。
如果运行的服务器在迁移前使用源密钥库,但在迁移后应使用目标密钥库,则必须重新配置为使用目标密钥库并重新启动。在这种情况下,请注意,尽管在迁移过程中运行的服务器暂停修改源密钥库,但在迁移和随后的重新启动之间的间隔期间不会暂停。应注意在此间隔期间服务器不要修改源密钥库,因为这样的任何更改将不会反映在目标密钥库中。
使用 mysql_migrate_keyring 实用程序进行密钥迁移
mysql_migrate_keyring 实用程序将密钥从一个密钥环组件迁移到另一个。它不支持涉及密钥环插件的迁移。对于这种类型的迁移,请使用在密钥迁移模式下运行的 MySQL 服务器;参见使用迁移服务器进行密钥迁移。
使用mysql_migrate_keyring执行密钥迁移操作时,确定所需的密钥迁移选项,以指定涉及哪些密钥环组件,以及迁移是离线还是在线的:
要指示源和目标密钥环组件及其位置,请指定以下选项:
–source-keyring:管理要迁移的密钥的源密钥环组件。
–destination-keyring:要将迁移的密钥复制到的目标密钥环组件。
–component-dir:包含密钥环组件库文件的目录。这通常是本地 MySQL 服务器的plugin_dir系统变量的值。
所有三个选项都是必需的。每个密钥库组件名称都是一个组件库文件名,不带任何平台特定的扩展名,如.so或.dll。例如,要使用库文件为component_keyring_file.so的组件,请将选项指定为–source-keyring=component_keyring_file。源和目标必须不同,并且mysql_migrate_keyring必须同时支持它们。
对于离线迁移,不需要额外的选项。
对于在线迁移,某个正在运行的服务器当前正在使用源或目标密钥库。在这种情况下,请指定–online-migration选项表示在线迁移。此外,请指定连接选项,指示如何连接到运行的服务器,以便mysql_migrate_keyring可以连接到它并告诉它在迁移操作期间暂停密钥环使用。
–online-migration选项通常与这些连接选项一起使用:
–host:运行服务器所在的主机。这始终是本地主机,因为mysql_migrate_keyring只能在本地组件管理的密钥库之间迁移密钥。
–user、–password:用于连接到运行服务器的帐户凭据。
–port:对于 TCP/IP 连接,在运行服务器上连接的端口号。
–socket:对于 Unix 套接字文件或 Windows 命名管道连接,在运行服务器上连接的套接字文件或命名管道。
要查看所有可用选项的描述,请参阅 Section 6.6.8, “mysql_migrate_keyring — Keyring Key Migration Utility”。
启动mysql_migrate_keyring时,需要指定源和目标密钥库以及迁移是离线还是在线,可能还有其他选项。请记住以下几点:
调用mysql_migrate_keyring的用户不能是root操作系统用户。
调用mysql_migrate_keyring的用户必须具有读取和写入任何本地密钥环文件的权限,例如基于文件的插件的数据文件。
如果您以不同于通常用于运行 MySQL 的系统帐户调用mysql_migrate_keyring,可能会创建对运行服务器在正常操作期间无法访问的密钥环目录或文件。假设mysqld通常以mysql操作系统用户身份运行,但您在isabel登录时调用mysql_migrate_keyring。mysql_migrate_keyring创建的任何新目录或文件都归isabel所有。当以mysql操作系统用户身份运行的服务器尝试访问由isabel拥有的文件系统对象时,随后的启动将失败。
为避免此问题,请以mysql操作系统用户的身份调用mysql_migrate_keyring。或者,在迁移后,检查与密钥环相关的文件系统对象,并根据需要使用chown、chmod或类似命令更改它们的所有权和权限,以便运行服务器可以访问这些对象。
假设您想要从component_keyring_file迁移密钥到component_keyring_encrypted_file,并且本地服务器将其密钥环组件库文件存储在/usr/local/mysql/lib/plugin中。
如果没有运行中的服务器正在使用密钥环,允许进行离线迁移。像这样调用mysql_migrate_keyring(在一行中输入命令):
mysql_migrate_keyring
–component-dir=/usr/local/mysql/lib/plugin
–source-keyring=component_keyring_file
–destination-keyring=component_keyring_encrypted_file
如果运行中的服务器正在使用密钥环,则必须执行在线迁移。在这种情况下,必须提供–online-migration选项,以及指定要连接的服务器和要使用的 MySQL 帐户所需的任何连接选项。
以下命令执行在线迁移。它使用 TCP/IP 连接和admin帐户连接到本地服务器。命令提示输入密码,您应在提示时输入密码:
mysql_migrate_keyring
–component-dir=/usr/local/mysql/lib/plugin
–source-keyring=component_keyring_file
–destination-keyring=component_keyring_encrypted_file
–online-migration –host=127.0.0.1 –user=admin –password
mysql_migrate_keyring执行迁移操作如下:
(仅限在线迁移)使用连接选项连接到运行中的服务器。
(仅限在线迁移)在运行中的服务器上禁用keyring_operations。
加载源和目标密钥库的密钥环组件库。
将密钥从源密钥库复制到目标密钥库。
卸载源和目标密钥库的密钥环组件库。
(仅限在线迁移)在运行中的服务器上启用keyring_operations。
(仅限在线迁移)断开与运行中的服务器的连接。
如果在密钥迁移过程中发生错误,则目标密钥库将恢复到迁移前的状态。
在成功的在线密钥迁移操作之后,运行中的服务器可能需要重新启动:
如果运行中的服务器在迁移前使用源密钥库,并且在迁移后应继续使用它,则在迁移后无需重新启动。
如果在迁移前运行中的服务器使用目标密钥库,并且在迁移后应继续使用它,则应在迁移后重新启动以加载所有迁移到目标密钥库中的密钥。
如果在迁移前运行中的服务器使用源密钥库,但在迁移后应使用目标密钥库,则必须重新配置以使用目标密钥库并重新启动。在这种情况下,请注意,尽管在迁移过程中暂停了运行中的服务器对源密钥库的修改,但在迁移和随后的重新启动之间的间隔期间,服务器并未暂停。应注意确保服务器在此间隔期间不修改源密钥库,因为这些更改不会反映在目标密钥库中。
涉及多个运行中的服务器的密钥迁移
在线密钥迁移允许暂停单个运行中的服务器上的密钥环操作。如果多个运行中的服务器正在使用涉及的密钥库,则使用以下过程执行迁移:
手动连接到每个运行中的服务器,并设置keyring_operations=OFF。这确保没有运行中的服务器正在使用源密钥库或目标密钥库,并满足离线迁移所需的条件。
使用迁移服务器或mysql_migrate_keyring为每个暂停的服务器执行离线密钥迁移。
手动连接到每个运行中的服务器,并设置keyring_operations=ON。
所有运行中的服务器必须支持keyring_operations系统变量。任何不支持的服务器在迁移前必须停止,并在迁移后重新启动。
#以上关于MySQL8 中文参考(二十九)的相关内容来源网络仅供参考,相关信息请以官方公告为准!
原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/91960.html