当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] SQL Server 加密解释:TDE、列级加密等

作者:精品下载站 日期:2024-12-14 06:05:23 浏览:14 分类:玩电脑

SQL Server 加密解释:TDE、列级加密等


数据保护对于确保您的组织遵守 GDPR 等监管合规标准以及满足客户和业务合作伙伴的期望至关重要。数据泄露不仅会导致巨额罚款,而且声誉受损也可能同样严重。为了提供帮助,Microsoft SQL Server 支持 5 种不同类型的加密来保护数据。本文解释了它们中的每一个以及它们应该在哪里使用。

SSL 传输加密

与保护浏览器和服务器之间的流量的网站一样,SQL Server 可以配置为使用安全套接字层 (SSL) 来加密服务器实例和客户端应用程序之间传输的流量。此外,客户端可以使用服务器的证书来验证服务器的身份。 SSL 仅保护通过网络传输的数据,但与大多数其他形式的 SQL Server 加密不同,SSL 在所有受支持的 SQL Server 版本和所有版本中均可用。

在启用 SSL 之前,您需要在 SQL Server 上安装证书。执行此操作的最佳方法是向您自己的企业证书颁发机构 (CA) 请求证书。 Windows Server 可以配置为 CA,并且您可以设置客户端,以便它们信任其颁发的证书。或者,可以使用自签名证书,尽管这最适合测试环境。

SQL Server 透明数据加密 (TDE)

SQL Server 中的透明数据加密 (TDE) 通过加密磁盘上的数据库数据和日志文件来保护静态数据。它对客户端现有应用程序透明地工作,因此在启用 TDE 时不需要更改它们。 TDE 在页面级别使用实时加密。页面在写入磁盘之前会被加密,而不会增加数据和日志文件的大小,并且页面在读入内存时会被解密。 TDE 仅在 SQL Server 企业版中可用。它还适用于 Azure SQL 数据库、Azure SQL 数据仓库和并行数据仓库。

TDE 加密具有分层结构,Windows 数据保护 API (DPAPI) 位于分层结构的顶部,用于加密服务主密钥 (SMK)。您可以使用 SMK 来加密驻留在不同数据库中的凭据、链接服务器密码和数据库主密钥 (DMK)。 SQL DMK 是一种对称密钥,用于保护数据库中存储的证书私钥和非对称密钥。

SQL Server 可以生成用于 TDE 的自签名证书,或者您可以从 CA 请求证书(这是更常见的方法)。如果您决定启用 TDE,则必须备份证书以及与证书关联的私钥。您将需要在不同的 SQL Server 上恢复或附加数据库。如果在任何其他 SQL Server 数据库上启用 TDE,tempdb 系统数据库也会被加密。如果禁用 TDE,则应保留证书和私钥,因为在执行完整备份之前,部分事务日志可能会保持加密状态。

TDE 还需要数据库加密密钥 (DEK),它可以是使用主数据库中存储的证书保护的对称密钥,也可以是受使用可扩展密钥管理 (EKM) 的服务保护的非对称密钥,例如微软 Azure 密钥保管库。启用 TDE 的数据库的备份文件使用 DEK 进行加密,因此在恢复操作期间,保护 DEK 的证书必须可用。

对称密钥使用相同的密码来加密和解密数据。非对称密钥使用一个密码来加密数据(公钥),并使用另一个密码来解密数据(私钥)。您可以使用 CREATE CERTIFICATE 命令创建证书,并使用 CREATE SYMMETRIC KEY 和 CREATE ASYMMETRIC KEY Transact-SQL 命令创建数据库加密密钥。

备份加密

备份加密的工作方式与 TDE 类似,但加密的是 SQL 备份而不是活动数据和日志文件。备份加密在 SQL Server 2014 及更高版本中可用。您可以指定 AES 128、AES 192、AES 256 或 Triple DES 加密,并使用 EKM 中存储的证书或非对称密钥。此外,可以同时启用 TDE 和备份加密,但您应该使用不同的证书或密钥。

与 TDE 一样,如果启用备份加密,还必须备份证书或密钥。如果没有密钥或证书,备份文件将无法用于恢复数据。使用 SQL Server 托管备份到 Microsoft Azure 时,也可以对备份进行加密。

值得注意的是,如果您使用证书加密备份,则恢复数据时必须拥有原始证书。这意味着证书必须具有与创建备份时相同的指纹。续订证书或以任何方式更改证书都可能导致指纹发生更改。

列/单元级加密

在所有版本的 SQL Server 中都可用,可以对包含敏感数据的列启用单元级加密。数据在磁盘上加密,并在内存中保持加密状态,直到使用 DECRYPTBYKEY 函数对其进行解密。因此,尽管 SQL 数据已加密,但除了简单地使用用户上下文中的函数对其进行解密之外,它并不安全。此外,由于需要一个函数来解密数据,因此必须修改客户端应用程序才能使用单元级加密。

加密密钥管理

与 TDE 一样,您需要在使用单元级加密之前创建主密钥 (DMK)。使用单元级加密对信息进行加密有四种选项:

  • 您可以使用密码来加密和解密数据,但必须加密存储过程和函数;否则,可以在元数据中访问密码。
  • 非对称密钥提供了强大的安全性,但可能会影响性能。
  • 对称密钥通常足够强大,并且在安全性和性能之间提供了良好的平衡。
  • 证书还提供了安全性和性能之间的良好平衡,并且它们可以与数据库用户关联。

始终加密

Always Encrypted 对客户端应用程序中的敏感数据进行加密,而不会向数据库引擎泄露加密密钥,从而实现数据所有者和数据管理者之间的分离。例如,启用始终加密后,您可以确保数据库管理员将无法读取敏感数据。顾名思义,数据在静态时以及在第三方系统(例如 Azure)中使用时会被加密。

可以为各个数据库列配置始终加密。使用两种密钥:列加密密钥和列主密钥。列加密密钥保护列中的数据,列主密钥是加密一个或多个列加密密钥的“密钥保护密钥”。列主密钥存储在外部可信密钥存储中,例如 Azure Key Vault。

加密过程对客户端应用程序是透明的,但需要客户端计算机上有特殊的驱动程序。 Always Encrypted 在 SQL Server 2016 及更高版本中可用,但仅在企业版中可用。由于额外的客户端要求,Always Encrypted 最适合以数据所有者和管理者分离为主要要求的情况。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