13.3 使用证书验证

13.3  使用证书验证


13.3.1 证书

  证书是一个数字签名的安全对象,它可以在数据库镜像会话中用来帮助确保连接的安全性。

  若要在给定的服务器实例上启用数据库镜像的证书验证,系统管理员必须配置每个服务器实例,以在出站连接和进站连接中使用证书。必须先为主体服务器配置出站连接,然后为镜像服务器配置入站连接。

  服务器实例上的所有镜像连接都使用单个数据库镜像端点,必须在创建端点时指定服务器实例的身份验证方法。因此,可以对数据库镜像的每个服务器实例只使用一种验证方式。

  使用证书实现对端点的身份验证,此证书必须具有用数据库主密钥加密的私钥,而且当前的UTC日期必须在证书的有效范围之内。


13.3.2 创建加密证书

  首先在主体数据库 SQLSVR1 的 master 数据库中创建证书。如果当前 master 数据库没有数据库主密钥,则通过下述语句创建。

Use master;

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '23987hxJ#KL95234nl0zBe';

GO


  然后对服务器实例创建一个用于其数据库镜像出站连接的加密证书。

USE master;

CREATE CERTIFICATE SQLSVR1_cert

   WITH SUBJECT = 'SQLSVR1 certificate for database mirroring', 

   EXPIRY_DATE = '12/31/2024';

GO


  备份主体服务器 SQLSVR1 的加密证书。请确保此证书保存在安全可靠的存储介质上。

BACKUP CERTIFICATE SQLSVR1_cert TO FILE = 'C:\Certs\SQLSVR1.cer';

GO


  现在需要对镜像服务器 SQLSVR2 执行相同的步骤。

Use master;

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '23987hxJ#KL95234nl0zBe';

GO

USE master;

CREATE CERTIFICATE SQLSVR2_cert

   WITH SUBJECT = 'SQLSVR2 certificate for database mirroring', 

   EXPIRY_DATE = '12/31/2024';

GO

BACKUP CERTIFICATE SQLSVR2_cert TO FILE = 'C:\Certs\SQLSVR2.cer';

GO


  将上述证书分别复制到其它所有的数据库镜像会话成员的计算机本地文件夹。请使用安全的方法复制这些证书,必须格外小心地保证所有证书的安全。


提示:

  如果需要查看数据库的现有密钥,请使用 sys.symmetric_keys 目录视图。

  如果需要查看数据库的现有证书,请使用 sys.certificates 目录视图。



13.3.3 创建数据库镜像端点

  使用主体服务器实例的证书 SQLSVR1_cert 为主体服务器 SQLSVR1 创建端点。

CREATE ENDPOINT [默认的镜像端点]

   STATE = STARTED

   AS TCP (

      LISTENER_PORT=5022

      , LISTENER_IP = ALL

   ) 

   FOR DATABASE_MIRRORING ( 

      AUTHENTICATION = CERTIFICATE SQLSVR1_cert

      , ENCRYPTION = REQUIRED ALGORITHM AES

      , ROLE = ALL

   );

GO


  使用镜像服务器实例的证书 SQLSVR2_cert 为镜像服务器 SQLSVR2 创建端点。

CREATE ENDPOINT [默认的镜像端点]

   STATE = STARTED

   AS TCP (

      LISTENER_PORT=5022

      , LISTENER_IP = ALL

   ) 

   FOR DATABASE_MIRRORING ( 

      AUTHENTICATION = CERTIFICATE SQLSVR2_cert

      , ENCRYPTION = REQUIRED ALGORITHM AES

      , ROLE = ALL

   );

GO

 

提示:

  如果需要查看数据库的现有数据库镜像端点,请使用 sys.database_mirroring_endpoints 目录视图。或者通过 SSMS 查看,依次展开“服务器对象”、“端点”、“数据库镜像”节点,检查是否有端点存在。



13.3.4 创建登录名

  在主体服务器实例的 master 数据库中为镜像服务器创建一个登录名,然后为新创建的登录名创建一个用户。再将用户与镜像服务器的证书相关联,并授予其对数据库镜像端点的 CONNECT 权限。

USE master;

CREATE LOGIN SQLSVR2_login 

   WITH PASSWORD = 'Sample@#';

GO

CREATE USER SQLSVR2_user FOR LOGIN SQLSVR2_login;

GO

CREATE CERTIFICATE SQLSVR2_cert

   AUTHORIZATION SQLSVR2_user

   FROM FILE = 'C:\Certs\SQLSVR2.cer'

GO

GRANT CONNECT ON ENDPOINT::[默认的镜像端点] TO [SQLSVR2_login];

GO


  然后在镜像服务器执行相同的步骤,为主体服务器创建一个登录名和用户。

USE master;

CREATE LOGIN SQLSVR1_login 

   WITH PASSWORD = 'Sample@#';

GO

CREATE USER SQLSVR1_user FOR LOGIN SQLSVR1_login;

GO

CREATE CERTIFICATE SQLSVR1_cert

   AUTHORIZATION SQLSVR1_user

   FROM FILE = 'C:\Certs\SQLSVR1.cer'

GO

GRANT CONNECT ON ENDPOINT::[默认的镜像端点] TO [SQLSVR1_login];

GO


提示:

  如果需要查看数据库实例上的登录名,请使用 sys.server_principals 目录视图。

  如果需要查看数据库实例上的用户,请使用 sys.sysusers 目录视图。



13.3.5 启动数据库镜像

  在镜像服务器实例 SQLSVR2 上,将主体服务器实例 SQLSVR1 设置为伙伴(使其成为初始主体服务器实例)。

ALTER DATABASE SQLDB01 

    SET PARTNER = 'TCP://192.168.2.11:5022';

GO


  在主体服务器实例 SQLSVR1 ,将镜像服务器实例 SQLSVR2 设置为伙伴(使其成为初始镜像服务器实例)。

ALTER DATABASE SQLDB01 

    SET PARTNER = 'TCP://192.168.2.12:5022';

GO


13.3.6 故障排除

  发生故障时,请检查主体服务器和镜像服务器的 SQL Server 日志。

  通常容易遇到的故障是无法连接或访问数据库镜像端点。造成此类故障的原因主要有两种:

(1)防火墙没有为数据库镜像端口允许入站连接。

(2)DNS解析故障。由于上述计算机未加入域(或者分别位于不信任的域),请确保使用合适的DNS解析方式(例如,修改本地计算机的 hosts 文件)。


本文出自 “SQL Server 管理员指南” 博客,谢绝转载!

你可能感兴趣的:(镜像,证书,验证)