Sql server 确保SQL Server敏感数据的真实性

Sql server 确保SQL Server敏感数据的真实性,sql-server,security,encryption,Sql Server,Security,Encryption,我有一个奇怪的问题,需要一个创造性的答案 我有一个程序代码,可以在一个包含3列的SQL Server表上写入敏感数据 每次程序启动时,我都需要检查这些数据 问题是,我需要一种方法来检查这3个字段上的数据是否由我的进程写入,而不是由外部或其他进程操纵或复制 因此,如果这3个字段中的任何一个字段的数据是在外部修改的,那么我的代码应该无法识别这些数据。此外,如果数据是从其他服务器复制的,则两个服务器都不应重新注册 我的想法: 1) 从SQL实例创建具有唯一数据的秘密私钥 2) 在表上创建一个二进制字段

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

我有一个程序代码,可以在一个包含3列的SQL Server表上写入敏感数据

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

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

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

我的想法:

1) 从SQL实例创建具有唯一数据的秘密私钥

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

3) 当输入数据时,用PwdEncrypt函数和私钥作为数据填充二进制字段

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

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

我需要在多台使用SQL Server Express 2008 R2和SQL Server Standard 2016的服务器上使用此功能


谢谢

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

当修改需要数据真实性的表的任何行时,将所有需要验证的字段的二进制值连接起来,并通过HMAC运行最终的二进制字符串,其中包含仅存储在进程中的密钥


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

您的方法非常正确,但您不需要任何不对称信息,一个简单的HMAC就可以了

当修改需要数据真实性的表的任何行时,将所有需要验证的字段的二进制值连接起来,并通过HMAC运行最终的二进制字符串,其中包含仅存储在进程中的密钥


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

谢谢,但你让我失去了HMAC和不对称的东西。你能再详细一点吗?你的意思是我不需要使用SQL PWD的函数吗?我还发现你的方法有一个问题:如果两台服务器运行相同的进程,并且3个字段上的数据相同,那么这两个字段都将生成相同的哈希,因此可以将数据从一台服务器复制到另一台服务器,我的进程将读取有效的数据。还是不?我不明白你不明白的部分。你能说得更具体一点吗?只需给每个正在运行的进程一个不同的HMAC密钥,它们将不再生成兼容的哈希。你说“你不需要任何度量”。你这是什么意思?谢谢,但是你让我失去了HMAC和不对称的东西。你能再详细一点吗?你的意思是我不需要使用SQL PWD的函数吗?我还发现你的方法有一个问题:如果两台服务器运行相同的进程,并且3个字段上的数据相同,那么这两个字段都将生成相同的哈希,因此可以将数据从一台服务器复制到另一台服务器,我的进程将读取有效的数据。还是不?我不明白你不明白的部分。你能说得更具体一点吗?只需给每个正在运行的进程一个不同的HMAC密钥,它们将不再生成兼容的哈希。你说“你不需要任何度量”。你这是什么意思。?