【问题标题】:Database column encryption in sql server?sql server中的数据库列加密?
【发布时间】:2014-03-27 06:21:05
【问题描述】:

在我的数据库中,我使用了使用对称密钥的数据库列加密。我按照本教程 http://blog.sqlauthority.com/2009/04/28/sql-server-introduction-to-sql-server-encryption-and-symmetric-key-encryption-tutorial-with-script/ 进行操作。它使用对称密钥,对其他人不可见。但是数据库管理员可以通过执行调用对称密钥的查询来查看加密列。

USE EncryptTest
GO
OPEN SYMMETRIC KEY TestTableKey DECRYPTION
BY CERTIFICATE EncryptTestCert
SELECT CONVERT(VARCHAR(50),DECRYPTBYKEY(EncryptSecondCol)) AS DecryptSecondCol
FROM TestTable
GO

我需要在数据库级别进行加密,并且数据库管理员也不应该能够解密该列。是否可以在数据库级别加密?

【问题讨论】:

    标签: sql-server-2008 encryption encryption-symmetric


    【解决方案1】:

    如果您不希望属于该实例的 sysadmin 角色成员的 DBA 拥有对密钥的任何访问权限,则您不能允许数据库进行加密。

    即使您尝试使用CREATE SYMMETRIC KEY 的密码选项,DBA 也可以使用 Profiler 查看 SQL 语句中的密码。 DBA 当然可以访问主密钥(并且可能已经拥有它的备份)。

    如果您想对 DBA 隐藏数据,则需要让您的应用程序进行加密。

    或者,您可以信任您的 DBA 来保护他们所保护的数据。

    【讨论】:

    • 但是只要密钥和证书都在同一个数据库服务器中,任何可以访问服务器的人都可以随时解密数据。那么安全性在哪里?
    【解决方案2】:

    自从提出这个问题以来,SQL Server 2016 已经发布,并且企业版包含一个名为 Always Encrypted 的功能,该功能设计为在客户端驱动程序中使用证书对执行加密的服务器上的列加密密钥进行加密。我建议将“客户端”放在可以更好地保护证书的网站和 Web 服务的 IIS 等中间件服务器上。

    解决 DBA 无法使用的加密的第二种解决方案是引入可扩展密钥管理系统。对此的支持也是企业独有的功能。可扩展密钥管理系统是一个单独的扩展板或与 SQL Server 接口的系统,用于卸载所有密钥管理和加密处理,这些处理可以由不同于 DBA 的团队管理。

    第三,您可以设计一种解决方案,其中包括删除证书的私钥并将其放在 DBA 无法访问的位置。当私钥从加密层次结构中的证书中删除时,只能对数据进行加密。

    【讨论】:

      猜你喜欢
      • 2011-07-18
      • 1970-01-01
      • 2010-09-24
      • 1970-01-01
      • 2013-08-14
      • 1970-01-01
      • 2012-01-15
      • 2012-02-08
      • 1970-01-01
      相关资源
      最近更新 更多