【问题标题】:SQL server - Masking / changing value uniqueidentifier before insertingSQL server - 在插入之前屏蔽/更改值唯一标识符
【发布时间】:2018-10-05 13:29:41
【问题描述】:

所以主要目标是在插入之前屏蔽或随机更改 uniqueidentifier 的值。

例如: 我有一张桌子

Create table Student
(
Student_ID masked WITH (FUNCTION='default()') DEFAULT NEWID()
Student_Name varchar(100),
)

我正在插入新数据:

insert into DDM_Student_Sample values ('B9BC5E61-0F3C-498F-AF2C-1AC16446A846','Stuart Little Joe')

结果与插入时的输出相同,即 uniqueidentifier = 'B9BC5E61-0F3C-498F-AF2C-1AC16446A846'

我创建了一个登录用户:

CREATE USER MAIN_USER FOR LOGIN MAIN_USER; 
EXEC sp_addrolemember 'db_owner', 'MAIN_USER';

toturial (http://www.sqlservercentral.com/articles/Security/149689/) 说您必须创建用户无需登录。也许这就是Student_ID不会随机变化的问题。

最后,在向表中插入数据之前,也许还有另一种方法可以随机更改它的值。或者我应该从前端改变价值?并写出类似的东西:

model.StudentId = Guid.NewGuid();
model.SaveToDatabase();

【问题讨论】:

  • 您知道 GUID 不能保证是唯一的吗?
  • 标题说的是SQL Server,但后来使用了标签。您实际使用的是哪种产品?
  • 对不起,这是sql server。

标签: c# sql sql-server random mask


【解决方案1】:

Dynamic Sql Server Data Masking 旨在防止敏感数据意外暴露。 它不会改变实际存储的值。它只是在显示数据之前将掩码应用于值。我认为这就是为什么它被称为 dynamic

结果与插入时的输出相同

我猜,您看到实际值是因为您拥有UNMASK 权限或CONTROL 权限(包括UNMASK)。 此外,没有UNMASK 权限的用户可以通过简单的选择“猜测”实际值

select from Student where Student_ID = 'B9BC5E61-0F3C-498F-AF2C-1AC16446A846'

它将显示带有掩码值的行。

在将数据插入表之前可能有另一种方法随机更改它的值

这取决于您的需求。如果您需要恢复数据,您可以使用column encrypting。如果您只需要 uglify 数据,您可以使用常规数据库触发器,或者只是从前端更改值,如您所述。

【讨论】:

  • 感谢您的回答。这对我真的很有帮助:)
【解决方案2】:
insert into DDM_Student_Sample values (NEWID(),'Stuart Little Joe')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-12
    • 1970-01-01
    • 1970-01-01
    • 2013-10-18
    • 2015-11-23
    • 2011-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多