使用“始终加密”

时间:2016-10-22 10:34:30

标签: sql-server-2016 ssrs-2016 always-encrypted

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

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

环境也是以DBA无法读取加密数据的方式设置的,即使来自Management Studio,他也会添加“列加密设置=已启用”。在连接中。所以我的证书安装在Application Server上,而CMK和CEK安装在Database Server数据库上。

我可以毫无问题地查看安装在Application Server上的Web App中的加密数据,并且DBA无法直接从数据库中读取加密数据,所以我假设我的环境设置得很好

如上所述,我在Application Server上安装了SSRS 2016,但指向数据库服务器上带有加密列的数据库。我当然使用报表生成器完成了一个基本的转储报告(用于测试目的)并且所有工作都很好,除了没有显示加密数据 - 它在SSRS表中保持空白!加密列只是一个基本的nvarchar(200)

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

我注意到的一点是,从查询设计器我可以读取加密列。如果我删除了“列加密设置=启用”'如果我没记错的话,从数据源中查询设计器会显示VarBinary。我当然直接在Application服务器上使用Report Builder和Query Designer。

我尝试搜索有关如何使用始终加密的SSRS的任何教程,但我无法找到任何内容。我发现的只是SSRS支持始终加密的帖子中的评论。

有人可以告诉我我做错了什么或我错过了什么?

提前致谢。

2 个答案:

答案 0 :(得分:1)

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

要解决您的问题,请尝试从同一台计算机上的SQL Server Management Studio运行有问题的查询(在报表生成器中不返回数据的查询)(您运行报表生成器)并作为同一用户运行与“列加密设置=已启用”的连接'如果您收到任何错误消息,请参阅。

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

答案 1 :(得分:0)

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