Lotus notes Lotus Notes计划代理无法打开其他服务器中的数据库

Lotus notes Lotus Notes计划代理无法打开其他服务器中的数据库,lotus-notes,lotus-domino,Lotus Notes,Lotus Domino,我在服务器1中有一个数据库,它引用了服务器2中的多个数据库以进行记录验证。当调度代理运行时,它会遇到“未设置对象变量”错误。但是,当我尝试手动运行代理(右键单击代理名称,单击运行)时,它运行平稳,没有错误 我在两个虚拟服务器中模拟了数据库设置,并且能够重现错误。逐行调试显示,当它试图在另一台服务器中打开数据库时发生错误。由于手动运行工作顺利,我不认为代码或变量(服务器和数据库路径)是错误的 我已经检查了所有数据库的ACL,以包括签名者和服务器,还尝试计划在所有3种安全模式下运行代理(受限、不受限

我在服务器1中有一个数据库,它引用了服务器2中的多个数据库以进行记录验证。当调度代理运行时,它会遇到“未设置对象变量”错误。但是,当我尝试手动运行代理(右键单击代理名称,单击运行)时,它运行平稳,没有错误

我在两个虚拟服务器中模拟了数据库设置,并且能够重现错误。逐行调试显示,当它试图在另一台服务器中打开数据库时发生错误。由于手动运行工作顺利,我不认为代码或变量(服务器和数据库路径)是错误的


我已经检查了所有数据库的ACL,以包括签名者和服务器,还尝试计划在所有3种安全模式下运行代理(受限、不受限和受限管理权限)。我研究了服务器文档和安全性,并允许访问这两台服务器。还有什么我可能遗漏的吗?

让我们将代理运行的服务器称为“server1”,将存储数据库的服务器称为“server2”。问题是代理以签名用户的身份运行,server1已验证该签名,但server2未验证该签名。Server2需要知道签名,以便在数据库上强制执行ACL,因此Server2必须从server1获取签名信息。但是,从理论上讲,server1可能位于server2,因此默认情况下,server2不信任来自server1的签名信息

幸运的是,有一种方法可以告诉server2信任server1上运行的代理上的签名。在server2上Domino目录中server2的Server文档中,转到Security选项卡,找到标记为“Trusted Servers”的字段。在此字段中输入server1的完全限定名,然后重新启动server2。(我不确定是否真的需要重启。)


这将允许服务器1上的代理读取服务器2上的数据库。

谢谢。我会尝试一下,让你知道它是如何运行的。这只适用于服务器位于不同域的情况。西蒙,恕我直言,如果这是真的,我会感到惊讶。我确信在R6之前,代理永远无法访问另一台服务器上的数据库,即使是在同一个域中。已创建受信任的服务器权限以允许它。我与Charlie Kaufman(当时Domino的首席安全架构师)进行了长时间的讨论,讨论信任意味着什么。如果它在域中是自动的,那么任何能够在域中的1台服务器上创建代理的用户都可以在其他服务器上获取access数据库,即使这些服务器的access servers字段中没有列出该用户。下面是更详细的解释。在同一域中考虑Serv1和Serv2。User1可以访问server1并可以创建代理。User1不在server2的访问服务器列表中。User1在server1上创建一个代理,该代理在server2上打开foo.nsf。此数据库具有ACL default=Reader,依靠限制性访问服务器列表将其他数据库排除在外。(很愚蠢,但应该可以工作。)代理在server1上运行,并打开到server2的会话。虽然代理由user1签名,但server1使用自己的ID文件进行连接-因为它没有user1的ID文件。Server2检查它的允许访问列表并找到server1,所以我们已经越过了这个障碍。现在,server1中的代理管理器代码知道代理是代表user1运行的,因此当它想要打开远程数据库时,它调用NSFDbOpenExtended并传入可选的hNames参数,该参数指向代理签名中使用的名称。Sever2会根据数据库ACL检查此名称,但不会根据Access服务器列表检查,因为我们已经过了这个阶段。瞧!安全性已被绕过。您的服务器是否在同一域中?您的代理中是否有强制在运行时重新编译的代码?例如Evalute()。两台服务器位于同一个域中。找不到对象变量发生在它尝试使用命令If not(dbname)从其他服务器打开数据库的行上。Isopen.可能需要放置一个小样本。该错误与未初始化dbname有关。