Sql server 确保SQL Server敏感数据的真实性
我有一个奇怪的问题,需要一个创造性的答案 我有一个程序代码,可以在一个包含3列的SQL Server表上写入敏感数据 每次程序启动时,我都需要检查这些数据 问题是,我需要一种方法来检查这3个字段上的数据是否由我的进程写入,而不是由外部或其他进程操纵或复制 因此,如果这3个字段中的任何一个字段的数据是在外部修改的,那么我的代码应该无法识别这些数据。此外,如果数据是从其他服务器复制的,则两个服务器都不应重新注册 我的想法: 1) 从SQL实例创建具有唯一数据的秘密私钥 2) 在表上创建一个二进制字段 3) 当输入数据时,用PwdEncrypt函数和私钥作为数据填充二进制字段 4) 读取数据时,使用PwdCompare检查二进制字段上的数据是否与私钥匹配 现在,如何确保其他字段不被修改 我需要在多台使用SQL Server Express 2008 R2和SQL Server Standard 2016的服务器上使用此功能Sql server 确保SQL Server敏感数据的真实性,sql-server,security,encryption,Sql Server,Security,Encryption,我有一个奇怪的问题,需要一个创造性的答案 我有一个程序代码,可以在一个包含3列的SQL Server表上写入敏感数据 每次程序启动时,我都需要检查这些数据 问题是,我需要一种方法来检查这3个字段上的数据是否由我的进程写入,而不是由外部或其他进程操纵或复制 因此,如果这3个字段中的任何一个字段的数据是在外部修改的,那么我的代码应该无法识别这些数据。此外,如果数据是从其他服务器复制的,则两个服务器都不应重新注册 我的想法: 1) 从SQL实例创建具有唯一数据的秘密私钥 2) 在表上创建一个二进制字段
谢谢 您的方法非常正确,但这里不需要任何不对称的东西,一个简单的HMAC就可以了 当修改需要数据真实性的表的任何行时,将所有需要验证的字段的二进制值连接起来,并通过HMAC运行最终的二进制字符串,其中包含仅存储在进程中的密钥
检查行是否有效时再次执行相同操作,并使用时间安全检查比较两个结果哈希。如果它们不匹配,则说明某些内容已被篡改。您的方法非常正确,但您不需要任何不对称信息,一个简单的HMAC就可以了 当修改需要数据真实性的表的任何行时,将所有需要验证的字段的二进制值连接起来,并通过HMAC运行最终的二进制字符串,其中包含仅存储在进程中的密钥
检查行是否有效时再次执行相同操作,并使用时间安全检查比较两个结果哈希。如果它们不匹配,说明有些东西被篡改了。谢谢,但你让我失去了HMAC和不对称的东西。你能再详细一点吗?你的意思是我不需要使用SQL PWD的函数吗?我还发现你的方法有一个问题:如果两台服务器运行相同的进程,并且3个字段上的数据相同,那么这两个字段都将生成相同的哈希,因此可以将数据从一台服务器复制到另一台服务器,我的进程将读取有效的数据。还是不?我不明白你不明白的部分。你能说得更具体一点吗?只需给每个正在运行的进程一个不同的HMAC密钥,它们将不再生成兼容的哈希。你说“你不需要任何度量”。你这是什么意思?谢谢,但是你让我失去了HMAC和不对称的东西。你能再详细一点吗?你的意思是我不需要使用SQL PWD的函数吗?我还发现你的方法有一个问题:如果两台服务器运行相同的进程,并且3个字段上的数据相同,那么这两个字段都将生成相同的哈希,因此可以将数据从一台服务器复制到另一台服务器,我的进程将读取有效的数据。还是不?我不明白你不明白的部分。你能说得更具体一点吗?只需给每个正在运行的进程一个不同的HMAC密钥,它们将不再生成兼容的哈希。你说“你不需要任何度量”。你这是什么意思。?