微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

客户端如何知道要使用SQL Server始终加密的列?

如何解决客户端如何知道要使用SQL Server始终加密的列?

我想知道sql客户端在将数据发送到sql Server之前如何知道要加密的列?毕竟,加密设置是在sql Server中管理的。

在EF元数据中没有这些设置的痕迹。另外,我发现可以更改列的加密设置,而无需部署应用程序的更新版本。

上下文:

解决方法

SQL Server Profiler揭示了客户端用来推断要加密的列的机制。

在这种情况下,我更新了用户42的活动标志。

首先,客户端发送以下查询:

NdOverlay

这将返回两个带有加密元数据的结果集:

第一个包含以下列:

  • column_encryption_key_ordinal
  • database_id
  • column_encryption_key_id
  • column_encryption_key_version
  • column_encryption_key_metadata_version
  • column_encryption_key_encrypted_value
  • column_master_key_store_provider_name
  • column_master_key_path
  • column_encryption_key_encryption_algorithm_name

第二个具有以下列:

  • parameter_ordinal
  • 参数名称
  • column_encryption_algorithm
  • column_encryption_type
  • column_encryption_key_ordinal
  • column_encryption_normalization_rule_version

其后是实际的更新查询:

exec sp_describe_parameter_encryption N'SET NOCOUNT ON;
UPDATE [Users] SET [Active] = @p0
WHERE [Id] = @p1;
SELECT @@ROWCOUNT;

',N'@p1 int,@p0 bit'

就我而言,此列上没有实际的加密,因此exec sp_executesql N'SET NOCOUNT ON; UPDATE [Users] SET [Active] = @p0 WHERE [Id] = @p1; SELECT @@ROWCOUNT; ',@p0 bit',@p1=42,@p0=1 的结果不是很有趣,但是机制很明确。

SELECT查询之前没有这样的元查询。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?