6

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

我正在使用 SQL Server 2016。

我已经测试了新的“始终加密”功能,并且效果很好……但除了我无法将“列加密设置=启用”参数传递给 PowerBI 连接字符串之外。无论如何,PowerBI 目前不支持此功能。

我目前正在通过使用列级加密和对称密钥来测试列加密的使用,但问题是我将 OPEN SYMMETRIC KEY SymmetricKey1 & DECRYPTION BY CERTIFICATE Certificate1 代码硬编码到 SQL 中,如果用户不这样做如果有访问权限,则在用户测试时出现错误会导致 SQL 失败。

我是证书和加密的新手,我目前正处于陡峭的学习曲线上……所以放轻松。

谢谢

4

2 回答 2

2

不幸的是,AE 是唯一可以防止任何用户(包括 DBA/系统管理员)未经授权访问的现有内置解决方案。

动态数据屏蔽可防止普通用户。任何具有管理员级别访问权限的用户都可以轻松避开上面提供的示例。

列级加密通常也不保护具有管理员级权限的用户。数据库所有者或系统管理员始终可以打开密钥或替换它。通过 ekm 可以解决此问题,但在您的场景中没有可扩展或可用的方法。

流氓管理员是 Always Encrypted 旨在解决的用例之一,因此它是正确的解决方案。这是 PowerBI 团队需要实施的东西,因此如果该功能对您很重要,建议您将您的投票和评论添加到他们的反馈论坛: https ://ideas.powerbi.com/forums/265200-power-bi-ideas/建议/14732184-sql-server-2016-always-encription-features

于 2017-03-20T16:01:05.687 回答
2

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

动态数据屏蔽通过屏蔽列输出给没有权限的用户来工作。以下示例已根据此处提供的演示在 2016 年进行了测试:探索 SQL Server 2016 动态数据屏蔽 - 第一部分 - 创建使用动态数据屏蔽的表

--create a table

CREATE TABLE ClientInfo
  (ClientID int IDENTITY,
   FirstName varchar(65),
   LastName varchar(65),
   PhoneNum bigint 
      MASKED WITH (FUNCTION = 'default()'),
   EmailAddr varchar(100) 
      MASKED WITH (FUNCTION = 'email()'),
   CreditCardNum varchar(19) MASKED 
      WITH (FUNCTION = 'partial(0,"XXXX-XXXX-XXXX-",4)'),
   BirthDT date MASKED 
      WITH (FUNCTION = 'default()'));

INSERT Clientinfo (FirstName, LastName, PhoneNum, EmailAddr,CreditCardNum,BirthDT) VALUES 
('George', 'Washington', 5555814441, 
'GeorgeW@datanbasejournal.com', '0123-4567-8901-2345','02/22/1732'),
('Thomas', 'Jefferson', 5559841298, 
'ThomasJ@datanbasejournal.com', '9999-9999-9999-9999', '04/13/1743'),
('Abraham', 'Lincoln', 5554070123, 
'AbrahamL@datanbasejournal.com','0000-1111-2222-3333', '02/12/1809');

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

select * from clientinfo

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

CREATE USER user1 WITHOUT LOGIN;
GRANT SELECT ON ClientInfo TO user1;

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

EXECUTE AS USER = 'AppReader';
SELECT * FROM ClientInfo;
REVERT;

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

在此处输入图像描述

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

CREATE USER AppAdmin WITHOUT LOGIN;
GRANT SELECT ON ClientInfo TO AppAdmin;
GRANT UNMASK TO AppAdmin; 
于 2017-03-16T14:07:14.820 回答