如何解决访问拒绝错误与stsadm -o retractsolution

我们有一个运行MOSS 2007 SP1的2服务器场。 我是两台服务器上的Administrators组的成员。

我也是Farm Administrators组的成员。

我需要升级一些解决scheme,所以很自然地,我开始使用旧解决scheme的stsadm retractsolution命令。 无论我尝试运行该命令的哪个解决scheme,都会返回“拒绝访问”。

幸运的是,ULS日志文件给了我更多的信息:

 System.Data.SqlClient.SqlException:无法打开login请求的数据库“SharePoint_AdminContent”。 login失败。 用户'***我的域名login***'login失败。

这里似乎很奇怪的事实是,SharePoint正试图使用​​Windows集成身份validation连接到我的帐户,而不是连接到已configuration的Farm服务帐户。 当然,我的帐户无权访问pipe理内容数据库。

所以问题是:我的帐户是否需要授予pipe理内容数据库的权限才能执行pipe理任务? 我当然不希望,所以还有其他的错误呢?

    对于通过STSADM针对SQL数据库执行的大多数活动,简短回答是“是”。

    对于绝大多数直接针对SharePoint API执行的STSADM命令(而不是调度执行操作的任务),执行命令的安全上下文是您的 – login用户。 正如您在引用的示例中看到的, 您的用户帐户上下文是用于撤消的用户帐户上下文。 如果您在SQL中没有适当的权限来执行操作,则会失败(如您所见)。

    这与您通过UI执行的大多数活动(即Central Admin)形成鲜明对比。 在您引用的示例中,通过Central Admin收回解决scheme将导致在服务器场服务帐户的上下文中执行该命令,因为该帐户是中央pipe理站点的应用程序池标识。 结果:即使您(个人)没有相关数据库的权限,回退也会成功。

    如果您的环境设置为使您的帐户对SharePoint场中的数据库没有pipe理员级访问权限,那么我会build议通过UI执行尽可能多的活动,以避免遇到的安全上下文问题types。 你会发现你可以做大部分你需要这样做。 但是想到的一个值得注意的例外是向服务器场解决scheme存储添加了一个解决scheme(STSADM -o addsolution) – STSADM命令不存在对应的UI。

    或者,您可以执行类似于MadlyAlivebuild议的操作(即使用服务器场服务帐户login),但服务器场服务帐户的本地pipe理员访问既不是Microsoft要求的,也不是Microsoft推荐的。 您还可以让您的帐户授予执行您的操作所需的SQL Server内的最小权限集。

    有关更多讨论,请参阅http://support.microsoft.com/kb/896148上的 Microsoft知识库文章。

    经验法则回顾:STSADM使用您的帐户上下文,中央pipe理使用服务器场服务帐户上下文。

    我希望这有帮助!

    这可能会避免核心问题,但在尝试运行类似的stsadm命令时

    stsadm -o preupgradecheck 

    我也收到拒绝访问。 但是以pipe理员身份运行命令提示符使我能够运行它。