Использование SPPersistentObject в SharePoint 2007 - PullRequest
0 голосов
/ 18 февраля 2010

Мне нужна помощь, чтобы объект SPPersistedObject для SharePoint 2007 сохранял информацию на уровне фермы.

Когда я создаю постоянный объект как дочерний элемент экземпляра SPFarm и вызываю метод Update () моего объекта, выдается исключение «Отказано в доступе». Глядя на журнал SharePoint, я вижу жалобу, что «текущий пользователь не является администратором фермы»

Чтобы узнать, кто на самом деле является текущим пользователем, я установил точку останова в своем WebMethod, и когда он вызывается, я вижу, что Environment.UserName - это мой "фиктивный пользователь", а Environment.UserDomainName - локальный компьютер. домен.

Я добавил это LOCALMACHINENAME \ dummy в группу администраторов фермы (с помощью консоли центра администрирования), но все равно получаю это исключение.

Кто-нибудь имеет представление о том, что я мог бы попробовать для диагностики?

Ниже я включаю трассировку стека отладчика и журнал SharePoint.

Большое спасибо.


Stacktrace отладчика:

в Microsoft.SharePoint.Administration.SPPersistedObject.Update ()
в Microsoft.SharePoint.Administration.SPPersistedObject.Update (логическое обеспечение) at Equilibrium.FOO4SP.WebService.FOO4SPWebService.UpdatePersistedObject (свойства SPPersistedObject)


Файл журнала SharePoint:

02/18/2010 09: 20: 18.36 w3wp.exe (0x15CC) 0x1518 Топология Windows SharePoint Services 8xqz Средняя Обновление SPPersistedObject FOO4SPPersistedProperties Name = FOO4SP Parent = SPWebApplication Name = SharePoint - 2633. Версия: -1 Гарантируйте: 1, HashCode: 49982922, идентификатор: 6e54627b-be20-4f85-9d9d-28fde2d592d8, стек: в Microsoft.SharePoint.Administration.SPPersistedObject.Update () в Microsoft.SharePoint.Administration.SPPersistedObject.Update (логическое обеспечение) at Equilibrium.FOO4SP.WebService.FOO4SPWebService.UpdatePersistedObject (свойства SPPersistedObject) at Equilibrium.FOO4SP.WebService.FOO4SPWebService.GetWebApplicationPersistedProperties (Guid webApplicationId) at Equilibrium.FOO4SP.WebService.FOO4SPWebService.GetWebApplicationProperties (Guid webApplicationId) at System.RuntimeMethodHandle._InvokeMethodFast (Цель объекта, аргументы объекта [], SignatureStruct & sig, MethodAttributes ...

02/18/2010 09: 20: 18.36 * w3wp.exe (0x15CC) 0x1518 Топология Windows SharePoint Services 8xqz Средняя ... methodAttributes, RuntimeTypeHandle typeOwner) at System.RuntimeMethodHandle.InvokeMethodFast (Объектная цель, аргументы Object [], сигнатура сигнатуры, метод MethodAttributesAttributes, RuntimeTypeHandle typeOwner) в System.Reflection.RuntimeMethodInfo.Invoke (Object obj, BindingFlags invokeAttr, Binder Binder, параметры Object [], CultureInfo culture, логическое skipVisibilityChecks) в System.Reflection.RuntimeMethodInfo.Invoke (Object obj, BindingFlags invokeAttr, Binder binder, Object [] параметры, CultureInfo culture) в System.Web.Services.Protocols.LogicalMethodInfo.Invoke (Цель объекта, значения Object []) в System.Web.Services.Protocols.WebServiceHandler.Invoke () в System.Web.Services.Protocols.WebServiceHandler.CoreProcessRequest () на System.Web.Services.Protocol ...

