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下面的截图
为了提供访问用户,您可以使用以下查询
CREATE USER AppAdmin WITHOUT LOGIN;
GRANT SELECT ON ClientInfo TO AppAdmin;
GRANT UNMASK TO AppAdmin;
不幸的是,AE是唯一现有的内置解决方案,可以防止任何用户(包括DBA /系统管理员)未经授权的访问。
动态数据屏蔽可防止普通用户。上面提供的示例很容易被具有管理员级别访问权限的用户旁观。
列级别加密通常不能防止具有管理员级别权限的用户。数据库所有者或系统管理员可以随时打开密钥或将其替换。有通过ekm的解决方法,但在您的方案中没有可扩展或可用的。
流氓管理员是总是加密的用例之一,旨在解决所以这是正确的解决方案。这是PowerBI团队需要实现的功能,所以如果该功能对您很重要,建议您将他们的投票和评论添加到他们的反馈论坛: https://ideas.powerbi.com/forums/265200-power-bi-ideas/suggestions/14732184-sql-server-2016-always-encription-features
感谢TheGameiswar,但我创建了标准Windows帐户用户(管理员权限)没有问题,但当我作为主要管理员'sa'登录时,此用户能够查看所有数据。 – Mako
管理员可以看到所有数据,一个系统管理员不能与另一个系统管理员区分开来,为此,您必须创建具有最少优先级的用户,如上所述 – TheGameiswar
谢谢,但这是“始终加密”功能的整个概念并隐藏来自外部DBA,系统管理员或云管理员的数据。 – Mako