Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  MySQL Enterprise Encryption Usage and Examples

8.6.3 MySQL 企业加密使用和示例

要在应用程序中使用 MySQL 企业加密,调用适用于您想要执行操作的函数。这一节演示了某些代表性任务的执行。

MySQL 企业加密函数由 MySQL 组件 component_enterprise_encryption 提供。关于这些函数的信息,请参见第8.6.4节,“MySQL 企业加密函数参考”

选择密钥长度和加密算法时,需要考虑以下总体考虑:

  • 私钥和公钥的加密强度随着密钥大小增加,但密钥生成时间也会增加。

  • 组件函数仅支持 RSA 密钥。

  • 非对称加密函数相比对称加密函数消耗更多资源。它们适用于加密小量数据和创建、验证签名。对于加密大量数据,使用对称加密函数更快。MySQL 服务器提供了AES_ENCRYPT()AES_DECRYPT() 函数用于对称加密。

可以在运行时创建和将密钥字符串值存储到变量或表中,使用SETSELECTINSERT,示例如下:

SET @priv1 = create_asymmetric_priv_key('RSA', 2048);
SELECT create_asymmetric_priv_key('RSA', 2048) INTO @priv2;
INSERT INTO t (key_col) VALUES(create_asymmetric_priv_key('RSA', 1024));

存储在文件中的密钥字符串值可以使用LOAD_FILE()函数读取,需要拥有FILE特权。摘要和签名字符串可以类似处理。

这个示例可以同时工作于组件函数和遗留函数:

-- Encryption algorithm
SET @algo = 'RSA';
-- Key length in bits; make larger for stronger keys
SET @key_len = 2048;

-- Create private key
SET @priv = create_asymmetric_priv_key(@algo, @key_len);
-- Derive corresponding public key from private key, using same algorithm
SET @pub = create_asymmetric_pub_key(@algo, @priv);

可以使用钥对加密和解密数据或签名和验证数据。

这两个示例都可以与组件函数和遗留函数一起工作。在两种情况下,密钥对的成员必须是RSA密钥:

SET @ciphertext = asymmetric_encrypt(@algo, 'My secret text', @pub);
SET @plaintext = asymmetric_decrypt(@algo, @ciphertext, @priv);

这两个示例都可以与组件函数和遗留函数一起工作:

-- Digest type
SET @dig_type = 'SHA512';

-- Generate digest string
SET @dig = create_digest(@dig_type, 'My text to digest');

密钥对可以用来签名数据,然后验证签名是否与摘要匹配。这两个示例都可以与组件函数和遗留函数一起工作:

-- Encryption algorithm; keys must
-- have been created using same algorithm
SET @algo = 'RSA';
–- Digest algorithm to sign the data
SET @dig_type = 'SHA512';

-- Generate signature for digest and verify signature against digest
SET @sig = asymmetric_sign(@algo, @dig, @priv, @dig_type);
-- Verify signature against digest
SET @verf = asymmetric_verify(@algo, @dig, @sig, @pub, @dig_type);

对于遗留函数,签名需要摘要。对于组件函数,签名不需要摘要,可以使用任何数据字符串。这些函数中的摘要类型是用来签名数据的算法,而不是用来创建原始输入的签名的算法。这是一个对组件函数的示例:

-- Encryption algorithm; keys must
-- have been created using same algorithm
SET @algo = 'RSA';
–- Arbitrary text string for signature
SET @text = repeat('j', 256);
–- Digest algorithm to sign the data
SET @dig_type = 'SHA512';

-- Generate signature for digest and verify signature against digest
SET @sig = asymmetric_sign(@algo, @text, @priv, @dig_type);
-- Verify signature against digest
SET @verf = asymmetric_verify(@algo, @text, @sig, @pub, @dig_type);