02/18/2010 09: 20: 18.36 * w3wp.exe (0x15CC) 0x1518 Топология Windows SharePoint Services 8xqz Средняя ... s.SyncSessionlessHandler.ProcessRequest (контекст HttpContext) в System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () в System.Web.HttpApplication.ExecuteStep (шаг IExecutionStep, логический и завершен синхронно) в System.Web.HttpApplication.ApplicationStepManager.ResumeSteps (ошибка исключения) в System.Web.HttpApplication.System.Web.IHttpAsyncHandler.BeginProcessRequest (контекст HttpContext, AsyncCallback cb, Object extraData)в System.Web.HttpRuntime.ProcessRequestInternal (HttpWorkerRequest wr) в System.Web.HttpRuntime.ProcessRequestNoDemand (HttpWorkerRequest wr) в System.Web.Hosting.ISAPIRuntime.ProcessRequest (IntPtr ecb, Int32 iWRType)

02/18/2010 09: 20: 18.36 w3wp.exe (0x15CC) 0x1518 Топология Windows SharePoint Services 8дюй высокий Не удалось обновить объект SPPersistedObject, имя FOO4SPPersistedProperties = FOO4SP Parent = имя SPWebApplication = SharePoint - 2633, поскольку текущий пользователь не является администратором фермы.

Ответы [ 5 ]

2 голосов
/ 19 февраля 2010

Разрешения по умолчанию не позволяют обновлять базу данных конфигурации

По умолчанию в соответствии с MS , у вас есть доступ к следующим процедурам в базе данных Config:

proc_dropEmailEnabledList
proc_dropEmailEnabledListsByWeb
proc_dropSiteMap
proc_markForDeletionEmailEnabledList
proc_markForDeletionEmailEnabledListsBySite
proc_markForDeletionEmailEnabledListsByWeb
proc_putDistributionListToDelete
proc_putEmailEnabledList
proc_putSiteMap

Примечание : у меня также есть разрешения для не перечисленного proc_getObject (может быть, даже для других), но это мой блок разработки, где я уже испортил разрешения SQL. Возможно из-за этого.

Дополнительные разрешения, которые необходимо установить

Необходимо вручную установить разрешения для других процедур, чтобы иметь возможность обновлять базу данных конфигурации фермы с помощью (например) SQL Server Managament Studio . Конечно, вы можете добавить учетные записи пула веб-приложений с полным чтением / записью в базу данных фермы , но это, вероятно, не будет хорошей идеей. Согласно этой статье , вы должны установить разрешения для этих хранимых процедур, чтобы иметь возможность записи в SPWebApplication.PropertyBag:

Permission  Stored Procedure    Database Role
EXECUTE proc_putObject          WSS_Content_Application_Pools
EXECUTE proc_putClass           WSS_Content_Application_Pools
EXECUTE proc_dropObject         WSS_Content_Application_Pools
EXECUTE proc_getNewObjects      WSS_Content_Application_Pools

Чтобы узнать больше о разрешениях, прочитайте статью Microsoft . И, в соответствии с EULA , установка разрешений для объектов базы данных, разрешена (потому что я не вижу точки, которая утверждает, что она не разрешена). Многие другие взаимодействия напрямую с БД запрещены.

База данных конфигурации SharePoint 2007 Все хранимые процедуры

Процедуры 1 http://img534.imageshack.us/img534/9564/ss20100219101118.png Процедуры 2 http://img534.imageshack.us/img534/2149/ss20100219101149.png


0 голосов
/ 30 января 2012

Используйте следующее переопределение в своем пользовательском классе SPPersistedObject, чтобы избежать этой ошибки при обновлении ();

protected override bool HasAdditionalUpdateAccess()
{
    return true;
}

Надеюсь, это поможет.

Ссылочная ссылка

0 голосов
/ 20 февраля 2010

Почему вы не используете метод SPSecurity.RunWithElevatedPrivileges для получения / обновления SPPersistedObject?

0 голосов
/ 19 февраля 2010

Почему бы не использовать SPFarm.Properties мешок свойств?

0 голосов
/ 19 февраля 2010

Из кода, который я мог видеть, что вы вызываете вышеуказанное Обновление через WebService, вам необходимо проверить учетную запись пользователя, в которой WebService работает под учетной записью AppPool, Environment. * Не предоставит вам точные данные пользователя, которые вы ищете. Учетная запись AppPool веб-службы должна быть администратором фермы. Это быстрое предположение, что отладка не является решением

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