控制台应用程序 - 对象模型 - 数据库权限

时间:2009-01-13 21:23:37

标签: sharepoint

我正在尝试运行使用SharePoint对象模型的控制台应用程序。

我收到错误无法打开登录请求的数据库“dbname”。登录失败。用户'DOMAIN \ userid'登录失败。

我读过一些地方,用户必须拥有内容数据库的权限。

我找不到解释设置权限的文章。我需要这个作为弹药去我的系统管理员才能获得许可设置。

哪里有一篇文章解释了这个?我搜索过谷歌但没有运气。

3 个答案:

答案 0 :(得分:0)

您是否在服务器上运行控制台应用程序?我这么认为。

在这种情况下,服务器上正在使用的帐户(RDP?)可能存在权限问题。事情的数据库错误方面可能会产生误导,因为您需要在SharePoint本身内获得许可,然后SharePoint将授予数据库权限。

我会让您的系统管理员创建一个服务帐户供您使用,可以授予正确的权限。 (通常需要网站集管理员,但这取决于控制台应用程序内部的代码。大多数情况下会假设网站集管理员权限)。您可以通过查看应用程序说明获得更多里程(或者如果它是您自己的代码,则只需访问网站集管理员)

运行一个控制台应用程序虽然有点重要,但如果你给系统管理员运行应用程序和指令,你可能会有更好的运气......虽然我怀疑你是在prod盒上运行它。

答案 1 :(得分:0)

您的用户可能无权访问这些列表或网页。您可以使用提升的权限运行代码,但有时可能会给您带来意想不到的结果。 可以找到如何使用提升特权的示例here

或者您可以设置用户unser谁的帐户控制台应用程序作为网站集管理员运行。

更新后使用提升权限运行的代码可能如下所示:

private static void DisplayAllLists(string site, string webToOpen)
{
    try
    {
       SPSecurity.RunWithElevatedPrivileges(delegate() 
       {


          using ( SPSite siteCollection = new SPSite(site) )
          {
            try
            {
                using (SPWeb web = siteCollection.OpenWeb(webToOpen))
                {
                    SPListCollection lists = web.Lists;
                    foreach (SPList list in lists)
                    {
                        Console.WriteLine(string.Format("List Title: {0}", list.Title));
                    }
                }
             }
           }
           finally
            {
                siteCollection.RootWeb.Dispose();
                Console.ReadLine();
            }
        }

    }
    catch (Exception ex)
    {
        Console.WriteLine("Exception: "+ex.Message);
    }
}

注意:这段代码是从头顶写的,所以也许有些东西丢失了......你将不得不尝试一下

答案 2 :(得分:0)

RunWithElevatedPrivileges没有帮助,因为它只是将线程用户更改为进程标识 - 在控制台应用程序中,这没有任何效果,因为它们是相同的。模拟Web上下文中的“提升”起作用,因为进程标识是应用程序池帐户,其内容数据库上包含db_owner。

  

如果我要求我正在使用的帐户获得完全控制权,那么在Web应用程序策略下,这应该有效吗?

不是根据Ishai Sagi:Object model code and stsadm fail with "Access Denied"。简而言之,似乎用户需要对内容数据库的db_owner权限才能在没有Web上下文的情况下运行对象模型代码(包括STSADM)。