首页 > 数据库 >SQL Server 透明数据加密TDE for AlwaysOn

SQL Server 透明数据加密TDE for AlwaysOn

时间:2023-04-18 11:01:11浏览次数:53  
标签:AlwaysOn KEY -- TDE Server TDECert FILE 节点


 上篇留下了一个问题,如何将已启用TDE的数据库加入AG?

实际上TDE for AlwaysOn分两种情况:

  • 对已在AG中的数据库启用TDE
  • 已启用TDE的数据库加入AG(更复杂)

注意如果在数据库镜像、日志传送、AlwaysOn中使用TDE,则主从数据库都将被加密,不必显式启用辅助数据库加密,事务日志在它们之间发送时将被加密。

 

一、 对已在AG中的数据库设置TDE

SQL Server 透明数据加密TDE for AlwaysOn_备份文件

注意以下步骤如果已经有的则不需要再建,否则会报错

1. 主节点建DMK 

无域alwayson已创建,此步可忽略

USE MASTER
GO
-- Create a Master Key
CREATE MASTER KEY ENCRYPTION BY Password = '<password>';

-- Backup the Master Key
BACKUP MASTER KEY
TO FILE = '\\<PRIMARYSERVERNAME>\E$\MSSQL\TDE\<PRIMARYSERVERNAME>_BACKUPKEY'
ENCRYPTION BY Password = '<password>';

2. 主节点建证书

无域alwayson已创建,此步可忽略

-- Create Certificate Protected by Master Key
CREATE Certificate TDECert WITH Subject = 'TDE_CERT';

-- Backup the Certificate
BACKUP Certificate TDECert
  TO FILE = 'C:\TDE\TDECert_backup'
WITH Private KEY (FILE = 'C:\TDE\TDECert_key',
ENCRYPTION BY Password = 'xxx');

3. 主节点建DEK

USE testag
GO
-- Create a Database Encryption Key
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_128
ENCRYPTION BY SERVER CERTIFICATE TDECert;
GO

4. 从节点创建及备份DMK

无域alwayson已创建,此步可忽略

-- 检查DMK是否已存在
USE MASTER;
GO
SELECT * FROM sys.symmetric_keys WHERE name = '##MS_DatabaseMasterKey##'

-- 若不存在则创建
CREATE MASTER KEY ENCRYPTION BY Password = '<password>';

-- 备份DMK
BACKUP MASTER KEY
TO FILE = '\\<SECONDARYSERVERNAME>\E$\MSSQL\TDE\<SECONDARYSERVERNAME>_BACKUPKEY'
ENCRYPTION BY Password = '<password>';

5. 从节点创建及备份证书

无域alwayson已创建,此步可忽略

-- Create Certificate Protected by Master Key
CREATE CERTIFICATE TDECert   
FROM FILE = 'C:\TDE\TDECert_backup'    
WITH PRIVATE KEY (FILE = 'C:\TDE\TDECert_key',   
DECRYPTION BY PASSWORD = 'xxx');
GO

-- Backup the Certificate
BACKUP Certificate TDECert
  TO FILE = 'C:\TDE\TDECert_backup'
WITH Private KEY (FILE = 'C:\TDE\TDECert_key',
ENCRYPTION BY Password = 'xxx');

6. 主节点启用TDE

ALTER DATABASE testag SET ENCRYPTION ON;

7. 检查加密情况

USE MASTER;
GO
SELECT db.name,db.is_encrypted,dm.encryption_state,dm.percent_complete,dm.key_algorithm,dm.key_length
FROM sys.databases db LEFT OUTER JOIN sys.dm_database_encryption_keys dm ON db.database_id = dm.database_id;

主节点

SQL Server 透明数据加密TDE for AlwaysOn_备份文件_02

从节点

SQL Server 透明数据加密TDE for AlwaysOn_备份文件_03

 

二、 已启用TDE的数据库加入AG

更复杂,无法使用向导工具将TDE加密库加入AG,只能手动添加。

1. 主节点建DMK

无域alwayson已创建,此步可忽略

-- 主节点是否存在DMK
USE master;
GO
SELECT * FROM  sys.symmetric_keys WHERE name = '##MS_DatabaseMasterKey##'
-- 若不存在则创建
CREATE MASTER KEY ENCRYPTION BY Password = '<password>';

2. 主节点备份证书

无域alwayson已创建,此步可忽略

-- 证书是否存在
USE master;
GO
SELECT db_name(database_id) DatabaseName,cer.name as CertificateName
FROM sys.dm_database_encryption_keys dek INNER JOIN sys.certificates cer ON dek.encryptor_thumbprint = cer.thumbprint
WHERE db_name(database_id) ='<TDE_DATABASE>'

-- 备份证书
BACKUP Certificate <PRIMARYSERVERNAME>_CERT TO FILE = '\\<PRIMARYSERVERNAME>\E$\MSSQL\TDE\<PRIMARYSERVERNAME>_BACKUPCERT'
WITH Private KEY (FILE = '\\<PRIMARYSERVERNAME>\E$\MSSQL\TDE\<PRIMARYSERVERNAME>_PRIVKEY',ENCRYPTION BY Password = '<password>');

3. 从节点利用主节点的证书备份创建新证书

需要先将主库证书拷贝至从库再创建,无域alwayson已创建,此步可忽略

-- Create Certificate Protected by Master
CREATE CERTIFICATE TDECert   
FROM FILE = 'C:\TDE\TDECert_backup'    
WITH PRIVATE KEY (FILE = 'C:\TDE\TDECert_key',   
DECRYPTION BY PASSWORD = 'xxx');
GO

4. 主节点将DB加入AG

