2

我正在为即将推出的大型解决方案制作原型,并希望使用 Always Encrypted 来加密某些敏感的数据库列。

我的设置如下: 数据库服务器:安装了 SQL Server 2016 应用程序服务器:安装了指向数据库服务器引擎的 Reporting Server 2016。IIS、.Net 4.6.2 等也都设置好了。

该环境的设置方式也使得 DBA 无法读取加密数据,即使从 Management Studio 中他将在连接中添加“列加密设置 = 已启用”。所以我的证书安装在应用服务器上,而 CMK 和 CEK 安装在数据库服务器数据库上。

我可以毫无问题地从安装在应用服务器上的 Web 应用程序中查看加密数据,而 DBA 无法直接从数据库中读取加密数据,所以我假设我的环境设置良好。

如前所述,我在应用程序服务器上安装了 SSRS 2016,但在数据库服务器上指向具有加密列的数据库。当然,我已经使用 Report Builder 完成了一个基本的转储报告(用于测试目的),除了未显示加密数据之外,一切都运行良好 - 它在 SSRS 表中保持空白!加密列只是一个基本的 nvarchar(200)

在数据源连接字符串中,我添加了“列加密设置 = 已启用”。没有它,报告将按预期显示#Error。所以我假设这也是需要的。

我还注意到,从查询设计器中我可以读取加密列。如果我从数据源中删除“列加密设置 = 已启用”,如果我没记错的话,查询设计器会显示 VarBinary。当然,我直接在应用程序服务器上使用报表生成器和查询设计器。

我试图搜索有关如何将 SSRS 与 Always Encrypted 一起使用的任何教程,但我找不到任何东西。我发现的只是 SSRS 支持 Always Encrypted 的帖子中的评论。

有人可以启发我做错了什么或我错过了什么吗?

提前致谢。

4

2 回答 2

1

免责声明:我是 Microsoft 的项目经理。

要解决您的问题,请尝试从 SQL Server Management Studio 在同一台计算机(您从中运行报表生成器)上运行有问题的查询(在报表生成器中不返回数据的查询),并作为同一用户,通过与'Column Encryption Setting = Enabled' 并查看是否收到任何错误消息。

如果证书未部署在计算机上、托管 Report Builder 上,或者用户没有访问证书的权限,我已经看到对加密列的查询在 Report Builder 中没有返回任何结果。您是否将证书(用作列主密钥)存储在当前用户或本地计算机存储中?如果它在本地计算机存储中,您需要确保您(运行报表生成器的用户)具有访问证书的权限(您可以使用管理控制台配置证书的权限)。

于 2016-10-25T03:25:29.030 回答
0

运行 SSRS 服务的帐户需要对本地计算机存储中的 Always Encrypted 证书具有读取权限。右键单击证书,选择所有任务 - 管理私钥,然后提供 SSRS 服务帐户对证书的读取权限。

于 2017-04-26T16:05:46.293 回答