我们有 2 个运行 MOSS 2007 SP1 的服务器群。我是这两台服务器上管理员组的成员。
我也是 Farm Administrators 小组的成员。
我需要升级一些解决方案,因此我自然而然地从旧解决方案上的 stsadm retractsolution 命令开始。无论我尝试在哪个解决方案上运行该命令,我都会得到“访问被拒绝”的提示。
幸运的是,ULS 日志文件为我提供了更多信息:
System.Data.SqlClient.SqlException:无法打开登录请求的数据库“SharePoint_AdminContent”。登录失败。用户“***My Domain Login***”登录失败。
这里看起来奇怪的是 SharePoint 正在尝试连接我的使用 Windows 集成身份验证而不是连接配置的 Farm 服务帐户。当然,我的帐户无权访问 Admin Content 数据库。
所以问题是:我的帐户是否需要被授予访问 Admin Content 数据库的权限才能执行管理任务?我当然希望不需要,那么是不是有什么其他严重问题?
答案1
对于您通过 STSADM 针对 SQL 数据库执行的大多数活动,简短的回答是“是”。
对于直接针对 SharePoint API 执行的绝大多数 STSADM 命令(而不是安排任务来执行操作),执行命令的安全上下文属于您——登录用户。正如您在所引用的示例中看到的那样,你的用户帐户上下文是用于撤回的上下文。如果您在 SQL 中没有执行该操作的适当权限,则操作将失败(如您所见)。
这与您通过 UI(即中央管理)执行的大多数活动形成对比。在您引用的示例中,通过中央管理撤回解决方案将导致命令在农场服务帐户的上下文中执行,因为该帐户是中央管理站点的应用程序池标识。结果:即使您(个人)没有关联数据库的权限,撤回也会成功。
如果您的环境设置为您的帐户没有 SharePoint 场内数据库的管理员级访问权限,我建议您通过 UI 执行尽可能多的活动,以避免您遇到的安全上下文问题。您会发现您可以通过这种方式完成大部分需要做的事情。不过,我想到的一个值得注意的例外是将解决方案 (STSADM -o addsolution) 添加到场解决方案存储中——不存在与 STSADM 命令对应的 UI。
或者,您可以执行类似于 MadlyAlive 建议的操作(即使用农场服务帐户登录)...尽管 Microsoft 既不要求也不建议农场服务帐户具有本地管理员访问权限。您还可以为您的帐户授予 SQL Server 内部执行操作所需的最小权限集。
有关更多讨论,请参阅 Microsoft 的知识库文章:http://support.microsoft.com/kb/896148。
经验法则回顾:STSADM 使用您的帐户上下文,中央管理使用农场服务帐户上下文。
我希望这有帮助!
答案2
这可能避免了核心问题,但当尝试运行类似的 stsadm 命令时
stsadm -o preupgradecheck
我也收到了“拒绝访问”的提示。但以管理员身份运行命令提示符使我能够运行它。