【问题标题】:How to detect and get information of table column encryption如何检测和获取表列加密信息
【发布时间】:2018-01-13 19:01:10
【问题描述】:
我想做一个查询来检查加密并输出随机给定的数据库表中的所有列(如果它们已加密)。
所以我希望输出看起来像这样
Column Name | Encryption Key Name | Encryption Type | Algorithm Used
Baby Power Key name for bp Randomized AEAD_AES_256_CBC_HMAC_SHA_256
Diaper Key name for Diaper Deterministic AEAD_AES_256_CBC_HMAC_SHA_256
【问题讨论】:
标签:
sql-server
encryption
【解决方案1】:
您可以使用以下查询:
SELECT
t.name AS TableName,
c.name AS ColumnName,
k.name AS KeyName,
c.encryption_type_desc,
c.encryption_algorithm_name
FROM sys.columns c
INNER JOIN sys.column_encryption_keys k ON c.column_encryption_key_id = k.column_encryption_key_id
INNER JOIN sys.tables t ON c.object_id = t.object_id
WHERE encryption_type IS NOT NULL
这将返回当前数据库中的所有加密列。如果您只想要特定表,请在 t.name 上添加带有过滤器的 where 条件。
一般来说,如果您想查找有关不同数据库对象的信息,sys 架构下的系统视图是正确的位置。
【解决方案2】:
在表级别,这将列出列并指示哪些是加密的。
SELECT
DB_NAME() AS [DB_NAME],
T.[name] AS [TABLE_NAME],
C.[name] AS [COLUMN_NAME],
IIF(C.encryption_type IS NULL, 0, 1) AS [ENCRYPTED]
FROM
sys.tables AS T
INNER JOIN sys.columns AS C ON T.[object_id] = C.[object_id];