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



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

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

上下文:

  • 关于始终加密的Microsoft文档
  • SQL Server 2017
  • EF Core 3.1客户端

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

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

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

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

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

第一个有以下列:

  • column_encryption_key_ordinal
  • 数据库id
  • column_encryption_key_id
  • column_encryption_key_version
  • column_encryption_key_metadata_version
  • 列加密密钥加密值
  • column_master_key_store_provider_name
  • column_master_key_path
  • 列加密密钥加密算法名称

第二个有以下列:

  • 参数_常规
  • 参数名称
  • 列加密算法
  • 列加密类型
  • column_encryption_key_ordinal
  • column_encryption_nnormalization_rule_version

后面是实际的更新查询:

exec sp_executesql N'SET NOCOUNT ON;
UPDATE [Users] SET [Active] = @p0
WHERE [Id] = @p1;
SELECT @@ROWCOUNT;
',N'@p1 int,@p0 bit',@p1=42,@p0=1

在我的情况下,这一列没有实际的加密,所以sp_describe_parameter_encryption的结果不是很有趣,但机制很清楚。

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

相关内容

  • 没有找到相关文章

最新更新