出于安全原因,我们在windows上禁用了TLS 1.0和旧协议,在以下注册表路径下只启用了TLS 1.1和TLS 1.2:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols 之后,SQL服务赢了'不以以下错误开头:
2015-02-13 17:35:10.12 spid13s The server could not load the certificate it needs to initiate an SSL connection. It returned the following error: 0x80090331. Check certificates to make sure they are valid.
2015-02-13 17:35:10.12 spid13s Error: 26014, Severity: 16, State: 1.
2015-02-13 17:35:10.12 spid13s Unable to load user-specified certificate [Cert Hash(sha1) "9B49E2FB65EE880F7C8818A90187F572566C9213"]. The server will not accept a connection. You should verify that the certificate is correctly installed. See "Configuring Certificate for Use by SSL" in …Run Code Online (Sandbox Code Playgroud) 使用什么证书来加密实例上的每个数据库。
我可以使用以下方法获取数据,但如何编写查询
USE master
GO
-- this provides the list of certificates
SELECT * FROM sys.certificates
-- this provides the list of databases (encryption_state = 3) is encrypted
SELECT * FROM sys.dm_database_encryption_keys
WHERE encryption_state = 3;
Run Code Online (Sandbox Code Playgroud)
我注意到 sys.certifcates.thumbprint 和 sys.dm_database_encryption_keys.encryptor_thumbprint 列包含相同的数据。
我使用以下语句尝试了 aes-encryption:
SELECT encrypt('test', 'key', 'aes');
Run Code Online (Sandbox Code Playgroud)
这有效,但我无法解密该值。我将它插入到数据类型bytea的字段中,但我不确定这是否正确。
SELECT decrypt(pw, 'key', 'aes') FROM table WHERE ID = 1;
Run Code Online (Sandbox Code Playgroud)
给我错误
错误:函数解密(bytea,未知,未知)不存在第
1 行:选择解密(密码,'key','aes')FROM tabelle WHERE ID = 7; ^
提示:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。
这是否真的意味着 encrypt() 是一个现有的函数,但不是decrypt()?我还能如何检索 aes 加密的值?
我正在阅读一些关于透明数据加密的文档和白皮书。一些文档也提到备份服务主密钥(为了澄清,我不是在谈论数据库主密钥)。我只是不完全理解为什么这是必要的,因为我能够在不使用任何服务主密钥的情况下将具有 TDE 加密的数据库从服务器 A(备份)备份/恢复到服务器 B(恢复)。
什么场景下需要恢复Service Master Key?
我的问题与以下两个实例的实验有关:
SQL Server 2017 Express 实例 (Microsoft SQL Server 2017 (RTM-CU16))
SQL Server 2014 Express 实例 (Microsoft SQL Server 2014 (SP2-CU18))
我使用函数ENCRYPTBYPASSPHRASE来加密文本并将结果用作 DECRYPTBYPASSPHRASE 的@ciphertext。我的测试结果如下:
根据这个微软修复,
[...] SQL Server 2017 使用 SHA2 散列算法来散列密码。SQL Server 2016 和更早版本的 SQL Server 使用不再被视为安全的 SHA1 算法。
但是,如果函数 DECRYPTBYPASSPHRASE 上没有与此相关的参数,它如何知道用于加密数据的算法是什么?它是加密数据的一部分吗?
根据我的测试结果,我猜 SQL Server 总是使用实例上可用的较新版本的算法来加密数据,但会尝试所有算法来解密数据,直到找到适合的算法或在找不到相应算法时返回 NULL . 这只是一个猜测,因为我找不到任何方法来检查 SQL Server 用于解密加密数据的散列算法。
在 SQL Server 中,我可以在协议设置中“强制加密”。如果我将该设置保留为“否”,则任何客户端仍可能需要加密。
我能以某种方式查看到数据库的哪些连接正在使用加密吗?
有没有一种快速的方法来查找 SQL Server 2008 R2 中所有加密/具有加密数据的列?
我需要使开发服务器中所有加密列中的数据无效(根据我们的业务规则)。我知道大多数专栏,因为我们经常使用它们,但我想要彻底,而且我希望能够证明我已经找到了它们。
我搜索了网络,查看了INFORMATION_SCHEMA并检查了我认为有用的 DMV 以及sys.columns和sys.objects - 但到目前为止还没有运气。
sql-server sql-server-2008-r2 encryption dmv information-schema
我试图了解不同的设置如何影响我的服务器 - 客户端通信的行为。在服务器上,我安装了一个自签名 CA,并带有已发布的交换证书,该证书也已配置为供我的 SQL 服务使用。
起初,当客户端上尚未安装根 CA 时,我希望看到此连接失败。但无论我做什么,它似乎都有效。
为了更好地理解原因,我试图列出所有选项以及它们应该产生的效果。但我不确定我是否理解正确......
任何人都可以帮我更正并填写这里缺少的部分吗?
在SQL Server 上启用“强制加密”设置时:
Encrypt=True;TrustServerCertificate=True;我的连接字符串中的设置相同。客户端对是否应该使用加密以及是否应该信任服务器没有发言权。在SQL Server 上启用“强制协议加密”设置时:
在客户端上使用“强制协议加密”设置时:
在服务器和客户端上启用“强制协议加密”设置时:
在服务器上同时启用“强制加密”和“强制协议加密”时:
我在开发环境中工作以更好地理解TDE加密。我让它与另一台服务器上的备份和恢复一起工作。有几个问题,我知道我需要使用相应的私钥备份证书。
USE master;
GO
BACKUP CERTIFICATE Test
TO FILE = 'C:\Test.cer'
WITH PRIVATE KEY
(FILE = 'C:\Test.pvk',
ENCRYPTION BY PASSWORD = 'Example12#')
Run Code Online (Sandbox Code Playgroud)
如果发生故障,这些需要在新服务器上移动/恢复。在需要恢复到另一台服务器的情况下,我还需要从源服务器备份什么吗?
还有关于私钥存储的任何建议吗?我目前的想法是将证书、私钥和密码备份到单独备份和异地复制的 KeePass 数据库中。
这留下了一个问题,即将 KeePass 私钥备份到哪里?
尝试启用加密时出错:
[ERROR] SSL error: Unable to get private key from '/etc/mysql/ssl/nginx.key'
[Warning] Failed to set up SSL because of the following SSL library error: Unable to get private key
Run Code Online (Sandbox Code Playgroud)
/etc/mysql/conf.d/encrypt.cnf:
[mysqld]
ssl-ca=/etc/mysql/ssl/nginx.ca
ssl-cert=/etc/mysql/ssl/nginx.crt
ssl-key=/etc/mysql/ssl/nginx.key
Run Code Online (Sandbox Code Playgroud)
密钥是这样生成的:
openssl req -newkey rsa:4096 -nodes -keyout nginx.key -subj "/C=US/ST=California/L=Sacramento/O=MyOrg/OU=MyDev/CN=MyApp"
Run Code Online (Sandbox Code Playgroud)
openssl 检查得很好。
我尝试更改权限、所有者、文件名、移动到不同的目录、禁用 SELinux(它已经被禁用)、查看 AppArmor 日志(它不会阻止它)、将“BEGIN/END PRIVATE KEY”更改为“BEGIN” /END RSA 私钥'。
它出什么问题了?
encryption ×10
sql-server ×8
ssl ×3
transparent-data-encryption ×3
connections ×1
dmv ×1
functions ×1
mysql ×1
postgresql ×1
security ×1
ubuntu ×1