1)
CREATE SYMMETRIC KEY SecureSymmetricKey
WITH ALGORITHM = DESX
ENCRYPTION BY PASSWORD = N'StrongPassword';
我试图弄清楚 SQL Server 加密。
- 一旦我执行了上面的代码,以后有什么方法可以找出密码的值是
SecureSymmetricKey
多少?
2)
如果现在我这样做Certificates
:我(管理员)创建
CREATE MASTER KEY ENCRYPTION
BY PASSWORD = 'DB Master key password!'
GO
只有我知道密码。
后来我:
CREATE CERTIFICATE MyCertificate
WITH SUBJECT = 'My Certificate Subject'
CREATE SYMMETRIC KEY MySymetricKey
WITH ALGORITHM = TRIPLE_DES ENCRYPTION
BY CERTIFICATE MyCertificate
到现在为止,一切正常。
现在,当黑客来到电脑前,他所要做的就是:
OPEN SYMMETRIC KEY MySymetricKey DECRYPTION
BY CERTIFICATE MyCertificate
接着 :
SELECT
convert( NVARCHAR(max), decryptbykey(namePAss))
FROM tbl1
那么证书的保护在哪里呢?没有人要求他输入密码(就像密码加密一样(就像我的第一个问题一样)......?他只需要知道证书名称
打开对称密钥 MySymetricKey 通过证书解密 MyCertificate
找出证书名称是什么也不是问题......那么黑客的解密数据保护在哪里?
3)
当我使用
CREATE SYMMETRIC KEY SecureSymmetricKey
WITH ALGORITHM = DESX
ENCRYPTION BY PASSWORD = N'StrongPassword';
DECLARE @str NVARCHAR(100)
SET @str = 'lala';
OPEN SYMMETRIC KEY SecureSymmetricKey
DECRYPTION BY PASSWORD = N'StrongPassword';
我想保护谁的数据? 从客户端发送到服务器的数据?(数据是通过纯文本发送的 - 在发送数据之前我无法激活 SQL 命令......)或有权访问 SQL 服务器的人?
您正在防止意外的媒体丢失(带有数据库的笔记本电脑丢失,您的驱动器出现在跳蚤市场上并带有数据库或备份的副本)等等。处理本身的任何方案(数据库引擎或应用程序)需要在没有用户提供密码的情况下访问数据,仅提供访问权限以防止媒体丢失。加密密钥层次结构植根于系统 DPAPI 加密密钥,即服务帐户的密码。这种情况永远不会保护访问您的 SQL Server 的黑客,也不是为了保护这种情况。
另一种方法是在每次使用应用程序时询问用户密码,并使用此密码打开加密密钥层次结构顶部的密钥(通常是数据库中的证书)。这种方案很少部署在一些租户不信任托管操作/管理员的多租户场景中。
保护措施是,如果有人获得此数据库的副本(通过窃取备份、对用户数据库进行 SAN 快照、窃取用户数据库的硬盘驱动器等)并尝试将其附加到另一个 SQL Server,他们将无法做到。
它不能保护一切——它只是图片的一部分。有关更多信息,请查看 Denny Cherry 的优秀书籍 Securing SQL Server:
http://www.amazon.com/Securing-SQL-Server-Protecting-Attackers/dp/1597496251/ref=sr_1_1?ie=UTF8&qid=1325431386&sr=8-1