这个答案说:
有一个conversation_id,在两个端点都相同。
还有conversation_handle,每个端点都必须不同。
因此,我认为将对话 ID 写入对话每个端点的审计表对于故障排除很有用。这样我就可以轻松地在给定对话的每个端点追踪审计信息。
问题是从哪里获取会话 ID。我原本以为我可以从 sys.conversation_endpoints 对照刚刚发送或接收的消息的 conversation_handle 进行查找。但是,发送和接收消息的数据库用户无权查看 sys.conversation_endpoints 中的元数据。
我可以通过让用户发送和接收消息数据库所有者来解决这个问题,但出于安全原因我不希望这样做。他们查看 sys.conversation_endpoints 中的记录所需的最低权限是多少?或者,我还能如何读取刚刚发送或接收的消息的 conversation_id(从进行发送或接收的代码中,没有 dbo 或 sysadmin 权限)?
编辑:我阅读了有关元数据可见性配置的在线图书文章,其中指出
元数据的可见性仅限于用户拥有或已被授予某些权限的安全对象
对于诸如 sys.tables 或 sys.procedures 之类的目录视图,用户需要被授予权限的安全对象是相当明显的。但是 sys.conversation_endpoints 中列出的安全对象是什么:对话、对话端点?以及如何授予他们权限?用户已经有权开始对话或结束对话,所以我认为它已经拥有足够的对话权限。