VS 2013 部分支持 azure v12 中的证书和对称密钥
Partial support in VS 2013 for certificates and symmetric keys in azure v12
在针对 azure v12 的 Visual Studio 2013 项目中,我在创建密钥和证书工件时遇到 SQL70015 错误(目标平台不支持语句 x)。
但是,在项目中创建独立的密钥和证书对象之前,如果它们不存在,我有一个部署后脚本添加它们。部署后脚本运行完美……当然,当我引用触发器和过程等其他工件中的密钥时,我会收到 SQL71502 警告(未解决的对象)……因此我希望转移到普通 ol' VS 密钥和证书对象。
我想知道是我做错了什么还是我的开发环境配置错误。我在 Windows 8.1、Azure SDK v 2.6、SQL 2012 和 SQL 2014 上安装了 Visual Studio 2013,并已成功部署到 Azure。我当然想规范化项目,但我一直在使用 postdeploy 并忍受着警告。
明确地说,我的部署后有:
if not exists ( select * from sys.symmetric_keys where symmetric_key_id = 101 )
create master key encryption by password = '$(MasterKeyEncryption)'
go
if not exists ( select * from sys.certificates where subject = 'User Account Certificate' )
create certificate UserAccountCertificate with subject = 'User Account Certificate'
go
if not exists ( select * from sys.symmetric_keys where name='UserAccountKey' )
create symmetric key UserAccountKey with algorithm = aes_256 encryption by certificate UserAccountCertificate
...效果很好。但是单机神器,如:
create certificate UserAccountCertificate with subject = 'User Account Certificate'
...产生 SQL70015 错误。并且,这是对密钥的成功测试,如 运行 in azure:
declare
@plaintext nvarchar(max),
@ciphertext nvarchar(max);
open symmetric key UserAccountKey decryption by certificate UserAccountCertificate;
select @plaintext = 'here lies the original message';
select @ciphertext = encryptbykey( key_guid( 'UserAccountKey' ), @plaintext );
select convert(nvarchar( max ),decryptbykey( @ciphertext ) ), @ciphertext;
close symmetric key UserAccountKey;
有没有其他人遇到过这个问题?这只是 VS 对 azure v12 的支持的暂时性错误吗?我应该重新安装一堆东西吗?如有任何想法,我们将不胜感激。
支持 Azure 中的单元级加密 SQL 数据库最近作为预览功能引入 SQL Database V12。此功能仍处于预览状态的主要原因是不幸的是,我们仍在努力提供适当的工具支持以正确处理这些对象。
在 Azure SQL 数据库中使用此功能时需要考虑的一件事是,虽然可以很容易地提取证书并在不同的数据库上重新创建证书,但不一定对所有关键对象都是如此,例如作为对称密钥。如果您小心使用 DDL 中的 KEY_SOURCE 和 IDENTITY_VALUE 字段创建对称密钥,则可以在另一个数据库中重新创建它们。
但是,许多脚本(例如工具使用的脚本)使用如下语法创建密钥:
create symmetric key UserAccountKey
with algorithm = aes_256
encryption by certificate UserAccountCertificate
这将在每次实例化时创建一个具有不同(随机)密钥的对称密钥 material;也就是说,你每次运行这个DDL语句,生成的key都会不一样。无法将以这种方式创建的对称密钥加密的任何数据复制到另一个数据库,因为无法将对称密钥移动到新数据库。
这意味着无法将一个数据库中随机生成的对称密钥加密的任何数据复制到另一个数据库。虽然在许多情况下这对于特定应用程序可能是可以接受的(即每个数据库都是一个独立的实体,数据不会在它们之间移动),但并非所有应用程序都如此。如果应用程序希望将数据从一个数据库移动到另一个数据库(例如,在创建或合并分片时),意外误用可能会导致数据丢失。
我建议您查看这篇文章,了解有关在 Azure 中使用单元级加密功能的更多详细信息 SQL 数据库:http://blogs.msdn.com/b/sqlsecurity/archive/2015/05/12/recommendations-for-using-cell-level-encryption-in-azure-sql-database.aspx
在针对 azure v12 的 Visual Studio 2013 项目中,我在创建密钥和证书工件时遇到 SQL70015 错误(目标平台不支持语句 x)。
但是,在项目中创建独立的密钥和证书对象之前,如果它们不存在,我有一个部署后脚本添加它们。部署后脚本运行完美……当然,当我引用触发器和过程等其他工件中的密钥时,我会收到 SQL71502 警告(未解决的对象)……因此我希望转移到普通 ol' VS 密钥和证书对象。
我想知道是我做错了什么还是我的开发环境配置错误。我在 Windows 8.1、Azure SDK v 2.6、SQL 2012 和 SQL 2014 上安装了 Visual Studio 2013,并已成功部署到 Azure。我当然想规范化项目,但我一直在使用 postdeploy 并忍受着警告。
明确地说,我的部署后有:
if not exists ( select * from sys.symmetric_keys where symmetric_key_id = 101 )
create master key encryption by password = '$(MasterKeyEncryption)'
go
if not exists ( select * from sys.certificates where subject = 'User Account Certificate' )
create certificate UserAccountCertificate with subject = 'User Account Certificate'
go
if not exists ( select * from sys.symmetric_keys where name='UserAccountKey' )
create symmetric key UserAccountKey with algorithm = aes_256 encryption by certificate UserAccountCertificate
...效果很好。但是单机神器,如:
create certificate UserAccountCertificate with subject = 'User Account Certificate'
...产生 SQL70015 错误。并且,这是对密钥的成功测试,如 运行 in azure:
declare
@plaintext nvarchar(max),
@ciphertext nvarchar(max);
open symmetric key UserAccountKey decryption by certificate UserAccountCertificate;
select @plaintext = 'here lies the original message';
select @ciphertext = encryptbykey( key_guid( 'UserAccountKey' ), @plaintext );
select convert(nvarchar( max ),decryptbykey( @ciphertext ) ), @ciphertext;
close symmetric key UserAccountKey;
有没有其他人遇到过这个问题?这只是 VS 对 azure v12 的支持的暂时性错误吗?我应该重新安装一堆东西吗?如有任何想法,我们将不胜感激。
支持 Azure 中的单元级加密 SQL 数据库最近作为预览功能引入 SQL Database V12。此功能仍处于预览状态的主要原因是不幸的是,我们仍在努力提供适当的工具支持以正确处理这些对象。
在 Azure SQL 数据库中使用此功能时需要考虑的一件事是,虽然可以很容易地提取证书并在不同的数据库上重新创建证书,但不一定对所有关键对象都是如此,例如作为对称密钥。如果您小心使用 DDL 中的 KEY_SOURCE 和 IDENTITY_VALUE 字段创建对称密钥,则可以在另一个数据库中重新创建它们。
但是,许多脚本(例如工具使用的脚本)使用如下语法创建密钥:
create symmetric key UserAccountKey
with algorithm = aes_256
encryption by certificate UserAccountCertificate
这将在每次实例化时创建一个具有不同(随机)密钥的对称密钥 material;也就是说,你每次运行这个DDL语句,生成的key都会不一样。无法将以这种方式创建的对称密钥加密的任何数据复制到另一个数据库,因为无法将对称密钥移动到新数据库。
这意味着无法将一个数据库中随机生成的对称密钥加密的任何数据复制到另一个数据库。虽然在许多情况下这对于特定应用程序可能是可以接受的(即每个数据库都是一个独立的实体,数据不会在它们之间移动),但并非所有应用程序都如此。如果应用程序希望将数据从一个数据库移动到另一个数据库(例如,在创建或合并分片时),意外误用可能会导致数据丢失。
我建议您查看这篇文章,了解有关在 Azure 中使用单元级加密功能的更多详细信息 SQL 数据库:http://blogs.msdn.com/b/sqlsecurity/archive/2015/05/12/recommendations-for-using-cell-level-encryption-in-azure-sql-database.aspx