Tengo una situación inusual en la que necesito un trabajo de temporizador de SharePoint para tener privilegios de administrador de Windows locales y tener privilegios de SharePoint SHAREPOINT\System
.Sharepoint: ejecutando stsadm desde un trabajo de temporizador + SHAREPOINT Derechos del sistema
Puedo obtener los privilegios de Windows simplemente configurando el servicio del temporizador para usar una cuenta que es miembro de los administradores locales. Entiendo que esta no es una buena solución, ya que le da al servicio de temporizador de SharePoint más derechos de los que se supone que tiene. Pero al menos permite que mi trabajo del temporizador de SharePoint se ejecute stsadm
.
Otro problema con la ejecución del servicio de temporizador bajo el administrador local es que este usuario no tendrá necesariamente los privilegios de SharePoint SHAREPOINT\System
que también necesito para este trabajo de SharePoint. Resulta que SPSecurity.RunWithElevatedPrivileges
no funcionará en este caso. El reflector muestra que RunWithElevatedPrivileges
comprueba si el proceso actual es owstimer
(el proceso de servicio que ejecuta trabajos de SharePoint) y no realiza ninguna elevación este es el caso (el racional aquí, supongo, es que el servicio de temporizador se debe ejecutar bajo NT AUTHORITY\NetworkService
cuenta de Windows que que tiene SHAREPOINT\System
privilegios de SharePoint, y por lo tanto no hay necesidad de elevar los privilegios para un trabajo del temporizador).
La única solución posible aquí parece ser ejecutar el servicio de temporizador en su cuenta de windows NetworkService habitual y ejecutar stsadm como administrador local almacenando las credenciales de administrador en algún lugar y pasándolas a System.Diagnostics.Process.Run() a través del nombre de usuario, dominio y contraseña de StarInfo.
Parece que todo debería funcionar ahora, pero aquí hay otro problema al que estoy atascado en este momento. Stsamd está fallando con la siguiente ventana emergente de error (Winternals Filemon muestra que stsadm se ejecuta en el administrador en este caso) (!):
The application failed to initialize properly (0x0c0000142).
Click OK to terminate the application.
Visor de sucesos registra nada, excepto la ventana emergente.
El usuario administrador local es mi cuenta y cuando acabo de ejecutar stsadm
interactivamente bajo esta cuenta todo está bien. También funciona bien cuando configuro el servicio del temporizador para que se ejecute en esta cuenta.
Se aprecia cualquier sugerencia :)