Sql-Server
還原證書時 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 上的這個問題。但是,答案對我不起作用。這個問題也有類似的答案。
因此,通過錯誤的部分:
- 我已經重新創建了兩次文件,所以我不認為這是“無效”部分。這顯然不是“不存在”部分(如果我輸入了錯誤的密碼,它會告訴我這是錯誤的密碼)。
- 我已經備份並恢復了 SMK 和 Master Key 沒有問題,所以我不認為這是權限問題。這些文件具有完全相同的權限。
無論我嘗試什麼,我都無法恢復證書。我搜尋了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
. 不用找了。
“相關程式碼:”下顯示的程式碼(在問題中)是否是正在執行的確切程式碼,如複製並粘貼到此處而不是重新輸入?我問是因為sqlserver_backup_cert文件上的文件副檔名在
BACKUP
和CREATE
(即恢復)語句之間是不同的。它作為.cer備份,但隨後您在 .crt中尋找**.crt**CREATE
。另外,您是否嘗試過完全跳過文件並使用十六進製字節(即
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)' );
更新
OP 已確認問題確實是文件副檔名不匹配。