在我的数据库中,我使用了使用对称密钥的数据库列加密。我遵循了这个教程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我需要一个数据库级别的加密和数据库管理员也应该不能解密的列。在数据库级别加密是可能的吗?
发布于 2014-04-06 13:46:25
如果您不希望作为该实例上的sysadmin角色成员的DBA能够访问密钥,那么就不能允许数据库进行加密。
即使您尝试使用CREATE SYMMETRIC KEY的PASSWORD选项,数据库管理员也可以使用事件探查器查看SQL语句中的密码。DBA当然可以访问主密钥(并且可能已经有了它的备份)。
如果您想对DBA隐藏数据,则需要让应用程序进行加密。
或者,您可以信任您的DBA来处理他们所保护的数据。
发布于 2016-09-03 00:46:24
自从提出这个问题以来,SQL Server 2016已经发布,企业版包含一个称为Always Encrypted的功能,该功能是通过客户端驱动程序中的证书设计的,该证书在执行加密的服务器上加密列加密密钥。我建议将“客户端”放在像IIS这样的中间件服务器上,用于网站和web服务,在那里证书可以得到更好的保护。
DBA无法处理的第二种加密解决方案是引入可扩展密钥管理系统。对此的支持也是仅限企业的特性。可扩展密钥管理系统是与SQL Server连接的独立扩展板或系统,用于卸载所有密钥管理和加密处理,这些密钥管理和加密处理可以由不同于DBA的团队进行管理。
第三,您可以设计一个解决方案,其中包括删除证书的私钥,并将其放在DBA无法访问的位置。当私钥从加密层次结构中的证书中删除时,数据只能加密。
https://stackoverflow.com/questions/22679781
复制相似问题