【问题标题】:Ensure SQL Server sensitive data authenticity确保 SQL Server 敏感数据的真实性
【发布时间】:2018-08-04 02:55:55
【问题描述】:

我有一个奇怪的问题需要创造性的答案。

我编写了一个程序,该程序在具有 3 列的 SQL Server 表上写入敏感数据。

每次启动该程序时,我都需要检查这些数据。

问题是我需要一种方法来检查这 3 个字段上的数据是否由我的进程写入,而不是由外部或其他进程操纵或复制。

因此,如果 3 个字段中的任何一个字段的数据在外部进行了修改,我的代码将无法识别这些数据。此外,如果数据是从其他服务器复制的,则两者都不应该被重新编码。

我的想法:

1) 使用来自 SQL 实例的唯一数据创建一个秘密私钥。

2) 在表上创建一个二进制字段。

3) 当数据被读取时,用 PwdEncrypt 函数和私钥填充二进制字段作为数据。

4) 读取数据时,使用 PwdCompare 检查二进制字段上的数据是否匹配私钥。

现在,如何确保其他字段不被修改?

我需要它在从 SQL Server Express 2008 R2 到 SQL Server Standard 2016 的多台服务器上工作

谢谢!

【问题讨论】:

    标签: sql-server security encryption


    【解决方案1】:

    您的方法非常正确,但这里不需要任何不对称的东西,一个简单的 HMAC 就可以了。

    当修改需要数据真实性的表的任何行时,连接您想要验证的所有字段的二进制值,并通过 HMAC 运行最终的二进制字符串,密钥仅与您的进程一起存储。

    在检查行是否有效并使用时间安全检查比较两个结果哈希时再次执行相同操作。如果它们不匹配,则说明某些内容已被篡改。

    【讨论】:

    • 谢谢,但是你用 HMAC 和不对称的东西弄丢了我。你能再详细一点吗?你的意思是我不需要使用 SQL PWD 的函数?
    • 另外我发现你的方法有一个问题:如果两台服务器运行相同的进程,并且3个字段上的数据相同,两者都会生成相同的哈希,因此可以从一台服务器复制数据到另一个,我的进程会将这些数据读取为有效数据。还是不行?
    • 我不明白你不明白的部分。你能说得更具体点吗?
    • 只需给每个正在运行的进程一个不同的 HMAC 密钥,它们将不再产生兼容的哈希值。
    • 你说“你不需要任何不对称的东西”。你这是什么意思?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-28
    • 2015-09-11
    • 1970-01-01
    • 2013-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多