如何在MySQL中掩盖数据字段?

5

我有一个包含特殊数据的表格,需要在备份这些数据后隐藏它们。例如,我有一个包含电话号码的字段:

0020158578939

我需要把它变成这样:

002015*******

请问我应该使用哪个 SQL 命令来实现这个目标?我已经在这里搜索过了,但没有找到合适的答案。谢谢。


你的意思是要在服务器上隐藏数据吗?还是要隐藏备份中的数据?或者是其他什么意思? - DevDonkey
@MattHolbrook-Bull 我想在服务器上模糊数据。谢谢 :) - user4494497
我不明白这个意图,如果你想要像这样掩盖电话号码(无法回滚),那为什么不只使用md5()函数呢? - Santa's helper
3个回答

8
假设列名为phone,则此SQL语句将执行:
SELECT CONCAT(SUBSTR(phone, 1, 6), REPEAT('*', CHAR_LENGTH(phone) - 6)) AS masked_phone
FROM `yourTable`

这个只会显示前6个字符,并用*遮盖其余部分。

更新(根据您的评论):

备份后,您可以生成以下UPDATE语句来掩盖电话号码:

UPDATE `yourTable`
SET phone = CONCAT(SUBSTR(phone, 1, 6), REPEAT('*', CHAR_LENGTH(phone) - 6))

这只是显示被掩盖的电话号码,我需要在数据库中实际屏蔽它,这意味着我需要使用UPDATE或任何适当的查询或命令,谢谢。 - user4494497
如果我需要从一开始就像这样掩盖它****158578939,该怎么办?我尝试修改查询,但失败了。 - user4494497
尝试使用以下代码将电话号码保护:SELECT CONCAT(REPEAT('*', CHAR_LENGTH(phone) - 6), SUBSTR(phone, -6)) AS masked_phone FROM yourTable。其中的 6 是要保留的字符数。 - haim770
再次使用SELECT (^_^),请使用UPDATE :) 非常感谢您的帮助。 - user4494497
UPDATE yourTable SET phone = CONCAT(REPEAT('*', CHAR_LENGTH(phone) - 6), SUBSTR(phone, -6)) - haim770
你是最棒的。谢谢你。你帮助我创建了GDPR转储。 - James M

2

2
如果您需要再次使用此电话号码,请使用以下内容:
    base64_encode('0020158578939');

当您需要使用它时,请使用以下内容进行解码:
    base64_decode('your mysql field value of phone');

否则,请使用以下内容:
    md5('0020158578939'); sha1('0020158578939');


不,我不需要它们了,如果我可以再次解密它们,那么其他人也可以。但这是一个好答案 :) - user4494497

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接