Problem
System.Data.SqlClient.SqlException (0x80131904)
The user does not have permission to perform this action
Der Benutzer hat nicht die Berechtigung, um diese Aktion auszuführen
Unknown SQL Exception 297 occurred.
Details
Im SharePoint ULS-Logs tauchen regelmäßig folgende oder ähnliche Einträge auf:
- System.Data.SqlClient.SqlException (0x80131904): Der Benutzer hat nicht die Berechtigung, um diese Aktion auszuführen.
- System.Data.SqlClient.SqlException (0x80131904): The user does not have permission to perform this action.
- SqlError: ‚Der Benutzer hat nicht die Berechtigung, um diese Aktion auszuführen.‘ Source: ‚.Net SqlClient Data Provider‘
- Unknown SQL Exception 297 occurred.
ULS-Log Eintrag
Process | OWSTIMER.EXE |
---|---|
Product | SharePoint Foundation |
Category | Database |
Level | High-Critical |
System.Data.SqlClient.SqlException (0x80131904): Der Benutzer hat nicht die Berechtigung, um diese Aktion auszuführen. bei System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) bei System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) bei System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) bei System.Data.SqlClient.SqlDataReader.TryConsumeMetaData() bei System.Data.SqlClient.SqlDataReader.get_MetaData() bei System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) bei System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds) bei System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite) bei System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) bei System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) bei System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior) bei Microsoft.SharePoint.Utilities.SqlSession.ExecuteReader(SqlCommand command, CommandBehavior behavior, SqlQueryData monitoringData, Boolean retryForDeadLock) ClientConnectionId:3d016145-4172-47db-847c-4a05dde6f3f9
SqlError: 'Der Benutzer hat nicht die Berechtigung, um diese Aktion auszuführen.' Source: '.Net SqlClient Data Provider' Number: 297 State: 1 Class: 16 Procedure: '' LineNumber: 5 Server: 'unser-ssrs-server.domain\SSRS,1234'
Unknown SQL Exception 297 occurred. Additional error information from SQL Server is included below. Der Benutzer hat nicht die Berechtigung, um diese Aktion auszuführen.
ConnectionString: 'Data Source=SSRS;Initial Catalog=master;Integrated Security=True;Pooling=True' Partition: NULL ConnectionState: Closed ConnectionTimeout: 15
Fix
Alle SP-DBs befinden sich bei uns (bis auf die DBs der SSRS-Dienstanwendung) auf der SharePoint SQL-Server-Instanz. Die SSRS-DBs liegen auf der anderen SQL-Server-Instanz (ssrs-server.domain\SSRS,1234).
Da die SSRS-DBs der Dienstanwendung aber zur SP-Farm gehören, muss SP-Timerdienst (für Wartungsläufe etc.) auf diese SSRS-DBs zugreifen können.
In dem Fall waren für das Konto des Timer-Dienstes die Serverrollen „dbcreator“, „public“ und „securityadmin“ auf der SSRS-Instanz nicht ausreichend. Das Konto muss (wie auf der SP-Instanz schon der Fall ist) die Berechtigung „Serverstatus anzeigen“ (bzw. VIEW SERVER STATE) bekommen. Dazu folgendes durchführen.
View Server State für das Farmkonto
- Benutzerkonto des Timerdienstes (Farmkonto) herausfinden
- Microsoft SQL Server Management Studio starten und mit der in der Fehlermeldung erwähnten Instanz verbinden (in diesem Fall: ssrs-server.domain\SSRS,1234)
- Unter Anmeldungen das Farmkonto finden und Eigenschaften über rechte Maustaste (RM) öffnen.
- Auf der linken Seite „Sicherungsfähige Elemente“ öffnen
- Unten im Reiter „Explizit“ nach unten scrollen und in der Zeile „Serverstatus anzeigen“ bzw. „View Server State“ das Kästchen „Erteilen“ aktivieren.