恢复证书时 Docker SQL Server 2017 中的权限问题

Cha*_*yah 5 sql-server linux certificate docker sql-server-2017

Docker SQL Server 2017 容器 @latest。使用master数据库。

我面临的错误如下:

[S00019][15208] The certificate, asymmetric key, or private key file is not valid or does not exist; or you do not have permissions for it.

我发现最接近这个确切问题的是Stackoverflow 上的这个问题。然而,答案对我不起作用。这个问题有类似的答案。

我也试过这里这里的说明。

所以通过错误的部分:

  1. 我已经重新创建了两次文件,所以我认为这不是“无效”部分。它显然不是“不存在”的部分(如果我输入了错误的密码,它会告诉我这是错误的密码)。
  2. 我已经备份并恢复了 SMK 和主密钥,没有问题,所以我认为这不是权限问题。这些文件具有完全相同的权限。

无论我尝试什么,我都无法获得要恢复的证书。我已经搜索了GitHub 问题无济于事,所以我不认为这是一个错误。我一定做错了什么。

相关代码:

--on Prod
BACKUP CERTIFICATE sqlserver_backup_cert
TO FILE = '/var/opt/mssql/certs/sqlserver_backup_cert.cer'
WITH PRIVATE KEY (
    FILE = '/var/opt/mssql/certs/sqlserver_backup_cert.key',
    ENCRYPTION BY PASSWORD = 'foobar'
    )
Run Code Online (Sandbox Code Playgroud)
--on Test
CREATE CERTIFICATE sqlserver_backup_cert
FROM FILE = '/var/opt/mssql/certs/sqlserver_backup_cert.crt'
WITH PRIVATE KEY (
    FILE = '/var/opt/mssql/certs/sqlserver_backup_cert.key',
    DECRYPTION BY PASSWORD = 'foobar'
    )
Run Code Online (Sandbox Code Playgroud)

值得注意的/var/opt/mssql/certs是一个Docker卷。但是,我也尝试在容器内创建自己的目录并使用docker cp. 没变。

Sol*_*zky 5

“相关代码:”(在问题中)下显示的代码是否是正在执行的确切代码,如复制并粘贴到此处而不是重新键入?我问这个问题是因为sqlserver_backup_cert文件上的文件扩展名在BACKUPCREATE(即恢复)语句之间不同。它备份为.cer,但您正在寻找.crtCREATE

另外,您是否尝试过完全跳过文件并使用十六进制字节(即VARBINARY文字)?您将执行以下操作:

在产品上

SELECT CERTENCODED(CERT_ID(N'sqlserver_backup_cert')) AS [CertificateAndPublicKey],
       CERTPRIVATEKEY(CERT_ID(N'PrivateKeyTest'),
                      'new_password_for_extract(A)',
                      'current_password(B)') AS [PrivateKey];
Run Code Online (Sandbox Code Playgroud)

测试中

CREATE CERTIFICATE [sqlserver_backup_cert]
    FROM BINARY = {output of CERTENCODED}
    WITH PRIVATE KEY (
        BINARY = {output of CERTPRIVATEKEY},
                 DECRYPTION BY PASSWORD = 'new_password_for_extract(A)',
                 ENCRYPTION BY PASSWORD = 'current_password(B)'
                     );
Run Code Online (Sandbox Code Playgroud)

更新

OP 已确认问题确实是文件扩展名不匹配。