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
    • 最新
    • 标签
主页 / dba / 问题 / 198504
Accepted
Kourtney
Kourtney
Asked: 2018-02-22 12:49:43 +0800 CST2018-02-22 12:49:43 +0800 CST 2018-02-22 12:49:43 +0800 CST

找不到服务代理证书

  • 772

我的组织已经成功使用服务代理、对话安全性几年了。

我有一个我想配置的新服务代理实例,但我相信我遇到了这样一种情况,即新代理实例被错误地放入数据库的顺序(现有代理实例就位)导致新代理实例失败。

我的错误在目标服务器上;找不到证书。无法检索安全上下文。

我的情况是:源服务器 A (dmz) 发送到目标服务器 B,其中已经存在代理实例以两种方式但在不同的数据库上发送消息。

测试 1:我调换了源服务器和目标服务器的角色,使服务器 B 成为我的源,服务器 A (dmz) 成为我的目标,同时使用相同的数据库。这是成功的。

测试 2:我删除了测试 1 实例并在每台服务器上创建了 2 个新数据库。我再次重新配置了源和目标角色,现在从服务器 A (dmz) 发送到服务器 B,这是成功的。新数据库中只配置了一个服务代理实例,因此放置顺序不是问题。

过去,当我们第一次设置开发/测试环境时,我遇到过这种情况;但是,情况略有不同,因为许多其他代理实例也在失败。不是全部,而是一些。一旦我意识到发生了什么,删除所有实例并以特定顺序重新创建它们,源实例在目标实例之前,情况就解决了。

我认为服务代理会自动在正确的订单位置添加一个新实例。

我认为必须在特定订单内配置代理实例是否正确?如果是这样,我如何在不中断现有代理的情况下添加新的代理实例?

请分享您的想法和建议。

service-broker
  • 1 1 个回答
  • 818 Views

1 个回答

  • Voted
  1. Best Answer
    Remus Rusanu
    2018-02-24T10:23:54+08:002018-02-24T10:23:54+08:00

    设置探查器跟踪并监控Security Audit/Audit Broker Conversation. 重现这个问题,应该产生这个类的一个事件。查看活动详情。它应该会发光。我认为两个事件列(不记得是哪个,MSDN 似乎省略了信息)包含问题证书颁发者名称/序列号,这应该进一步帮助缩小使用哪个证书的范围。

    [编辑] 在所有三个数据库上运行此查询查询以找出哪些服务和远程服务绑定使用哪些证书:

    select s.name, c.* 
    from sys.services s
    join sys.certificates c
    on s.principal_id = c.principal_id
    where c.is_active_for_begin_dialog = 1
    and pvt_key_encryption_type != 'NA'
    order by c.expiry_date desc
    
    
    select b.remote_service_name, b.remote_service_binding_id, c.* 
    from sys.remote_service_bindings b
    join sys.certificates c on b.remote_principal_id = c.principal_id
    where c.is_active_for_begin_dialog = 1
    order by c.expiry_date desc
    

    [根据您的数据进行编辑]

    1) 在 PRd2DB 服务选项卡中:数据库中的所有服务均由 拥有dbo,并dbo拥有 4 个对 SSB 有效的证书(证书 ID 280、288、327 和 357)。xls 没有正确捕获expiry_date(全是 00:00.0)所以我不能确定使用了哪个,但是如果结果来自我在上面发布的查询,那么将使用第一个,证书 ID 280 和序列号号54 89 2c 1a...。所以这是用于识别来自该数据库的任何服务的证书。

    2) 在 RSB 选项卡的 Prd2 中,查询显示了带有私钥的证书和没有私钥的证书的混合。这永远不应该发生。与 RSB 关联的用户代表远程服务的身份,应该只拥有没有私钥的证书。此外,所有远程服务只有一个 RSB 用户(principal_id 为 58 的用户)。每个远程服务应该有不同的身份用户。现在,在 PrdDB2 中启动的任何对话,对于任何服务,都将使用带有序列号的证书34 99 ...。

    3) DMZDB1 服务:与prd2 相同,属于dbodbo 的所有服务有3 个证书(ids 335、341、371),使用的是带有序列号的证书74 0a ...

    4)DMZDB RSBs:有两个RSB用户,一个principal id 9和一个30。principal id 9混合了证书,其中一些有私钥,而principal id 30只有一个证书,但那个证书有私钥.

    总的来说,配置存在严重缺陷,难怪它不起作用。您不了解远程服务绑定的作用和正确配置。

    请遵守以下规则。考虑一个远程服务“Foo”:

    • 为每个远程服务创建一个不同的用户(主体),称之为remote_user_Foo
    • 使用此服务的主体(即。remote_user_Foo)为每个远程服务创建一个 RSB
    • 应该只拥有一个证书,并且remote_user_Foo不应该有私钥
    • 授予必要的权限 ( SEND)remote_user_Foo

    下次运行显示 RSB 的查询时,它应该显示与远程服务绑定数相等的行数,principal_id值应该都是不同的,并且pvt_key_encryption_type应该都是NA.

    • 3

相关问题

  • 服务代理 - 尽管 ssbdiagnose 说一切都很好,但服务器之间没有发生通信

  • 我们可以使用 SQL Express 通过 Service Broker 将消息发送到 SQL Standard 吗?

  • 服务代理队列的状态

  • Service Broker 根据条件向特定数据库发送消息

  • SQL Server 服务代理和死锁

Sidebar

Stats

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

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

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

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve