在屏蔽列的同时从表中选择

时间:2018-11-11 21:34:58

标签: sql sql-server sql-server-2014

我想在屏蔽特定列的同时导出表,例如:

SELECT randomMask(userId), name, location FROM travel_location;

要求:

  1. 屏蔽的列必须是随机的,但对于该查询而言必须一致。例如,对于该查询,始终会将2345随机地作为abwr。
  2. 屏蔽的列必须不能被解码。运行查询后,我应该无法将abwr解码为2345。
  3. 每个查询都应以不同的方式随机屏蔽该id,这一次可能会将2345屏蔽为abwr,但下一次应该屏蔽其他内容。

示例结果:

enter image description here

2 个答案:

答案 0 :(得分:1)

您可以使用checksum()来获得合理的随机值:

select checksum(userId)

当然会有冲突,但这可能是可以接受的。

A,每次运行查询时,它都是相同的。要解决此问题,您可以添加随机数或使用时间:

select checksum(userid + rand())

或:

select checksum(convert(varchar(255), userid) + convert(varchar(255), getdate())

对于每个出现的表达式,rand()getdate()的所有行都保证是相同的。但是,它们在查询中会有所不同。

答案 1 :(得分:0)

您可以尝试(适用于SQL Server 2016或更高版本):

var modelImg = model[selectedModelId].modelImg;
var source = '/storage' + modelImg;
source = source.split("/item");
source.join("");
document.getElementById("myImg").src = source;

未获得如下所示的解锁权限的用户将看不到此更改后的真实价值。

ALTER Table travel_location
ALTER COLUMN userId ADD MASKED WITH (FUNCTION='Random(1,100000)')