SQL Server 2016:隐藏来自DBA的列数据,但特定用户可以通过应用程序查看数据

Mak*_*ako 5 sql-server encryption powerbi sql-server-2016 always-encrypted

我正在尝试通过PowerBI启用对工资信息的团队负责人的访问,但是会加密来自其他用户和DBA的这些数据.拒绝访问此列数据的用户仍应能够执行查询,但只能查看工资信息的加密字符.

我正在使用SQL Server 2016.

我已经测试了新的"始终加密"功能,这非常有效...但除了我无法将'column encryption setting = enabled'参数传递给PowerBI连接字符串.从各方面来看,PowerBI目前不支持此功能.

我目前正在通过使用列级加密和对称密钥测试列加密的使用,但问题是我难以将OPEN SYMMETRIC KEY SymmetricKey1和DECRYPTION BY CERTIFICATE Certificate1代码编码到SQL中,如果用户没有有权访问,然后一个错误导致SQL在用户测试时失败.

我是证书和加密的新手,而且我目前处于陡峭的学习曲线......所以对我来说很容易.

谢谢

The*_*war 2

您可以使用动态数据屏蔽。

\n\n

动态数据屏蔽的工作原理是屏蔽列输出给没有权限的用户。以下示例已在 2016 年基于此处提供的演示进行了测试:探索 SQL Server 2016 动态数据屏蔽 \xe2\x80\x93 第 1 部分 - 创建一个使用动态数据屏蔽的表

\n\n
--create a table\n\nCREATE TABLE ClientInfo\n  (ClientID int IDENTITY,\n   FirstName varchar(65),\n   LastName varchar(65),\n   PhoneNum bigint \n      MASKED WITH (FUNCTION = \'default()\'),\n   EmailAddr varchar(100) \n      MASKED WITH (FUNCTION = \'email()\'),\n   CreditCardNum varchar(19) MASKED \n      WITH (FUNCTION = \'partial(0,"XXXX-XXXX-XXXX-",4)\'),\n   BirthDT date MASKED \n      WITH (FUNCTION = \'default()\'));\n\nINSERT Clientinfo (FirstName, LastName, PhoneNum, EmailAddr,CreditCardNum,BirthDT) VALUES \n(\'George\', \'Washington\', 5555814441, \n\'GeorgeW@datanbasejournal.com\', \'0123-4567-8901-2345\',\'02/22/1732\'),\n(\'Thomas\', \'Jefferson\', 5559841298, \n\'ThomasJ@datanbasejournal.com\', \'9999-9999-9999-9999\', \'04/13/1743\'),\n(\'Abraham\', \'Lincoln\', 5554070123, \n\'AbrahamL@datanbasejournal.com\',\'0000-1111-2222-3333\', \'02/12/1809\');\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在尝试仅选择并查看数据,因为您是管理员,所以您将看到所有数据

\n\n
select * from clientinfo\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在尝试限制您想要限制查看的用户的权限

\n\n
CREATE USER user1 WITHOUT LOGIN;\nGRANT SELECT ON ClientInfo TO user1;\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在让我们尝试以该用户身份执行

\n\n
EXECUTE AS USER = \'AppReader\';\nSELECT * FROM ClientInfo;\nREVERT;\n
Run Code Online (Sandbox Code Playgroud)\n\n

执行上面的查询,不会显示所有数据,并且会根据屏蔽函数进行不同的屏蔽。请参见下面的屏幕截图

\n\n

在此输入图像描述

\n\n

要向用户提供访问权限,您可以使用以下查询

\n\n
CREATE USER AppAdmin WITHOUT LOGIN;\nGRANT SELECT ON ClientInfo TO AppAdmin;\nGRANT UNMASK TO AppAdmin; \n
Run Code Online (Sandbox Code Playgroud)\n

  • 我不确定是否始终加密,但根据我的理解,它隐藏静态和运动中的数据,我不确定这是否对您隐藏列有用 (2认同)