ALTER AVAILABILITY GROUP <AGNAME> ADD DATABASE <TDE_DATABASE>;

SQL Server 透明数据加密TDE for AlwaysOn_Backup_04

5. 主节点做DB全备+日志备份

全备

SQL Server 透明数据加密TDE for AlwaysOn_数据库_05

日志备份

SQL Server 透明数据加密TDE for AlwaysOn_数据库_06

备份文件传至备库

SQL Server 透明数据加密TDE for AlwaysOn_Backup_07

 

6.  从节点,还原全备及日志备份

还原全备,注意选项选restore with norecovery

SQL Server 透明数据加密TDE for AlwaysOn_数据库_08

SQL Server 透明数据加密TDE for AlwaysOn_备份文件_09

db状态变为正在还原

SQL Server 透明数据加密TDE for AlwaysOn_备份文件_10

还原事务日志,注意选项同样选restore with norecovery

SQL Server 透明数据加密TDE for AlwaysOn_Backup_11

SQL Server 透明数据加密TDE for AlwaysOn_Backup_12

SQL Server 透明数据加密TDE for AlwaysOn_数据库_13

此时DB状态还是正在还原

 

7.  从节点将DB加入AG

USE master;
go
ALTER DATABASE PlanError SET HADR AVAILABILITY GROUP = TESTAG;

SQL Server 透明数据加密TDE for AlwaysOn_数据库_14

测试也可看到数据已同步

 

参考

https://www.sqlservercentral.com/articles/enabling-tde-on-databases-in-an-alwayson-scenario

http://mysql.taobao.org/monthly/2016/05/06/


标签:AlwaysOn,KEY,--,TDE,Server,TDECert,FILE,节点
From: https://blog.51cto.com/u_13631369/6202652

相关文章

  • java 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接
    通过java程序调用sqlserver数据库,报错驱动程序无法通过使用安全套接字层(SSL)加密与SQLServer建立安全连接。错误:“TheserverselectedprotocolversionTLS10isnotacceptedbyclientpreferences[TLS12]”。ClientConnectionId:9c0c766b-97d5-41c6-884e-1ecbdefbac0......
  • sqlserver 如何查看备份还原进度及历史备份信息
    有时需要给业务方备份还原数据库,如果库比较大,可能时不时会被问“怎么样啦?”,“还剩多少哇?”,如果看不到监控备份还原的进度就很悲催,答不上来...SQLServer主要有三种方法备份还原进度:利用SSMS备份还原,查看进度条(还原的不准)利用SQL的stats关键字指定每完成百分之几显示利用动态性能视......
  • 如何利用sqlserver重置Administrator用户密码
    原文是sqlserver2005的,测试windows2016+sqlserver2017时此功能已经不可用,不过还是记录下重置方法。原理是通过sqlserver的OLE选项创建一个用户并将其添加至Administrator组,随后便可用该用户登录服务器修改administrator用户密码。OLE相当于给你一个cmd环境,让你可以输入cmd命令......
  • sqlserver 数据库状态转换图
    今天发现一个很好的图,非常清晰的展示了sqlserver的各种状态及切换原因/方法。简单介绍一下各种状态:ONLINE(在线):数据库正常运行。只有数据库成功恢复后会进入这个状态,也只有这种状态数据库是正常可用的。RESTORING(正在还原):正在执行数据库还原。如果还原时使用NORECOVERY模式,数据库会......
  • KB5024396 - SQL Server 2022 的累积更新 3
    发布日期: 2023年4月13日版本: 16.0.4025.1摘要本文介绍适用于MicrosoftSQLServer2022的累积更新包3(CU3)。此更新包含SQLServer2022累积更新2发布后发布的9个修补程序,并更新以下版本中的组件:SQLServer-产品版本:16.0.4025.1,文件版本:2022.160.4025.......
  • 认识jumpserver
    一、为什么要使用jumpserver直白点说使用jumpserver(堡垒机)是为了两点提升企业运维能力提升企业安全能力二、堡垒机的4A能力如下图:都是以A开头的所以简称为4A1.身份验证(Authentication)登入认证:资源统一登入和认证、LDAP认证、支持OpenID,实现单点登录多因子认证:MF......
  • jumpserver 4A认证(身份鉴别)
    @目录一、用户组概念二、用户创建三、登入认证四、MFA(多因子认证)一、用户组概念用户组,顾名思义,给用户分组如(运维、研发),然后给用户组授权相对应的资产,当某个用户组授权某个资产后,这个用户组下面的所有用户都可使用这个资产。二、用户创建1.用户概念三种用户类型如下图:用户......
  • jumpserver部署及简单功能使用
    @目录一、极速部署二、用户管理三、添加资产四、资产分配五、使用资产一、极速部署建议安装环境项目机器配置操作系统备注jumpserver4核/16G内存/200G硬盘centos/rhel7.*保证是干净的系统具体机器配置安装需求来定,如果只是部署实验下,那可适当的把机械配置往......
  • jumpserver 4A认证(账号管理)
    @目录一、管理用户与系统用户二、资产树三、批量导入用户四、密码策略一、管理用户与系统用户1.管理用户与系统用户的区别简单点理解管理用户:就是root用户或者权限all的用户系统用户:就相当于普通用户权限没有那么大2.管理用户和系统用户的作用管理用户:管理用户是资产(被......
  • jumpserver 4A认证(安全审计)
    @目录一、会话管理二、日志审计一、会话管理1.会话管理//会话管理是指使当前正在连接的资产webTerminal:使用jumpserver默认自带的web连接。sshTerminal:使用xshell等工具登入。admin管理员可以针对用会话管理进行监控、终端操作!当终端后会在历史会话中显示、如下://......