加密层次结构

SQL Server 使用分层加密和密钥管理基础结构加密数据。 每个层都使用证书、非对称密钥和对称密钥的组合来加密其下方的层。 非对称密钥和对称密钥可以存储在 SQL Server 外部的可扩展密钥管理(EKM)模块中。

下图显示了加密层次结构的每个层对它下面的层进行加密,并显示最常见的加密配置。 对层次结构开头的访问通常受密码保护。

在堆栈中显示一些加密组合。

请记住以下概念:

  • 为了获得最佳性能,请使用对称密钥而不是证书或非对称密钥加密数据。

  • 数据库主密钥受服务主密钥保护。 服务主密钥由 SQL Server 设置创建,并使用 Windows 数据保护 API(DPAPI)进行加密。

  • 其他加密层次结构可以堆叠其他层。

  • 可扩展密钥管理(EKM)模块在 SQL Server 之外保留对称或非对称密钥。

  • 透明数据加密(TDE)必须使用称为数据库加密密钥的对称密钥,该密钥由主数据库的数据库主密钥保护的证书或存储在 EKM 中的非对称密钥保护。

  • 服务主密钥和所有数据库主密钥都是对称密钥。

下图以替代方式显示相同的信息。

在滚轮中显示一些加密组合。

此图演示了以下其他概念:

  • 在此图中,箭头指示常见的加密层次结构。

  • EKM 中的对称和非对称密钥可以保护对 SQL Server 中存储的对称和非对称密钥的访问。 与 EKM 关联的虚线指示 EKM 中的密钥可以替换存储在 SQL Server 中的对称和非对称密钥。

加密机制

SQL Server 提供以下加密机制:

  • Transact-SQL 函数

  • 非对称密钥

  • 对称密钥

  • 证书

  • 透明数据加密

Transact-SQL 函数

使用 Transact-SQL 函数插入或更新单个项时,可以对其进行加密。 有关详细信息,请参阅 ENCRYPTBYPASSPHRASE(Transact-SQL)DECRYPTBYPASSPHRASE(Transact-SQL)。

证书

公钥证书(通常称为证书)是一个数字签名语句,用于将公钥的值绑定到保存相应私钥的人员、设备或服务的标识。 证书由证书颁发机构(CA)颁发和签名。 从 CA 接收证书的实体是该证书的主体。 通常,证书包含以下信息。

  • 主题的公钥。

  • 主题的标识符信息,例如名称和电子邮件地址。

  • 有效期。 这是证书被视为有效的时间长度。

    证书仅在指定时间段内有效;每个证书都包含 “有效发件人 ”和 “有效 日期”。 这些日期设置有效期的边界。 证书有效期过后,必须请求当前过期的证书的使用者请求新证书。

  • 颁发者标识符信息。

  • 颁发者的数字签名。

    此签名证明公钥与使用者的标识符信息之间的绑定的有效性。 (数字签名信息的过程需要将信息以及发送方持有的一些机密信息转换为名为签名的标记。

证书的主要好处是,它们减轻了主机需要为单个使用者维护一组密码的需求。 相反,主机只是在证书颁发者中建立信任,然后可能会对无限数量的证书进行签名。

当主机(如安全 Web 服务器)将颁发者指定为受信任的根颁发机构时,主机会隐式信任颁发者用于建立颁发者所颁发证书绑定的策略。 实际上,主机信任颁发者已验证证书使用者的身份。 主机通过将颁发者的自签名证书(包含颁发者的公钥)放入主计算机的受信任根证书颁发机构证书存储,将颁发者指定为受信任的根颁发机构。 仅当中间或从属证书颁发机构具有来自受信任根证书颁发机构的有效认证路径时,才信任中间证书颁发机构或从属证书颁发机构。

颁发者可以在证书过期之前吊销证书。 吊销会取消公钥与证书中声明的标识的绑定。 每个颁发者都维护一个证书吊销列表,当程序检查任何给定证书的有效性时,这些列表可供程序使用。

SQL Server 创建的自签名证书遵循 X.509 标准,并支持 X.509 v1 字段。

非对称密钥

非对称密钥由私钥和相应的公钥组成。 每个密钥都可以解密由另一个密钥加密的数据。 非对称加密和解密相对资源密集型,但它们提供比对称加密更高的安全性级别。 非对称密钥可用于对数据库中存储的对称密钥进行加密。

对称密钥

对称密钥是一个用于加密和解密的密钥。 使用对称密钥进行加密和解密是快速的,适用于数据库中的敏感数据的例程使用。

透明数据加密

透明数据加密(TDE)是使用对称密钥进行加密的一种特殊情况。 TDE 使用该称为数据库加密密钥的对称密钥来加密整个数据库。 数据库加密密钥受数据库主密钥或 EKM 模块中存储的非对称密钥保护的其他密钥或证书保护。 有关详细信息,请参阅透明数据加密 (TDE)

保护 SQL Server

安全函数 (Transact-SQL)

另请参阅

权限层次结构(数据库引擎)
安全对象