sql-server - SQL Server 2016 : Hide column data from DBAs but specific users can view data through application

标签 sql-server encryption powerbi sql-server-2016 always-encrypted

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

我正在使用 SQL Server 2016。

我已经测试了新的“始终加密”功能,这非常有效……但我无法将“列加密设置=启用”参数传递给 PowerBI 连接字符串。众所周知,PowerBI 目前不支持此功能。

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

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

谢谢

最佳答案

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

动态数据屏蔽的工作原理是将列输出屏蔽给没有权限的用户。以下示例已在 2016 年基于此处提供的演示进行了测试:Exploring SQL Server 2016 Dynamic Data Masking – Part One - Creating a Table that uses Dynamic Data Masking

--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;

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

enter image description here

要向用户提供访问权限,您可以使用以下查询
CREATE USER AppAdmin WITHOUT LOGIN;
GRANT SELECT ON ClientInfo TO AppAdmin;
GRANT UNMASK TO AppAdmin; 

关于sql-server - SQL Server 2016 : Hide column data from DBAs but specific users can view data through application,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42835921/

相关文章:

powerbi - 此查询包含无法在 DirectQuery 中使用的转换

sql - 在 SQL Server 中按多列分组

c# - Entity Framework 导致超时错误

sql-server - 在 SQL 查询中使用 BCP

encryption - 解密需要 M 个 key 中的 N 个的加密方法

c# - 如何为我的软件的试用安装强制执行到期日期?

sql-server - 没有 CASE 语句的存储过程

encryption - 如何加密程序以防止反汇编?

mdx - 我可以针对 Power BI 运行我自己的 DAX 或 MDX 查询吗?

csv - 在 Power BI 中导入 CSV 时防止小数点分隔符丢失