我有一個C#應用程序執行到SQL數據庫的數據庫事務。數據庫應該只由軟件進行更新,所以我嘗試使用下面的代碼進行數字簽名的軟件行:保護數據庫行不受手動修改
private static byte[] SignData(SignedData data)
{
if (data == null) throw new ArgumentNullException("data");
RSACryptoServiceProvider csp = null;
X509Certificate2 cert = data.Certificate;
csp = (RSACryptoServiceProvider)cert.PrivateKey;
if (csp == null)
{
return null;
}
byte[] hash;
using (var sha1 = new SHA1Managed())
{
var vv = data.Data.ToList();
vv.Sort();
hash = sha1.ComputeHash(vv.ToArray());
}
return csp.SignHash(hash, null);
}
而對於verifiying數字簽名我使用以下命令:
static bool VerifyData(VerifiedData data)
{
if (data == null) throw new ArgumentNullException("data");
if (data.Certificate != null)
{
X509Certificate2 cert = data.Certificate;
//var csp = (RSACryptoServiceProvider)cert.PublicKey.Key;
var csp = (RSACryptoServiceProvider)cert.PrivateKey;
byte[] hash;
using (var sha1 = new SHA1Managed())
{
var vv = data.Data.ToList();
vv.Sort();
hash = sha1.ComputeHash(vv.ToArray());
}
return csp.VerifyHash(hash, null, data.Signature.ToArray());
}
throw new ArgumentNullException("Certificate");
}
此代碼可以檢測數據庫中的手動更新,但對於大量記錄驗證方法需要很長時間。任何其他想法保護數據庫中的數據?或對此代碼進行任何修改以更快執行?
編輯:此外,數據庫管理員不應該能夠修改數據庫中的數據。
標記您正在使用的dbms產品。 – jarlh
您可以刪除除使用軟件的帳戶之外的所有用戶的DML權限 – TheGameiswar
@TheGameiswar:我正在尋找軟件解決方案。 –