【问题标题】:How to MASK(obfuscate) certain column in SQL server 2012?如何屏蔽(混淆)SQL Server 2012 中的某些列?
【发布时间】:2018-11-28 10:25:17
【问题描述】:

我想将数据库访问权限授予其他人,但我想隐藏信用卡号和电子邮件地址等敏感数据。 Masked 函数在 SQL Server 2012 中不起作用。

解决此问题的最佳方法是什么?

【问题讨论】:

  • 屏蔽不是一项安全功能。首先,没有理由让新帐户有权访问每个 数据库对象。您可以仅授予特定表或视图的权限,这些表返回允许帐户读取的字段。您可以use column-level permissions 防止用户访问敏感字段,即使在他/她具有读取权限的表中也是如此
  • 当我向其他人授予访问权限时,我必须像这样 7588-XXXX-XXXX-XX96 屏蔽信用卡号
  • 您根本不需要授予对列的访问权限。

标签: sql sql-server tsql sql-server-2008 sql-server-2012


【解决方案1】:

您无法使用dynamic data maskingrow level security 之类的新内容来限制对某些字段或行的访问,因此您可以使用旧方法。

创建视图并仅公开您需要显示的字段。仅授予对这些视图的访问权限。

不要对动态数据屏蔽感到难过。这不是一项安全功能,并且有多种技术可以公开信息。

试试这样的:

CREATE VIEW [dbo].[vw_SenstiveData]
AS
SELECT [UserID]
      ,'XXXXXXXX' AS [UserName]
      ,LEFT([SocialID], 4) + '-XXX-XXX-XXXXXXX-' + RIGHT([SocialID], 3) AS [SocialID]
FROM [dbo].[Users]

【讨论】:

  • 我想显示数据,但它应该像这个信用卡号一样被屏蔽:8888-XXXX-XXXX-XX65
  • @vickykumar 您完全可以在视图中执行此操作。您可以应用自己的标量函数来格式化数据,也可以添加硬编码字符串,也可以跳过该列。让我知道你是否需要帮助编写这样的函数。
  • 如何实现这一点我有 3 个包含敏感信息的表。你能给我一些参考吗?
  • @vickykumar 只是在视图的 SQL 查询中编写混淆代码。您不需要任何引用,只需使用LEFT(5)RIGHT(2) 和其他子字符串函数返回您想要的内容,将它们与X 字符连接
  • 我的先生说我们不能使用视图。我们只需要屏蔽原始表中的列,以便其他访问数据库的人看不到敏感数据,我们需要为其他一些用户取消屏蔽数据。我怎样才能做到这一点?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-15
  • 2017-05-21
  • 2019-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多