ALTER CERTIFICATE (Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Analytics Platform System (PDW)

更改用于加密证书私钥的密码,删除私钥或导入私钥(如果不存在)。 更改证书对于 Service Broker 的可用性。

Transact-SQL 语法约定

语法

-- Syntax for SQL Server and Azure SQL Database  
  
ALTER CERTIFICATE certificate_name   
      REMOVE PRIVATE KEY  
    | WITH PRIVATE KEY ( <private_key_spec> )  
    | WITH ACTIVE FOR BEGIN_DIALOG = { ON | OFF }  
  
<private_key_spec> ::=   
      {   
        { FILE = 'path_to_private_key' | BINARY = private_key_bits }  
         [ , DECRYPTION BY PASSWORD = 'current_password' ]  
         [ , ENCRYPTION BY PASSWORD = 'new_password' ]  
      }  
    |  
      {  
         [ DECRYPTION BY PASSWORD = 'current_password' ]  
         [ [ , ] ENCRYPTION BY PASSWORD = 'new_password' ]  
      }  
-- Syntax for Parallel Data Warehouse  
  
ALTER CERTIFICATE certificate_name   
{  
      REMOVE PRIVATE KEY  
    | WITH PRIVATE KEY (   
        FILE = '<path_to_private_key>',  
        DECRYPTION BY PASSWORD = '<key password>' )
}  

注意

若要查看 SQL Server 2014 (12.x) 及更早版本的 Transact-SQL 语法,请参阅早期版本文档

参数

certificate_name
数据库中标识证书的唯一名称。

REMOVE PRIVATE KEY
指定私钥不应再保留在数据库内。

WITH PRIVATE KEY 指定将证书的私钥加载到 SQL Server 中。

FILE ='path_to_private_key'
指定私钥的完整路径(包括文件名)。 此参数可以是本地路径或网络位置的 UNC 路径。 将在 SQL Server 服务帐户的安全上下文中访问此文件。 使用此选项时,请确保服务帐户有权访问指定的文件。

如果仅指定文件名,则该文件将保存在实例的默认用户数据文件夹中。 此文件夹可能是(或可能不是)SQL Server DATA 文件夹。 对于 SQL Server Express LocalDB,实例的默认用户数据文件夹是 %USERPROFILE% 环境变量为创建实例的帐户指定的路径。

BINARY = private_key_bits
适用于:SQL Server 2012 (11.x) 及更高版本。

指定为二进制常量的专有键位。 这些位可采用加密形式。 如果加密,则用户必须提供解密密码。 不会对此密码执行密码策略检查。 私钥位应该采用 PVK 文件格式。

DECRYPTION BY PASSWORD = current_password
指定解密私钥所需的密码。

ENCRYPTION BY PASSWORD = new_password
指定用于对数据库中的证书私钥进行加密的密码。 new_password 必须符合运行 SQL Server 实例的计算机的 Windows 密码策略要求。 有关详细信息,请参阅 Password Policy

ACTIVE FOR BEGIN_DIALOG = { ON | OFF }
使证书可用于 Service Broker 对话会话的发起方。

备注

私钥必须与 certificate_name 指定的公钥相对应

如果文件中的密码受空密码保护,则可省略 DECRYPTION BY PASSWORD 子句。

在导入数据库中已存在的证书私钥时,该私钥将自动受到数据库主密钥的保护。 若要使用密码保护私钥,请使用 ENCRYPTION BY PASSWORD 子句。

REMOVE PRIVATE KEY 选项将从数据库中删除证书的私钥。 当使用证书来验证签名或在不需要私钥的 Service Broker 方案中时,可以删除私钥。 请勿删除保护对称密钥的证书的私钥。 需要还原私钥才能对任何应使用证书验证的其他模块或字符串进行签名,或者解密已使用证书加密的值。

如果使用数据库主密钥加密私钥,则不必指定解密密码。

若要更改用于加密私钥的密码,请不要指定 FILE 或 BINARY 子句。

重要

从数据库删除私钥前,始终对其建立存档副本。 有关详细信息,请参阅 BACKUP CERTIFICATE (Transact-SQL)CERTPRIVATEKEY (Transact-SQL)

WITH PRIVATE KEY 选项在包含的数据库中不可用。

权限

需要对证书具有 ALTER 权限。

示例

A. 删除证书的私钥

ALTER CERTIFICATE Shipping04   
    REMOVE PRIVATE KEY;  
GO  

B. 更改用于加密私钥的密码

ALTER CERTIFICATE Shipping11   
    WITH PRIVATE KEY (DECRYPTION BY PASSWORD = '95hkjdskghFDGGG4%',  
    ENCRYPTION BY PASSWORD = '34958tosdgfkh##38');  
GO  

C. 为数据库中已存在的证书导入私钥

ALTER CERTIFICATE Shipping13   
    WITH PRIVATE KEY (FILE = 'c:\importedkeys\Shipping13',  
    DECRYPTION BY PASSWORD = 'GDFLKl8^^GGG4000%');  
GO  

D. 将私钥保护从密码更改为数据库主密钥

ALTER CERTIFICATE Shipping15   
    WITH PRIVATE KEY (DECRYPTION BY PASSWORD = '95hk000eEnvjkjy#F%');  
GO  

另请参阅

CREATE CERTIFICATE (Transact-SQL)
DROP CERTIFICATE (Transact-SQL)
BACKUP CERTIFICATE (Transact-SQL)
加密层次结构
EVENTDATA (Transact-SQL)
CERTENCODED (Transact-SQL)
CERTPRIVATEKEY (Transact-SQL)
CERT_ID (Transact-SQL)
CERTPROPERTY (Transact-SQL)