在数据库项目中部署证书的正确语法

Posted

技术标签:

【中文标题】在数据库项目中部署证书的正确语法【英文标题】:Proper syntax for deploying a certificate in database project 【发布时间】:2014-08-06 21:01:17 【问题描述】:

如何在 Visual Studio 2010 数据库项目中拥有一个证书,该证书将根据项目中的更改创建、更新和删除,类似于它处理表、存储过程、键和其他对象的方式?

下面是我目前使用的语法,以及$(CertName)

CREATE CERTIFICATE [$(CertName)]
    AUTHORIZATION [dbo]
    WITH SUBJECT = N'Encrypt Data', START_DATE = N'11/26/2012 15:13:03', EXPIRY_DATE = N'11/26/2013 15:13:03'
    ACTIVE FOR BEGIN_DIALOG = ON;

我尝试使用下面的 if 语句检查它是否存在。

IF (select Count(*) from sys.symmetric_keys where name like '$(CertName)') = 0
BEGIN
    --insert create statement
END

但是,由于我在对称密钥的定义中使用了证书,因此使用这种方法会出现以下错误。

SQL03006:对称密钥:[$(KeyName)] 具有对证书 [$(CertName)] 的未解析引用。

【问题讨论】:

作为一种解决方法,您可以建议对项目使用部署而不在构建中包含证书。 【参考方案1】:

试试这个:

IF EXISTS (SELECT 1 FROM sys.certificates where name = '$(CertName)')

【讨论】:

以上是关于在数据库项目中部署证书的正确语法的主要内容,如果未能解决你的问题,请参考以下文章

Lync 小技巧-56-检查你用的公网证书是否正确

在 Worklight 中部署收到警报:文件名、目录名或卷标语法不正确

安装maximo证书的时候老是报:流程解决方案无法从Maximo数据库访问部署配置属性。

SQL 16010:在数据库项目上使用 :r 后语法不正确

ClickOnce部署:使用证书

Visual Studio 认为正确的 SQL 语法不正确