非域环境下,用证书做的,只用主体服务器和镜像服务器是可以使用,加入见证服务器后,镜像服务器与见证服务器显示已断开连接。证书也相互导入过,创建登录,也授权过。重新做一次还是这个问题,是什么情况?大家有没有遇到过?

解决方案 »

  1.   

    我把所有代码都贴来,大家看看,是哪个步骤出问题了。主机执行的代码:
    USE master
    go
    --步骤一:创建证书
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'abc.123'; --创建当前master数据库主密钥
    CREATE CERTIFICATE HOST_A_cert WITH SUBJECT = 'HOST_A certificate' , 
    START_DATE ='2011-06-28'
    GO
    SELECT * FROM sys.certificates  --查看创建证书信息
    SELECT * FROM sys.symmetric_keys  --查看创建数据库密钥信息
    --GO
    --步骤二:创建镜像端点
    CREATE ENDPOINT Endpoint_Mirroring 
    STATE = STARTED 
    AS 
    TCP ( LISTENER_PORT=5022 , LISTENER_IP = ALL ) 
    FOR 
    DATABASE_MIRRORING 
    ( AUTHENTICATION = CERTIFICATE HOST_A_cert , ENCRYPTION = REQUIRED ALGORITHM AES , ROLE = ALL );
    GO
    SELECT * FROM sys.endpoints --查看创建镜像端点信息
    GO
    --DROP ENDPOINT  Endpoint_Mirroring --删除镜像端点
    GO
    --步骤三:备份证书
    BACKUP CERTIFICATE HOST_A_cert TO FILE = 'D:\Certificate\HOST_A_cert.cer';
    --步骤四:互换证书
    --将备份复制到镜像服务器和见证服务器的证书文件夹中--步骤五:添加登陆名、用户(主备可并行执行),以下操作只能通过命令行运行,通过图形界面无法完成。
    CREATE CERTIFICATE HOST_B_cert FROM FILE = 'D:\Certificate\HOST_B_cert.cer';
    CREATE LOGIN HOST_B_login FROM CERTIFICATE HOST_B_cert
    GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_B_login];--创建连接见证服务器上的登录名和用户
    CREATE CERTIFICATE HOST_C_cert  FROM FILE = 'D:\Certificate\HOST_C_cert.cer';
    CREATE LOGIN HOST_C_login FROM CERTIFICATE HOST_C_cert
    GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_C_login]; 
      

  2.   

    镜像服务器上执行代码如下:
    --步骤一:创建证书
    USE master  
    GO
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'abc.123';  
    CREATE CERTIFICATE HOST_B_cert  WITH SUBJECT = 'HOST_B certificate',
    START_DATE = '2011-06-28'
    GO
    SELECT * FROM sys.certificates  --查看创建证书信息
    SELECT * FROM sys.symmetric_keys  --查看创建数据库密钥信息
    GO 
    --步骤二:创建镜像端点
    CREATE ENDPOINT Endpoint_Mirroring 
    STATE = STARTED 
    AS 
    TCP ( LISTENER_PORT=5022 , LISTENER_IP = ALL ) 
    FOR 
    DATABASE_MIRRORING 
    ( AUTHENTICATION = CERTIFICATE HOST_B_cert , ENCRYPTION = REQUIRED ALGORITHM AES , ROLE = ALL );
    GO 
    SELECT * FROM sys.endpoints --查看创建镜像端点信息
    GO--步骤三:备份证书 
    BACKUP CERTIFICATE HOST_B_cert TO FILE = 'D:\Certificate\HOST_B_cert.cer';  
    GO 
    --步骤四:互换证书
    --将备份复制到主机和见证服务器的证书文件夹中。--步骤五:添加登陆名、用户(主备可并行执行),以下操作只能通过命令行运行,通过图形界面无法完成。
    CREATE CERTIFICATE HOST_A_cert FROM FILE = 'D:\Certificate\HOST_A_cert.cer';
    CREATE LOGIN HOST_A_login FROM CERTIFICATE HOST_A_cert
    GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_A_login];--创建连接见证服务器上的登录名和用户
    CREATE CERTIFICATE HOST_C_cert  FROM FILE = 'D:\Certificate\HOST_C_cert.cer';
    CREATE LOGIN HOST_C_login FROM CERTIFICATE HOST_C_cert
    GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_C_login];--步骤六:指定伙伴关系
    ALTER DATABASE Test SET PARTNER = 'TCP://192.168.0.189:5022'; --指定伙伴IP
      

  3.   

    见证服务器上执行代码:
    --步骤一:创建证书
    USE master  
    GO
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'abc.123';  
    CREATE CERTIFICATE HOST_C_cert  WITH SUBJECT = 'HOST_C certificate',
    START_DATE = '2011-06-28'
    GO
    SELECT * FROM sys.certificates  --查看创建证书信息
    SELECT * FROM sys.symmetric_keys  --查看创建数据库密钥信息
    GO 
    --步骤二:创建镜像端点
    CREATE ENDPOINT Endpoint_Mirroring 
    STATE = STARTED 
    AS 
    TCP ( LISTENER_PORT=5022 , LISTENER_IP = ALL ) 
    FOR 
    DATABASE_MIRRORING 
    ( AUTHENTICATION = CERTIFICATE HOST_C_cert , ENCRYPTION = REQUIRED ALGORITHM AES , ROLE = WITNESS);
    GO 
    SELECT * FROM sys.endpoints --查看创建镜像端点信息
    GO--步骤三:备份证书 
    BACKUP CERTIFICATE HOST_C_cert TO FILE = 'D:\Certificate\HOST_C_cert.cer';  
    GO 
    --步骤四:互换证书
    --将备份复制到主机和镜像服务器中的证书文件夹中。--步骤五:添加主机服务器上登陆名、用户,以下操作只能通过命令行运行,通过图形界面无法完成。
    CREATE CERTIFICATE HOST_A_cert FROM FILE = 'D:\Certificate\HOST_A_cert.cer';
    CREATE LOGIN HOST_A_login FROM CERTIFICATE HOST_A_cert
    GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_A_login];--镜像服务器上登录名和用户
    CREATE CERTIFICATE HOST_B_cert FROM FILE = 'D:\Certificate\HOST_B_cert.cer';
    CREATE LOGIN HOST_B_login FROM CERTIFICATE HOST_B_cert
    GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_B_login];