1
3
其他人已经提到,整个概念,嗯,值得怀疑。
一般来说,正如你所描述的,这种想法充其量是“通过模糊来实现安全”,所以它增加了一些“安全感”,但几乎没有“真正的安全感”。 不过,这里有一些简单的解决办法。
一。
将字符串存储为十六进制表示形式
在这里,我使用了未记录的fn_varbintohexstr函数来进行置乱,并使用exec来进行解读。你不能用这种方式轻易地解读所有的数据,必须用一条记录来解读——你可以把它看作是坏的(不公正的)或好的(对手必须想一想才能一下子获得所有未解读的数据)。 还有 other techniques 对于二进制到字符串的转换,如果您不喜欢这些。
2.
将字符串存储为数字(用随机盐进行xored)
请注意,这对于长度超过8个字符的字符串不起作用,因为mssql内置xor只对整数起作用(其中最大的是8字节长)。当然,可以创建一个udf来对任意长的二进制类型执行xor,但这里我试图保持简单。
这里使用随机的盐来进行加扰和解扰。您可以尝试在其上构建一些额外的安全性—例如,将salt值存储在应用程序中,并在每次调用时将其传递给数据库,因此仅数据库访问不足以轻松获取数据(当然,这仍然很容易中断—例如,使用已知的明文攻击)。
三。使用内置对称加密
这依赖于mssql2005+内置的对称加密功能(我相信,根据平台的不同,它在内部使用aes256或3des)。
另见 EncryptByKey and other crpytographic functions 和 How to: Encrypt a Column of Data 是的。这里使用了一些真正的加密,而mssql本身就支持密钥管理,因此这可能是构建一些“真正”安全性的基础(当然,还有很多方法可以搞糟它:-)。 |
2
1
更好的做法是在列中使用散列,然后创建另一个存储散列和引用号的表,然后限制对该表的访问。 |
3
0
数据的用户需要访问它,但是字段应该被隐藏,这样就没有人可以读取它了?然后,你想怎么做,告诉那些需要访问你的蛇毒算法的人,然后希望他们不会告诉别人?这种方式会让你的用户更加复杂,也会让你的雇主更加不安全。在我看来这是不可接受的。您需要某种用户限制或强加密,但加密不是这里的首选,因为每个人都需要相同的密钥,因此不需要很长时间,直到未经授权的人获得密钥,然后您必须更改整个数据库。最好的方法,真的,是一个好的用户认证和限制系统。 |
sqlrobert · SQL-如何查找不包含特定字段值的一组记录 1 年前 |
Nick Fleetwood · 调度语法的LINQ查询 2 年前 |
Mateen Bagheri · 选择表的计数并选择其自身 2 年前 |
Java · 使用交叉应用同时显示两列 2 年前 |