AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 105280
Accepted
tcnolan
tcnolan
Asked: 2010-01-22 20:29:15 +0800 CST2010-01-22 20:29:15 +0800 CST 2010-01-22 20:29:15 +0800 CST

带有证书的 WAN 链接上的 SQL 2008 数据库镜像

  • 772

我正在通过两个 SQL 2008 命名实例之间的 WAN 链接配置数据库镜像,这些实例的主机服务器不是域成员,使用证书进行身份验证。经过多次尝试自己完成这项工作后,我从头开始并根据 BOL http://technet.microsoft.com/en-us/library/ms191140.aspx逐步进行,但是我正在尝试的问题解决仍然存在。

问题在于在每台服务器上设置合作伙伴状态的最终步骤集,当我执行步骤 #2 以在“HOST_A”上设置合作伙伴状态时,我收到以下错误:

消息 1418,第 16 层,状态 1,第 2 行

服务器网络地址“TCP://server-b.our-domain.com:5022”无法访问或不存在。检查网络地址名称以及本地和远程端点的端口是否可操作。

然而,有趣的是,我可以看到防火墙上的流量(TCPPDUMP)在两台服务器之间来回传输大约 15 秒,然后该错误被吐回给我。

此时我不确定如何继续,因为我可以从 SERVER-B 上的 SSMS 连接到 SERVER-A\BLUE 实例,并且可以从 SERVER-A 上的 SSMS 连接到 SERVER-B\RED 实例而没有问题。我很困惑为什么我会在这个时间点收到错误。两侧的端点在 sys.tcp_endpoints 和 sys.endpoints 中被列为启动。

另一个有趣的注意事项是,在尝试第 2 步之前,我可以通过 5022 从 SERVER-A 远程登录到 SERVER-B,并且可以通过 5022 从 SERVER-B 远程登录到 SERVER-A,但是在第 2 步失败后,我无法再从任一方向远程登录。TCPDUMP 将显示从任何一个到另一个的流量,但在第 2 步失败后没有返回流量。

对我来说主要问题是这个错误似乎对实际发生的任何事情都有错误的描述,因为显然网络地址存在并且可以到达并且端点也可以运行(至少直到操作失败 [Rolleyes] )我有还尝试以相反的方向进行配置(进行完全备份/恢复而没有恢复等)并且它以完全相同的方式失败,提供相同的错误,但所有流量再次显示在防火墙上。

最后,在 SQL 日志中,我还收到错误“错误:1443,严重性:16,状态:2”。这似乎是直接相关的,我在网上发现的一些内容表明 Windows 身份验证存在问题,但情况并非如此,因为我的端点配置了证书。

对此的任何帮助将不胜感激。

这是用于设置的实际 T-SQL,它遵循 BOL 文章中的内容。

--ON SERVER-A\BLUE
use master
go

create master key encryption by password = 'password123!'
go

create certificate CA_cert
        With subject = 'CA_cert Certificate'
go

create endpoint Mirroring
        STATE = STARTED
                AS TCP (
                        LISTENER_PORT=5022
                        , LISTENER_IP = ALL
                )
        FOR DATABASE_MIRRORING (
                AUTHENTICATION = CERTIFICATE CA_cert
                , ENCRYPTION = REQUIRED ALGORITHM AES
                , ROLE = ALL
        )
go

BACKUP CERTIFICATE CA_cert TO FILE = 'c:\sql\CA_cert.cer'
go


--ON SERVER-B\RED
use master
go

create master key encryption by password = 'password123!'
go

create certificate NJ_cert
        With subject = 'NJ_cert Certificate'
go

create endpoint Mirroring
        STATE = STARTED
                AS TCP (
                        LISTENER_PORT=5022
                        , LISTENER_IP = ALL
                )
        FOR DATABASE_MIRRORING (
                AUTHENTICATION = CERTIFICATE NJ_cert
                , ENCRYPTION = REQUIRED ALGORITHM AES
                , ROLE = ALL
        )
go

BACKUP CERTIFICATE NJ_cert TO FILE = 'c:\sql\NJ_cert.cer'
go


--ON SERVER-A\BLUE
create login NJ_login WITH PASSWORD = 'password123!'
go

CREATE USER NJ_user FOR LOGIN NJ_login
go

CREATE CERTIFICATE NJ_cert
        AUTHORIZATION NJ_user
        FROM FILE = 'C:\sql\NJ_cert.cer'
go

GRANT CONNECT ON ENDPOINT::Mirroring TO NJ_login
go


--ON SERVER-B\RED
create login CA_login WITH PASSWORD = 'password123!'
go

CREATE USER CA_user FOR LOGIN CA_login
go

CREATE CERTIFICATE CA_cert
        AUTHORIZATION CA_user
        FROM FILE = 'C:\sql\CA_cert.cer'
go

GRANT CONNECT ON ENDPOINT::Mirroring TO CA_login
go


--ON SERVER-B\RED
alter database testdb
        set partner = 'TCP://server-a.our-domain.com:5022'
go


--ON SERVER-A\BLUE
alter database testdb
        set partner = 'TCP://server-b.our-domain.com:5022'
go

-- Everything works fine up until this point at which time I get the previously mentioned errors
sql-server sql-server-2008 database-mirroring certificate
  • 1 1 个回答
  • 1629 Views

1 个回答

  • Voted
  1. Best Answer
    Remus Rusanu
    2010-01-23T15:05:51+08:002010-01-23T15:05:51+08:00

    将 Profiler 附加到两个实例(如果有见证,则全部三个)并监视事件Audit Database Mirroring Login Event Class和Broker:Connection Event Class。

    错误 1418 只是说明在特定超时内,无论出于何种原因,mirroirng 会话都没有启动和运行。当您在主体上发出 ALTER DATABASE ... SET PARTNER = 'tcp://..' 时,主体将连接到镜像,并且镜像将连接到主体作为响应。这意味着先前设置的主要“合作伙伴”值和镜像“合作伙伴”值都会出现,它们都必须正确,并且底层基础设施(路由、DNS、IPSEC、防火墙)必须允许连接从两个合作伙伴到所需的地址:端口。如果你有一个见证人,你就给自己一个相当复杂的 TCP 连接毛球,必须验证它。

    如果问题是证书安全,那么 Audit Database Mirroring Login 事件将清楚地说明原因和问题(证书无效、过期、使用了错误的证书等)。如果问题是底层 TCP 结构(路由、DNS、IPSEC、防火墙等),那么 Broker:Connection 事件实际上会显示问题。

    如果您想准确了解基于证书的身份验证是如何工作的,请继续阅读基于证书的身份验证如何工作。

    • 1

相关问题

  • sql server 连接字符串上的网络数据包大小以提高吞吐量

  • 基于 Microsoft 的服务器(IIS、MSSQL 等)上的病毒扫描应排除哪些内容?

  • SQL 洗衣清单

  • OPENROWSET、二进制文件、varchars 和 varbinaries

  • 聚集索引与非聚集索引?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve