在 MySQL 8.0.30 之前的版本中,MySQL Enterprise Encryption 提供的函数通过创建单个函数来安装,基于 openssl_udf
共享库。从 MySQL 8.0.30 开始,这些函数由 MySQL 组件 component_enterprise_encryption
提供,安装组件将安装所有函数。从该版本开始,openssl_udf
共享库中的函数已弃用,您应该升级到组件。
从 MySQL 8.0.30 开始,MySQL Enterprise Encryption 的函数由 MySQL 组件 component_enterprise_encryption
提供,而不是从 openssl_udf
共享库安装的。如果您从早期版本升级到 MySQL 8.0.30,其中您使用了 MySQL Enterprise Encryption,创建的函数将保持可用并受到支持。但是,这些遗留函数从该版本开始弃用,建议您安装组件。组件函数是向后兼容的。有关升级信息,请参阅 升级 MySQL Enterprise Encryption。
如果您升级,安装组件之前,卸载遗留函数使用 DROP FUNCTION
语句:
DROP FUNCTION asymmetric_decrypt;
DROP FUNCTION asymmetric_derive;
DROP FUNCTION asymmetric_encrypt;
DROP FUNCTION asymmetric_sign;
DROP FUNCTION asymmetric_verify;
DROP FUNCTION create_asymmetric_priv_key;
DROP FUNCTION create_asymmetric_pub_key;
DROP FUNCTION create_dh_parameters;
DROP FUNCTION create_digest;
函数名称必须以小写形式指定。语句需要 DROP
权限 for the mysql
数据库。
要安装组件,发出 INSTALL COMPONENT
语句:
INSTALL COMPONENT "file://component_enterprise_encryption";
INSTALL COMPONENT
需要 INSERT
权限 for the mysql.component
系统表,因为它将添加一行到该表以注册组件。要验证组件是否已安装,发出:
SELECT * FROM mysql.component;
在 mysql.component
中列出的组件将由加载器服务在启动序列中加载。
如果您需要卸载组件,发出 UNINSTALL COMPONENT
语句:
UNINSTALL COMPONENT "file://component_enterprise_encryption";
有关详细信息,请参阅 第 7.5.1 节,“安装和卸载组件”。
安装组件将安装所有函数,因此您不需要使用 CREATE FUNCTION
语句创建函数,如同在 MySQL 8.0.30 之前那样。卸载组件将卸载所有函数。
当您安装了组件,如果您想让组件函数支持解密和验证来自早期版本的内容,请将组件的系统变量 enterprise_encryption.rsa_support_legacy_padding
设置为 ON
。此外,如果您想更改 RSA 密钥的最大长度,请使用组件的系统变量 enterprise_encryption.maximum_rsa_key_size
设置适当的最大值。有关配置信息,请参阅 第 8.6.2 节,“配置 MySQL Enterprise Encryption”。
在 MySQL 8.0.29 之前,MySQL Enterprise Encryption 函数位于插件目录(由 plugin_dir
系统变量命名的目录)中的可加载函数库文件中。函数库的基本名称是 openssl_udf
,后缀取决于平台。例如,在 Linux 或 Windows 上的文件名分别是 openssl_udf.so
或 openssl_udf.dll
。
要安装来自 openssl_udf
共享库文件的函数,使用 CREATE FUNCTION
语句。要加载库中的所有函数,请使用以下语句,根据需要调整文件名后缀:
CREATE FUNCTION asymmetric_decrypt RETURNS STRING
SONAME 'openssl_udf.so';
CREATE FUNCTION asymmetric_derive RETURNS STRING
SONAME 'openssl_udf.so';
CREATE FUNCTION asymmetric_encrypt RETURNS STRING
SONAME 'openssl_udf.so';
CREATE FUNCTION asymmetric_sign RETURNS STRING
SONAME 'openssl_udf.so';
CREATE FUNCTION asymmetric_verify RETURNS INTEGER
SONAME 'openssl_udf.so';
CREATE FUNCTION create_asymmetric_priv_key RETURNS STRING
SONAME 'openssl_udf.so';
CREATE FUNCTION create_asymmetric_pub_key RETURNS STRING
SONAME 'openssl_udf.so';
CREATE FUNCTION create_dh_parameters RETURNS STRING
SONAME 'openssl_udf.so';
CREATE FUNCTION create_digest RETURNS STRING
SONAME 'openssl_udf.so';
安装后,函数将跨服务器重新启动保持安装。如果需要卸载函数,请使用 DROP FUNCTION
语句:
DROP FUNCTION asymmetric_decrypt;
DROP FUNCTION asymmetric_derive;
DROP FUNCTION asymmetric_encrypt;
DROP FUNCTION asymmetric_sign;
DROP FUNCTION asymmetric_verify;
DROP FUNCTION create_asymmetric_priv_key;
DROP FUNCTION create_asymmetric_pub_key;
DROP FUNCTION create_dh_parameters;
DROP FUNCTION create_digest;
在 CREATE FUNCTION
和 DROP FUNCTION
语句中,函数名称必须以小写字母指定。这与在函数调用时使用的字母大小写不同。
CREATE FUNCTION
和 DROP FUNCTION
语句需要 INSERT
和 DROP
权限,分别用于 mysql
数据库。
由 openssl_udf
共享库提供的函数允许最小密钥大小为 1024 位。你可以使用 MYSQL_OPENSSL_UDF_RSA_BITS_THRESHOLD
、MYSQL_OPENSSL_UDF_DSA_BITS_THRESHOLD
和 MYSQL_OPENSSL_UDF_DH_BITS_THRESHOLD
环境变量设置最大密钥大小,如 Section 8.6.2, “Configuring MySQL Enterprise Encryption” 中所述。如果你不设置最大密钥大小,RSA 算法的上限为 16384,DSA 算法的上限为 10000,如 OpenSSL 所指定。
如果你从早期版本升级到 MySQL 8.0.30 或更高版本,其中使用了 openssl_udf
共享库提供的函数,这些函数将保持可用并受到支持。但是,这些遗留函数从 MySQL 8.0.30 起被弃用,建议安装 MySQL Enterprise Encryption 组件 component_enterprise_encryption
。
在升级时,在安装组件之前,你必须使用 DROP FUNCTION
语句卸载遗留函数。有关说明,请参阅 Installation From MySQL 8.0.30。
组件函数是向后兼容的:
-
使用遗留函数生成的 RSA 公钥和私钥可以与组件函数一起使用。
-
使用遗留函数加密的数据可以由组件函数解密。
-
使用遗留函数创建的签名可以由组件函数验证。
要使组件函数支持对遗留函数生成的内容的解密和验证,你必须将系统变量 enterprise_encryption.rsa_support_legacy_padding
设置为 ON
(默认为 OFF
)。有关配置信息,请参阅 Section 8.6.2, “Configuring MySQL Enterprise Encryption”。
遗留函数无法处理由组件函数生成的加密数据、公钥和签名,因为组件函数使用的填充和密钥格式与遗留函数不同。
由 component_enterprise_encryption
组件提供的新函数与 openssl_udf
共享库提供的遗留函数在行为和支持方面存在一些差异:
-
遗留函数支持较旧的 DSA 算法和 Diffie-Hellman 密钥交换方法。组件函数仅使用通用的 RSA 算法。
-
遗留函数的最小RSA密钥大小小于当前的最佳实践。组件函数遵循当前的最佳实践关于最小RSA密钥大小。
-
遗留函数仅支持SHA2摘要,并且需要签名摘要。组件函数也支持SHA3摘要(提供OpenSSL 1.1.1),并且不需要签名摘要,尽管它们支持签名摘要。
-
遗留函数
asymmetric_encrypt()
支持使用私钥进行加密。组件函数asymmetric_encrypt()
仅接受公钥。建议您也使用公钥加密遗留函数。 -
Diffie-Hellman密钥交换方法的
create_dh_parameters()
和asymmetric_derive()
遗留函数不提供组件component_enterprise_encryption。
表1总结了遗留函数和组件函数之间的技术差异,分别由openssl_udf共享库和component_enterprise_encryption组件从MySQL 8.0.30提供。
RSA、DSA、Diffie-Hellman(DH) |
RSA only |
|
私钥或公钥 |
公钥only |
|
PKCS #1 v1.5 |
PKCS #8 |
|
1024位 |
2048位 |
|
Maximum RSA key size limit |
使用环境变量 |
|
Digest algorithms |
SHA2 |
SHA2、SHA3(使用OpenSSL 1.1.1) |
Signatures |
摘要required |
摘要支持但不需要,任何长度的字符串都可以使用 |
Output padding |
RSAES-PKCS1-v1_5 |
RSAES-OAEP |
Signature padding |
RSASSA-PKCS1-v1_5 |
RSASSA-PSS |