Thursday, March 12, 2015

Permission Issues Opening/Editing Office Web Apps Documents SharePoint 2013


Symptoms:

Users provided access to SharePoint through Active Directory (AD) Security Groups may  not be able to edit documents via the browser using Office Web Apps (OWA) without error.

In this scenario, the error from the Word App is: "There's a configuration problem preventing us from getting your document.  If possible, try opening this document in Microsoft Word."

We may find the following information after analyzing the ULS logs from the Office web apps Server and SharePoint Server.

From Office web apps server: (OWA folder in Logs)

w3wp.exe (0x113C) | 0x31C0 | Office Web Apps | WAC Hosting Interaction |
 ajryn | Unexpected | WOPICheckFile,WACSERVER ConfigError [error:The
 SharePoint site appears to have its UPA in an improper sync state.  Please
 contact the SharePoint administrator.  The SharePoint site's WOPI handler
 has determined that the user permissions for this file/folder do not match
 the user permissions when wopiframe.aspx was loaded. |
 WOPICheckFile,WACSERVER | Host Status Code: Unauthorized | Host Error Info:
 SyncUPA, url:https://URLofSite/_vti_bin/wopi.ashx/files/GUID...., host
 correlation:]

w3wp.exe (0x113C) | 0x31C0 | Office Web Apps | WAC Hosting Interaction |
 adhsk | Unexpected | WOPI CheckFile: Catch-All Failure
 [exception:Microsoft.Office.Web.Common.EnvironmentAdapters.ConfigErrorExcept
 ion: The SharePoint site appears to have its UPA in an improper sync state.
 Please contact the SharePoint administrator.  The SharePoint site's WOPI
 handler has determined that the user permissions for this file/folder do not
 match the user permissions when wopiframe.aspx was loaded. |
 WOPICheckFile,WACSERVER | Host Status Code: Unauthorized | Host Error Info:
 SyncUPA

Cause:

http://support.microsoft.com/kb/2908321

This issue can occur if the User Profile Application (UPA) is out of sync.
 If a user profile and the relevant group memberships for the user are not
 synchronized, SharePoint Server 2013 may incorrectly deny access to a given
 resource.

Resolution:
  1. Delete the user from the User Profile database in SharePoint Central Administration
    1. SharePoint Central Administration
    2. Application Management
    3. Manage Service Applications
    4. User Profile Synchronization Service
    5. Manage User Profiles
    6. Search for user
  2. Go to top level site collection with admin privileges
  3. Open the page https://siteurl/_layouts/people.aspx?MembershipGroupId=0 (all users in the site collection)
  4. Find your user, right click the name, and copy shortcut (url to the user's profile page)
  5. Paste the shortcut into the browser address field and append to it (don't press Enter yet): append Force=True (http://servername/_layouts/userdisp.aspx?ID=25&Force=True), press Enter
  6. Click on "Delete User from site collection" link on the toolbar
  7. From Central Administration, start a Full User Profile Synchronization.  Wait until this finishes to continue.
  8. Check that the user now exists in the User Profile database
  9. SharePoint Central Administration
  10. Application Management
  11. Manage Service Applications
  12. User Profile Synchronization Service
  13. Manage User Profiles
  14. Search for user
  15. Add the same user back to the SharePoint group in the Site Collection
  16. Test

Monday, February 9, 2015

Use PowerShell to Delete SharePoint List Items Based on Parameters From an External File

Below is a PS script I wrote to take parameters from a .csv file, find matching SharePoint list items based on 2 parameters, and delete that list item. I am also writing to another external .txt file the parameters of any list items that were missed so I can investigate why there was no match (internal administration).

#Import the csv file that holds the parameters we need to filter the SharePoint
$csv = Import-Csv d:\temp\importfilename.csv

#An error file - Clear this file in case anything was there from a previous run Clear-Content d:\temp\checkTheseFailedDeletes.txt

#Get the SharePoint web(site)
$web = Get-SPWeb http://sharepointsite

#Get the SharePoint list
$list = $web.Lists["Your List Name Here"]

$itemsTotal = 0
$count = 0

#Loop through each row of the input .csv file
foreach ($rox in $csv)
{
     #Assign each column's value to a variable
     $thisParam1 = $row.Param1ColumnFromCSV
     $thisParam2 = $row.Param2ColumnFromCSV

     #Build the CAML query and execute it on the list
     $query = New-Object Microsoft.SharePoint.SPQuery
     $query.ViewAttributes = "Scope='Recursive'"
     $caml = "$thisParam1$thisParam2"
     $query.Query = $caml
     $items = $list.GetItems($query)

     #Delete the item from the list if found
     if ($items.Count -gt 0)
     {
          $items | % { list.GetItemById($_.Id).Delete() }
          $caml = ""
          $count++
     }
    
     #Write records that were not found in the list to a text file to manually check if necessary
     else
     {
          $caml = ""
          $writeString = $thisParam1 + ", " + $thisParam2
          Add-Content d:\temp\checkTheseFailedDeletes.txt $writeString
     }
    
     $itemsTotal++
}

Write-Host $itemsTotal "records processed ===> " $count "records deleted"
$web.Dispose()

Tuesday, December 16, 2014

Farm is unavailable - Registry Error After SP1 or CU

SYMPTOMS:
1.  SharePoint front end or application server is not working (ie .net error msg)
2.  You have an application error something like parameter incorrect server
3.  Errors in Event Log about the server not being part of the farm
4.  Timer jobs in Central Administration are paused for a specific server in the farm

RESOLUTION:
Check the following registry key and change if it contains an incorrect value (Note: it's best to copy value from another server in the same farm if need be)
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Shared Tools\Web Server Extensions\15.0\Secure\ConfigDB

Key: dsn
Type: REG_SZ


Incorrect Value:
Connect Timeout=30

Correct Value Format: (Note: You can also copy the correct value from the same registry key of another server in the same farm)
Data Source=YOUR_SQL_SERVER_MACHINE;Initial Catalog=YOUR_SHAREPOINT_CONFIG_DB_NAME;Integrated Security=True;Enlist=False;Pooling=True;Min Pool Size=0;Max Pool Size=100;Connect Timeout=15


No need to restart the server.  It will automatically become a member of the farm again.  But you can restart the server if it gives you a warm fuzzy, it was already "down" anyway.  You will notice in CA that the paused timer jobs will start processing again.

Tuesday, May 21, 2013

Resolving a HTTP/1.1 200 OK Server: Microsoft-IIS/7.5 Error with a SharePoint 2010 Web Application

My team ran into this error on a SharePoint site during a disaster recovery drill while testing after failover and failback:

HTTP/1.1 200 OK Server: Microsoft-IIS/7.5 Connection: close

We have load balanced WFEs so we determined the offending WFE and temporarily manually routed traffic to the good WFE.  Obviously, this is not the desired solution but it worked as a temporary solution to get through the DR drill.

To resolve this issue permanently, we tried detaching and reattaching the content database for the Web Application and, success!  Mad props go out to Mark Rhodes for his post, Resolving a HTTP/1.1 200 OK Server: Microsoft-IIS/7.5 Error with a SharePoint 2010 Web Application, on this same issue.  Thank you, sir!

Monday, April 22, 2013

SharePoint Designer 2010: You do not have permission to do this operation

We had a user who had Design permissions on a subsite trying to edit a page in SharePoint Designer 2010.  The user could connect to the site in SPD.

When the user tried to edit a page he received the following error: "You do not have permission to do this operation.  Ask your web site administrator to change your permissions and then try again, or log on with a user account that has this permission."

After clicking OK, the user received this Master Page error message: "The Master Page file 'location of master page' cannot be loaded.  Attach a different Master Page, or correct the problem in Code view."

Since the Master Page was located at the site collection level and the user was editing in a subsite I checked the user's permissions.  Even though the user had Design permissions to the subsite, the user only had Read permissions at the site collection level.  So my suspicion was that the user did not have the proper permissions at the site collection level.  Thanks to Sue Hernandez's blog post for confirming this and also posting a link to the specific Microsoft KB article to support and confirm.  Microsoft explains:

Overall, an user needs to be a member of one of the following groups at the site collection level to be able to use SharePoint Designer and modify SharePoint content:

· Site Collection Administrators
· Designers
· Owners

Monday, April 8, 2013

Security Token Service Access Denied

Error message from ULS:

An exception occurred when trying to issue security token: The server was unable to process the request due to an internal error.  For more information about the error, either turn on IncludeExceptionDetailInFaults (either from ServiceBehaviorAttribute or from the configuration behavior) on the server in order to send the exception information back to the client, or turn on tracing as per the Microsoft .NET Framework 3.0 SDK documentation and inspect the server trace logs..
SPSecurityTokenService.Issue() failed: System.Runtime.InteropServices.COMException (0x80070005): Access is denied. at System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail) at System.DirectoryServices.DirectoryEntry.Exists(String path) at Microsoft.SharePoint.Administration.SPMetabaseObject.get_Exists() at Microsoft.SharePoint.Administration.Claims.SPSecurityTokenServiceManager.<>c__DisplayClass8.b__6() at Microsoft.SharePoint.SPSecurity.<>c__DisplayClass4.b__2() at Microsoft.SharePoint.Utilities.SecurityContext.RunAsProcess(CodeToRunElevated secureCode) at Microsoft.SharePoint.SPSecurity.RunWithElevatedPrivileges(WaitCallback secureCode, Object param) at Microsoft.SharePoint.SPSecurity.RunWithElevatedPrivileges(CodeToRunElevated secureCode) at Microsoft.SharePoint.Administration.Claims.SPSecurityTokenServiceManager.EnsureSharePointLogonRequestClaims(Claim logonIdentityClaim, SPClaim& sharePointIdentityClaim) at Microsoft.SharePoint.IdentityModel.SPSecurityTokenService.EnsureSharePointClaims(SPRequestInfo info, IClaimsIdentity outputIdentity) at Microsoft.SharePoint.IdentityModel.SPSecurityTokenService.GetOutputClaimsIdentity(IClaimsPrincipal principal, RequestSecurityToken request, Scope scope) at Microsoft.IdentityModel.SecurityTokenService.SecurityTokenService.Issue(IClaimsPrincipal principal, RequestSecurityToken request)     at Microsoft.SharePoint.IdentityModel.SPSecurityTokenService.Issue(IClaimsPrincipal principal, RequestSecurityToken request)


Resolution:

Reprovision the Secure Store Service.  In this specific situation simply adding the proper permissions to the database for the Secure Store Service account fixed the issue.  If you are not a DBA you could reprovision the Secure Store Service through Powershell by using the following commands and this would effectively do the same thing.

PS C:\> $mysts = Get-SPServiceApplication | ?{$_ -match "Security Token Service"}
PS C:\> $mysts

 
DisplayName TypeName Id
----------- -------- --
Security Token Se... Security Token Se...

 PS C:\> $mysts.StatusOnline
PS C:\> $mysts.Provision()