SPFarm.Local.Solutions.Add - Исключение - «Доступ запрещен» - PullRequest
1 голос
/ 11 февраля 2009

Вот мой фрагмент кода:

SPSecurity.RunWithElevatedPrivileges(delegate()
{
    SPSolution newSolution = SPFarm.Local.Solutions.Add(@fullPath);                            
});

Трассировка стека и inrerexception не дают дальнейших подсказок. Источник Exception.Source говорит Microsoft.SharePoint .

SPFarm.Local.CurrentUserIsAdministrator () возвращает TRUE для идентификатора пользователя.

ИД пользователя в группе администраторов фермы.

Есть идеи?

EDIT

Я изменил свой код на следующий и все еще получаю ошибку «Отказано в доступе»:

private void AddSolution()
{
   SPSolution newSolution = SPFarm.Local.Solutions.Add(@fullPath);
}

SPSecurity.CodeToRunElevated elevatedAddSolution = new SPSecurity.CodeToRunElevated(AddSolution);
SPSecurity.RunWithElevatedPrivileges(elevatedAddSolution);

Ответы [ 3 ]

1 голос
/ 11 февраля 2009

Я верю, что проблема, с которой вы столкнулись, связана с тем, что вы используете статический член для доступа к объекту SPFarm. Я думаю, что это похоже на запуск статического класса SPcontext, который все еще будет работать в контексте безопасности вошедшего в систему пользователя, а не в контексте повышенных привилегий (который является локальной идентификационной информацией пула приложений).

Попробуйте вместо этого внутри вашего делегата:

SPFarm spFarm = SPWebService.AdministrationService.Farm;
SPSolution newSolution = spFarm.Solutions.Add(@fullPath);

EDIT: Поскольку вышеописанное не помогло, ваша проблема, вероятно, связана с разрешениями базы данных для базы данных конфигурации. RunWithElevatedPriviliges будет работать под идентификатором пула приложений, под которым выполняется код. Добавление решения в вашу ферму влияет на базу данных конфигурации, поэтому вашему удостоверению пула приложений потребуется доступ к базе данных конфигурации. В качестве теста попробуйте добавить удостоверение пула приложений в config db и дать ему разрешения dbo. Если это решит проблему, вам нужно будет найти минимальное количество разрешений, которое потребуется каждой учетной записи пула приложений для добавления решений (не оставляйте как dbo)

1 голос
/ 12 февраля 2009

Ваша основная проблема может заключаться в том, что вы не являетесь DBO базы данных sharepoint (_Config, если я не ошибаюсь) Добавление решения в ферму требует больше прав, чем просто доступ к ферме.

Убедитесь, что пользователь, выполняющий это, является администратором фермы и DBO соответствующей базы данных.

Если проблема не устранена ... попробуйте запустить

stsadm -o addolution -filename "MyWsp.wsp"

Если у вас есть правильное право, это даст вам правильную ошибку.

1 голос
/ 11 февраля 2009

Вы пытались объявить делегата вне вызова RunWithElevatedPriviliges?

Редактировать: Игнорировать ниже, поскольку у вас есть проверенные разрешения.

RunWithElevatedPriviliges будет использовать идентификатор пула приложений, под которым работает SP. Вы гарантировали, что эта учетная запись имеет достаточные привилегии в вашей среде?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...