web-dev-qa-db-ja.com

証明書の復元中の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のこの問題 です。しかし、答えは私にはうまくいきません。 この質問 にも同様の答えがあります。

herehere の説明も試しました。

したがって、エラーの部分を通過します:

  1. ファイルを2回再作成したので、「無効な」部分ではないと思います。そして、それは明らかに「存在しない」部分ではありません(私が間違ったパスワードを入力した場合、それは間違ったパスワードであることを私に告げます)。
  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'
    )
--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'
    )

それは注目に値する/var/opt/mssql/certsはDockerボリュームです。ただし、コンテナ内に独自のディレクトリを作成し、docker cp。変化なし。

5
Chaim Eliyah

「関連コード:」の下に表示されているコード(質問内)は、ここにコピーアンドペーストされて再実行されないように、実行中のexactコードです入力した? sqlserver_backup_certファイルのファイル拡張子がBACKUPCREATE(つまり、復元)ステートメントで異なるため、私は尋ねます。 。cerとしてバックアップされますが、CREATE。crtを探しています。

また、ファイルをすべてスキップして、16進バイト(つまり、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];

テスト時

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)'
                     );

[〜#〜]更新[〜#〜]

O.P.は、この問題が実際にファイル名拡張子の不一致であることを確認しました。

4
Solomon Rutzky