我是数据库加密的新手。我们需要对各种显示敏感信息的表中的某些列进行加密。我们面临的问题是,有权访问数据库或其证书和对称密钥(甚至不是dbas)的任何人都不应看到数据,只有查询数据库中数据的应用程序的某些用户才能看到该信息。
因此,我们提出了以下建议:
OPEN SYMMETRIC KEY Key_SalaryTable
DECRYPTION BY CERTIFICATE SystemCertificate WITH PASSWORD = ‘password’;
(这意味着用于打开的证书的密码Key_SalaryTable被硬编码到存储过程中)
Key_SalaryTable
但是有一个问题,任何数据库管理员都只能查看存储过程或直接调用存储过程以知道如何打开密钥来查看工资表
即使我们限制每个用户对存储过程的访问,dba都可以轻松地覆盖它并提取信息,然后再重新设置限制,而没人会知道该信息已被破坏。
有谁有更好的解决方案?
另一种选择是从应用程序本身执行OPEN SYMMETRIC KEY/CLOSE SYMMETRIC KEY命令,而不是在存储过程中执行。顺便说一句,KEY在会话中保持打开状态,直到其关闭或会话终止。确保您的应用程序和数据库之间的连接已“在线”加密。
OPEN SYMMETRIC KEY
CLOSE SYMMETRIC KEY
在ASP.NET端,您可以将密码保留在加密的web.config部分中。