System.Data.SqlClient. SqlException (0x80131904): Der Benutzer hat nicht die Berechtigung, um diese Aktion auszuführen

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

  1. Benutzerkonto des Timerdienstes (Farmkonto) herausfinden
  2. Microsoft SQL Server Management Studio starten und mit der in der Fehlermeldung erwähnten Instanz verbinden (in diesem Fall: ssrs-server.domain\SSRS,1234)
  3. Unter Anmeldungen das Farmkonto finden und Eigenschaften über rechte Maustaste (RM) öffnen.
  4. Auf der linken Seite „Sicherungsfähige Elemente“ öffnen
  5. Unten im Reiter „Explizit“ nach unten scrollen und in der Zeile „Serverstatus anzeigen“ bzw. „View Server State“ das Kästchen „Erteilen“ aktivieren.

SQL-Server - Anmeldungseigenschaften - Serverstatus anzeigen erteilen

Links

  1. social.technet.microsoft: Search Service Application creation causes DB errors in SharePoint Logs
  2. stackoverflow: SQL Server 2012 – Permission for access to sys.dm_db_index_usage_stats in Contained Database

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert