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

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

问题描述:

我试图通过PowerBI访问工资信息的团队领导,但是加密了来自其他用户和DBA的这些数据。拒绝访问此列数据的用户仍应该能够执行查询,但只能看到薪资信息的加密字符。SQL Server 2016:隐藏DBA的列数据,但特定的用户可以通过应用程序查看数据

我使用SQL Server 2016

我已经测试了新的“始终加密”功能,这完美的作品...但与我无法通过“列加密设置例外= enabled'参数给PowerBI连接字符串。由所有帐户PowerBI目前不支持此功能。

我目前正在通过使用列级加密和对称密钥来测试列加密的使用情况,但问题在于,我将开放对称密钥SymmetricKey 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, 
'[email protected]', '0123-4567-8901-2345','02/22/1732'), 
('Thomas', 'Jefferson', 5559841298, 
'[email protected]', '9999-9999-9999-9999', '04/13/1743'), 
('Abraham', 'Lincoln', 5554070123, 
'[email protected]','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; 

上面的查询执行的,不会出现所有的数据和将被屏蔽不同的基于蒙面functions.See下面的截图

enter image description here

为了提供访问用户,您可以使用以下查询

CREATE USER AppAdmin WITHOUT LOGIN; 
GRANT SELECT ON ClientInfo TO AppAdmin; 
GRANT UNMASK TO AppAdmin; 
+0

感谢TheGameiswar,但我创建了标准Windows帐户用户(管理员权限)没有问题,但当我作为主要管理员'sa'登录时,此用户能够查看所有数据。 – Mako

+0

管理员可以看到所有数据,一个系统管理员不能与另一个系统管理员区分开来,为此,您必须创建具有最少优先级的用户,如上所述 – TheGameiswar

+0

谢谢,但这是“始终加密”功能的整个概念并隐藏来自外部DBA,系统管理员或云管理员的数据。 – Mako

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

动态数据屏蔽可防止普通用户。上面提供的示例很容易被具有管理员级别访问权限的用户旁观。

列级别加密通常不能防止具有管理员级别权限的用户。数据库所有者或系统管理员可以随时打开密钥或将其替换。有通过ekm的解决方法,但在您的方案中没有可扩展或可用的。

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