Fixing Event Error 7888: “User not found”
06 Jan 2011 4 Comments
We’ve been having an annoying recurring event log error every minute for a while on some of our farms. Recently we digged deep into the issue and finally fixed it J
This applies to SharePoint 2007 and SQL Server 2005. It’s likely fixed in other versions.
The error message is “Windows NT user or group ‘domain\user‘ not found” returned from the SQL server when a SSP synchronization timer jobs tries to sync service account access to the databases. It executes “sp_grantlogin ‘domain\user'” even though the account is already granted login in the databases (content and config).
After a lot of digging and code disassembling it turns out that the database stored procedure is case sensitive on the user name and SharePoint provides the user name in whatever casing you originally supplied to SharePoint (when creating app pools). I’m quite surprised by this and not sure if it’s always the case. We are using a SQL Server 2005 with proper case insensitive collation, but still…
Interestingly the domain name is not case sensitive.
The Implications
This error seems to be only an annoyance in the event log and nothing more as the user the job tries to add to the database is actually already there. Nothing is really broken by this.
The Fix
Fortunately it can easily be fixed by an administrator.
Procedure:
- Go to Central Administration / Operations / Service Accounts (/_admin/FarmCredentialManagement.aspx)
-
Choose “Web Application Pool” and “Windows SharePoint Services Web Application”
-
Go through every application pool and verify that the user name on the page is using the correct casing
- What is the correct casing? Lookup the user in your AD and use the value for sAMAccountName
- Click Ok
That’s it!
For good measure I restarted the timer services on every SharePoint server in the farm.
The Symptoms
You get the following lines in the ULS log:
12/08/2010 07:15:31.75 OWSTIMER.EXE (0x01D0) 0x1FB8 Office Server Office Server General 6pqn High Granting user 'domain\user' login access to server 'cbdks173\mosstest,1433'.
12/08/2010 07:15:31.77 OWSTIMER.EXE (0x01D0) 0x1FB8 484 880i High System.Data.SqlClient.SqlException: Windows NT user or group 'domain\user' not found. Check the name again. at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) at Syste...
12/08/2010 07:15:31.77* OWSTIMER.EXE (0x01D0) 0x1FB8 484 880i High ...m.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe) at System.Data.SqlClient.SqlCommand.ExecuteNonQuery() at Microsoft.Office.Server.Data.SqlSession.ExecuteNonQuery(SqlCommand command)
12/08/2010 07:15:31.77 OWSTIMER.EXE (0x01D0) 0x1FB8 484 880j High SqlError: 'Windows NT user or group 'domain\user' not found. Check the name again.' Source: '.Net SqlClient Data Provider' Number: 15401 State: 1 Class: 11 Procedure: 'sp_grantlogin' LineNumber: 49 Server: 'cbdks173\mosstest,1433'
12/08/2010 07:15:31.77 OWSTIMER.EXE (0x01D0) 0x1FB8 484 880k High at Microsoft.Office.Server.Data.SqlServerManager.GrantLogin(String user) at Microsoft.Office.Server.Administration.SharedResourceProvider.SynchronizeConfigurationDatabaseAccess(SharedComponentSecurity security) at Microsoft.Office.Server.Administration.SharedResourceProvider.SynchronizeAccessControl(SharedComponentSecurity sharedApplicationSecurity) at Microsoft.Office.Server.Administration.SharedResourceProvider.Microsoft.Office.Server.Administration.ISharedComponent.Synchronize() at Microsoft.Office.Server.Administration.SharedResourceProviderJob.Execute(Guid targetInstanceId) at Microsoft.SharePoint.Administration.SPTimerJobInvoke.Invoke(TimerJobExecuteData& data, Int32& result)
12/08/2010 07:15:31.77 OWSTIMER.EXE (0x01D0) 0x1FB8 484 880l High ConnectionString: 'Data Source=cbdks173\mosstest,1433;Initial Catalog=master;Integrated Security=True;Enlist=False;Pooling=False' ConnectionState: Open ConnectionTimeout: 15
12/08/2010 07:15:31.77 OWSTIMER.EXE (0x01D0) 0x1FB8 484 880m High SqlCommand: 'sp_grantlogin' CommandType: StoredProcedure CommandTimeout: 0 Parameter: '@loginame' Type: NVarChar Size: 128 Direction: Input Value: 'domain\user'
Combined with this application event log error every minute:
Log Name: Application Source: Office SharePoint Server Date: 08-12-2010 08:32:31 Event ID: 7888 Task Category: (1516) Level: Error Keywords: Classic User: N/A Computer: <computer> Description: The description for Event ID 7888 from source Office SharePoint Server cannot be found. Either the component that raises this event is not installed on your local computer or the installation is corrupted. You can install or repair the component on the local computer. If the event originated on another computer, the display information had to be saved with the event. The following information was included with the event: Windows NT user or group 'domain\user' not found. Check the name again. System.Data.SqlClient.SqlException: Windows NT user or group 'domain\user' not found. Check the name again. at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe) at System.Data.SqlClient.SqlCommand.ExecuteNonQuery() at Microsoft.Office.Server.Data.SqlSession.ExecuteNonQuery(SqlCommand command) at Microsoft.Office.Server.Data.SqlServerManager.GrantLogin(String user) at Microsoft.Office.Server.Administration.SharedResourceProvider.SynchronizeConfigurationDatabaseAccess(SharedComponentSecurity security) at Microsoft.Office.Server.Administration.SharedResourceProvider.SynchronizeAccessControl(SharedComponentSecurity sharedApplicationSecurity) at Microsoft.Office.Server.Administration.SharedResourceProvider.Microsoft.Office.Server.Administration.ISharedComponent.Synchronize()