У меня есть приложение 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: Я ищу программное решение. –