证书、非对称密钥或私钥文件无效或不存在

Luc*_*ucy 5 sql-server t-sql restore certificate

我正在尝试将数据库从不同的服务器还原到我的本地主机服务器上。那个数据库是加密的(bak 文件),所以我必须解密它,这很好,我有所有的证书文件和密码,但是出于某种原因,我仍然收到以下错误:

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

这是我正在执行的代码:

      CREATE CERTIFICATE [Certificate1] 
FROM FILE = 'C:\Location of the certs'
WITH PRIVATE KEY ( 
    FILE = 'C:\Location of the certs' ,   
    DECRYPTION BY PASSWORD = 'password'
);
Run Code Online (Sandbox Code Playgroud)

附注。我不是备份和恢复方面的专家。

Luc*_*ucy 3

以下是我将加密数据库恢复到不同服务器(本地主机)上必须采取的步骤。

1.创建证书:

CREATE CERTIFICATE [CertficateName] 
FROM FILE = 'C:\FolderName\NameOfCert.cer'
WITH PRIVATE KEY ( 
    FILE = 'C:\FolderName\NameOfCertKey.key' ,   
    DECRYPTION BY PASSWORD = 'YourPassword'
);
Run Code Online (Sandbox Code Playgroud)

2.

USE Master ;
Open Master Key Decryption by password = 'YourPassword'
Backup master key to file = 'C:\SQL FodlerName\MasterKeyName.key'
        ENCRYPTION BY PASSWORD = 'YourPassword';
    GO
Run Code Online (Sandbox Code Playgroud)

3.恢复主密钥

Use master 
    restore master key
    FROM FILE = 'C:\FolderName\MasterKeyName.key'
    DECRYPTION BY PASSWORD = 'YourPassword'
    ENCRYPTION BY PASSWORD = 'YourPassword'
Run Code Online (Sandbox Code Playgroud)

4.这是最后一步,在这个阶段要小心,因为我花了一段时间才明白每个命令需要单独运行:

Alter Database [DatabaseName]
SET SINGLE_USER WITH
ROLLBACK IMMEDIATE
Run Code Online (Sandbox Code Playgroud)

接下来单独运行

USE MASTER
OPEN MASTER KEY DECRYPTION BY PASSWORD = 'YourPassword';
Run Code Online (Sandbox Code Playgroud)

下一个命令单独运行

RESTORE DATABASE [DatabaseName] FROM DISK = 'C:\Folder\FULL\NameoftheBakFilethat ourAreRestoring.BAK' 
WITH Replace , STATS = 5 
Run Code Online (Sandbox Code Playgroud)

不要忘记将数据库设置回多用户模式。

  • 您如何解决该错误?我在第一步中遇到了同样的错误,导入现有的证书和密钥。 (2认同)