Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SSDT部署后和;总是加密的_Sql Server_Sql Server Data Tools_Database Project_Always Encrypted_Ssdt 2019 - Fatal编程技术网

Sql server SSDT部署后和;总是加密的

Sql server SSDT部署后和;总是加密的,sql-server,sql-server-data-tools,database-project,always-encrypted,ssdt-2019,Sql Server,Sql Server Data Tools,Database Project,Always Encrypted,Ssdt 2019,将种子数据部署到已启用AlwaysEncrypted的表时,SSDT中存在问题 SQL Server 2019企业版 Windows Server 2016数据中心 Visual Studio 2019社区版16.7.2(截至本文的当前版本) 列主密钥、列加密密钥和列定义在项目中,DB部署时不会出现问题。以下是部署后脚本: SET IDENTITY_INSERT DBO.Table1 ON IF NOT EXISTS (SELECT * FROM DBO.Table1 WHERE Table1

将种子数据部署到已启用AlwaysEncrypted的表时,SSDT中存在问题

SQL Server 2019企业版 Windows Server 2016数据中心 Visual Studio 2019社区版16.7.2(截至本文的当前版本)

列主密钥、列加密密钥和列定义在项目中,DB部署时不会出现问题。以下是部署后脚本:

SET IDENTITY_INSERT DBO.Table1 ON

IF NOT EXISTS (SELECT * FROM DBO.Table1 WHERE Table1ID = 0)
BEGIN
    --need to parameterize values for always encrypted columns
    declare @fname nvarchar(20) = ''
    declare @lname nvarchar(25) = ''

    INSERT INTO DBO.Table1 (Table1ID, [FirstName], [LastName], [DateOfBirth] )
    VALUES (0,@fname,@lname,'2999-09-09')
END

SET IDENTITY_INSERT DBO.Table1 OFF
当在设置了AlwaysEncrypted标志的SSMS中直接执行此操作时,插入成功。在正常模式和SQLCMD模式下都是如此

当通过已发布的配置文件使用SSDT发布时,我得到以下错误:

(101,1):SQL72014:.Net SqlClient数据提供程序:Msg 33277,级别16,状态6,第13行列/变量“@fname”的加密方案不匹配。列/变量的加密方案是(encryption_type='PLAINTEXT'),第'13'行附近的表达式希望它是确定性的,或纯文本。 (89,0):SQL72045:脚本执行错误。执行的脚本:

进行一些研究后,似乎在发布配置文件中没有设置连接字符串设置“Column Encryption setting=Enabled”。如果尝试在SSMS中运行生成的部署脚本而不设置AlwaysEncrypted标志,则会出现相同的错误。试图通过用户界面设置,它会恢复为“禁用”,并且无论我做什么都不会保存。然后,我尝试将其直接保存到发布配置文件XML中,而不是通过UI,虽然它确实保存了,但错误不会更改

我尝试在启用SQLCMD模式且AlwaysEncrypted标志set=true的情况下,在SSMS中从SSDT执行生成的部署脚本,有趣的是,我得到了一个不同的错误。这个错误是:

执行批处理时出错。错误消息是:ExecuteReader:CommandText属性尚未初始化

问题:

  • 是否可以将部署后脚本放入一个表中,该表中的列被AlwaysEncrypted加密?如果是,我需要做什么才能让它工作
  • 在SQLCMD中运行时,为什么会在SSMS中出现错误?有人能够复制这一点和/或知道发生了什么吗
  • 谢谢你的帮助

    内森