我正在尝试运行使用SharePoint对象模型的控制台应用程序。
我收到错误无法打开登录请求的数据库“dbname”。登录失败。用户'DOMAIN \ userid'登录失败。
我读过一些地方,用户必须拥有内容数据库的权限。
我找不到解释设置权限的文章。我需要这个作为弹药去我的系统管理员才能获得许可设置。
哪里有一篇文章解释了这个?我搜索过谷歌但没有运气。
答案 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)。