小编典典

SQL Server:如何限制对加密列的访问,甚至从dba?

sql

我是数据库加密的新手。我们需要对各种显示敏感信息的表中的某些列进行加密。我们面临的问题是,有权访问数据库或其证书和对称密钥(甚至不是dbas)的任何人都不应看到数据,只有查询数据库中数据的应用程序的某些用户才能看到该信息。

因此,我们提出了以下建议:

  • 为每个带有加密列的表创建1个对称密钥
  • 现在,使用以下命令定义受证书保护的所有密钥以及访问这些证书的存储过程:
    OPEN SYMMETRIC KEY Key_SalaryTable
    

    DECRYPTION BY CERTIFICATE SystemCertificate
    WITH PASSWORD = ‘password’;

(这意味着用于打开的证书的密码Key_SalaryTable被硬编码到存储过程中)

但是有一个问题,任何数据库管理员都只能查看存储过程或直接调用存储过程以知道如何打开密钥来查看工资表

即使我们限制每个用户对存储过程的访问,dba都可以轻松地覆盖它并提取信息,然后再重新设置限制,而没人会知道该信息已被破坏。

有谁有更好的解决方案?


阅读 158

收藏
2021-04-07

共1个答案

小编典典

另一种选择是从应用程序本身执行OPEN SYMMETRIC KEY/CLOSE SYMMETRIC KEY命令,而不是在存储过程中执行。顺便说一句,KEY在会话中保持打开状态,直到其关闭或会话终止。确保您的应用程序和数据库之间的连接已“在线”加密。

在ASP.NET端,您可以将密码保留在加密的web.config部分中。

2021-04-07