在我的数据库中,我使用对称密钥进行数据库列加密。我按照本教程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
我需要在数据库级别加密,数据库管理员也不应该解密该列。是否有可能在数据库级加密?
答案 0 :(得分:0)
如果您不希望作为该实例上sysadmin角色成员的DBA拥有对密钥的任何访问权限,则您不能允许数据库进行加密。
即使您尝试使用CREATE SYMMETRIC KEY的PASSWORD选项,DBA也可以使用Profiler查看SQL语句中的密码。 DBA当然可以访问主密钥(并且可能已经备份了它)。
如果要隐藏DBA中的数据,则需要让应用程序进行加密。
或者您可以信任您的DBA以及他们正在保护的数据。
答案 1 :(得分:0)
自从提出这个问题以来,SQL Server 2016已经发布,企业版包含一个名为Always Encrypted的功能,该功能的设计是在客户端驱动程序中使用证书加密执行加密的服务器上的列加密密钥。我建议把#34;客户端"在像IIS这样的中间件服务器上,可以更好地保护证书的网站和Web服务。
第二种加密超出DBA范围的解决方案是引入可扩展密钥管理系统。对此的支持也是仅限企业版的功能。可扩展密钥管理系统是一个单独的扩展板或系统,与SQL Server连接,可卸载所有密钥管理和加密处理,这些处理可由不同于DBA的团队管理。
第三,您可以设计一个解决方案,其中包括删除证书的私钥并将其置于DBA无法访问的位置。从加密层次结构中的证书中删除私钥时,只能加密数据。