Quelques notes sur l’authentification par formulaire avec SSRS intégré à SharePoint

Il est possible d’utiliser un mode d’authentification propriétaire dans SharePoint: il suffit de se définir un ASP.Net Membership Provider. Si vous avez aussi besoin de définir des rôles afin de faciliter l’autorisation du contenu pour les différents utilisateurs, vous devrez aussi définir un ASP.Net Role Provider.

En mode Claims (ex. avec SharePoint 2010), vous aurez besoin de modifier plusieurs Web.Config afin d’intégrer votre Membership et Role provider:

  1. Ceux de vos applications Web (ex. SharePoint – 80)
  2. Celui de SharePoint Administration
  3. Celui de Security Token Service sous SharePoint Web Services

Si vous avez plusieurs “applications SSRS” accessibles par différents types d’utilisateurs, l’idéal serait de définir des rôles (ex. Analysts, Executives etc.) et de sécuriser les sites SharePoint contenant les rapports SSRS avec ces rôles. La structure de site serait donc:

  1. Site racine (/)
  2. Sous-site pour les analystes (/Analysts) accessible uniquement pour les membres du rôle Analysts
  3. Sous site pour les exécutifs (/Executives) accessible uniquement pour les membres du rôle Executives

La navigation de SharePoint enlève automatiquement les liens vers les sites dont l’utilisateur n’ont pas accès. Par exemple, si un utilisateur n’est n’est ni dans le rôle Analysts ni dans le rôle Executives, la section “Sites and Workspaces” sera vide:

image

Si vos rapports utilisent des sources de données XML (ex. sur un fichier de configuration), vous devrez stocker ces fichiers statiques dans un site SharePoint où l’accès anonyme a été autorisé. La raison est que les sources de données XML supportent uniquement l’authentification Windows ou Anonyme. Il n’est pas possible d’utiliser une identité stockée (ex. compte de service) avec ce type de connexion.

Donc notre site racine permettrait l’accès anonyme et contiendrait une librairie de documents contenant ces fichiers statiques. Les sources de données XML référeraient à ces fichiers en mode anomyme:

  1. L’application Web doit permettre l’accès anonyme:

    image

  2. Le site racine doit permettre l’accès anonyme:

    image

    image

  3. La source de données XML doit être en mode anonyme:

    image

  4. Les utilisateurs doivent s’authentifier pour accéder aux rapports:

    image

    image

    Autrement, ils auront cette erreur:

    image

    Reporting Services does not support anonymous user from a SharePoint site. To view Reporting Services reports, choose a SharePoint site that does not have Anonymous access enabled or sign in on an anonymous site.

Si vous utilisez des sources de données vers des bases de données Analysis Services (SSAS) et que celles-ci utilisent la sécurité de données vous pourrez utiliser cette technique:

  1. Un compte Active Directory devra être créé pour représenter un rôle dans la base de données SSAS (ex. Analysts et Executives).
  2. Une composante (ex. procédure stockée SQL) devra être capable de faire correspondre un utilisateurs formulaire vers un rôle (ex. Analyste1 est dans le rôle Analysts).
  3. Les rapports définissent des connexions directement dans le rapport (et non dans une source de données partagée) afin de pouvoir utiliser une expression qui ajoute EffectiveUserName=Analysts|Executives à la fin. Le rapport appelle la composante en #2 pour obtenir le nom du compte Windows à utiliser dans EffectiveUserName.
  4. L’identité d’un compte de service, administrateur de l’instance SSAS, devra être utilisée pour la connexion. C’est requis afin d’être en mesure d’utiliser EffectiveUserName.

J’en parle avec plus de détails dans mon article intitulé: Authentification par formulaire, SharePoint, SSRS et sécurité des données dans SSAS

SYNTELL a réalisé plusieurs mandats où l’on devait intégrer l’authentification propriétaire du client au sein d’une solution Microsoft BI.

Références

Claims Walkthrough: Creating Forms-Based Authentication for Claims-Based SharePoint 2010 Web Applications Using ASP.NET SQL Membership and Role Providers
https://msdn.microsoft.com/en-us/library/office/gg252020%28v=office.14%29.aspx

Forms Authentication in SharePoint Products and Technologies (Part 2): Membership and Role Provider Samples
https://msdn.microsoft.com/en-us/library/office/bb975135%28v=office.12%29.aspx

XML Connection Type (SSRS)
https://msdn.microsoft.com/fr-ca/library/dd220468.aspx?f=255&MSPPError=-2147217396

Comment faire disparaitre certaines erreurs suite à une installation SharePoint 2013

DCOM 10016

J’ai déjà traité des erreurs DCOM 10016 dans une entrée de blogue Comment faire disparaitre les erreurs DCOM 10016 suite à une installation SharePoint publiée il y a quelques années et suscitant encore beaucoup de traffic. Les erreurs ressemblent à:

The application-specific permission settings do not grant Local Activation permission for the COM Server application with CLSID {61738644-F196-11D0-9953-00C04FD919C1}
to the user <Nom de l’utilisateur du AppPool> SID <SID du AppPool>.
This security permission can be modified using the Component Services administrative tool.

Avec SharePoint 2013, il y a de nouveaux GUIDs qui s’affichent dans le Event Viewer. Aussi, il est recommandé par Microsoft d’utiliser un compte de service différent pour le site d’administration (ex. cs-webadmin) que pour les autres applications Web (ex. cs-web). Si Microsoft SQL Server Integration Services est installé, vous pouvez aussi recevoir des erreurs similaires pour le compte de service SQL (ex. cs-sql).

Voici donc la liste complète des GUIDs pour lesquels on doit suivre mon guide précédent, ainsi que les utilisateurs pour lesquels on doit attribuer des droits:

GUID

Component Service

Utilisateur(s)

{61738644-F196-11D0-9953-00C04FD919C1} IIS WAMREG admin Service cs-webadmin, cs-web
{000C101C-0000-0000-C000-000000000046} {000C101C-0000-0000-C000-000000000046} cs-webadmin, cs-web
{83B33982-693D-4824-B42E-7196AE61BB05} Microsoft SQL Server Integration Services 11.0 cs-sql

Erreurs Reporting Services pour les extensions de données

Par exemple, vous avez peut-être ces erreurs dans les journaux SharePoint (ULS) et SSRS:

Exception caught instantiating TERADATA report server extension:
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation.

Voici un script PowerShell qui désactive les extensions qui ne sont pas utilisées la plupart du temps:

$ssrs = Get-SPRSServiceApplication

$ext = Get-SPRSExtension -Identity $ssrs.Id

$e = $ext | Where-Object {$_.Name -eq « TERADATA » -and $_.ExtensionType -eq « Data »}

Remove-SPRSExtension -Name $e.Name -ExtensionType $e.ExtensionType -Identity $ssrs.Id

$e = $ext | Where-Object {$_.Name -eq « TERADATA » -and $_.ExtensionType -eq « SemanticQuery » }

Remove-SPRSExtension -Name $e.Name -ExtensionType $e.ExtensionType -Identity $ssrs.Id

$e = $ext | Where-Object {$_.Name -eq « TERADATA » -and $_.ExtensionType -eq « ModelGeneration » }

Remove-SPRSExtension -Name $e.Name -ExtensionType $e.ExtensionType -Identity $ssrs.Id

$e = $ext | Where-Object {$_.Name -eq « SQLPDW » -and $_.ExtensionType -eq « Data » }

Remove-SPRSExtension -Name $e.Name -ExtensionType $e.ExtensionType -Identity $ssrs.Id

$e = $ext | Where-Object {$_.Name –eq « SQLPDW » -and $_.ExtensionType -eq « SemanticQuery » }

Remove-SPRSExtension -Name $e.Name -ExtensionType $e.ExtensionType -Identity $ssrs.Id

Erreurs SQL Server 2012 et SSAS 2012

Si vous avez les erreurs suivantes dans votre observateur d’événements, veuillez suivre ce guide pour les faire disparaître.

SQL Server

sqlservr (3472) tentative d’ouvrir le fichier « C:\Windows\system32\LogFiles\Sum\Api.log » pour uniquement un accès en lecture a échoué avec l’erreur système 5 (0 x 00000005): « Accès refusé ». L’opération d’ouverture de fichier échouera avec l’erreur -1032 (0xfffffbf8).

sqlservr (3472) erreur 1032 (0xfffffbf8) s’est produite lors de l’ouverture du fichier journal C:\Windows\system32\LogFiles\Sum\Api.log.

sqlservr (3472) An attempt to open the file « C:\Windows\system32\LogFiles\Sum\Api.log » for read only access failed with system error 5 (0x00000005): « Access is denied. « . The open file operation will fail with error -1032 (0xfffffbf8).

sqlservr (3472) Error -1032 (0xfffffbf8) occurred while opening logfile C:\Windows\system32\LogFiles\Sum\Api.log.

SSAS

msmdsrv (4680) tentative d’ouvrir le fichier « C:\Windows\system32\LogFiles\Sum\Api.chk » pour la lecture / écriture a échoué avec l’erreur système 5 (0 x 00000005): « Accès refusé ». L’opération d’ouverture de fichier échouera avec l’erreur -1032 (0xfffffbf8).

msmdsrv (4680) erreur 1032 (0xfffffbf8) s’est produite lors de l’ouverture du fichier journal C:\Windows\system32\LogFiles\Sum\Api.log.

msmdsrv (4680) An attempt to open the file « C:\Windows\system32\LogFiles\Sum\Api.chk » for read / write access failed with system error 5 (0x00000005): « Access is denied. « . The open file operation will fail with error -1032 (0xfffffbf8).

msmdsrv (4680) Error -1032 (0xfffffbf8) occurred while opening logfile C:\Windows\system32\LogFiles\Sum\Api.log.

Erreur SharePoint pour SPUsageImportJobDefinition

Si vous avez l’erreur suivante:

The Execute method of job definition Microsoft.SharePoint.Administration.SPUsageImportJobDefinition (ID ef497ec2-0cbf-4458-91ea-db75422fd9da) threw an exception. More information is included below.

Utilisez la soution décrite ici.

Comment lancer un rapport SSRS automatiquement lorsqu’un utilisateur accède à un site SharePoint

Si, comme nous, vous utilisez SharePoint comme dépôt pour vos rapports Reporting Services, vous souhaitez probablement que l’utilisateur accède directement au rapport, et non au site SharePoint.

Vous pouvez tout simplement lui donner l’URL complet vers le rapport, mais cela génère souvent des hyperliens longs.

L’autre approche est d’utiliser un petit script Power Shell:

$web = Get-SPWeb “https://server/sites/client

$folder = $web.RootFolder

$folder.WelcomePage = « FR/Rapports/Rapport1.rdl »

$folder.update()

$web.Dispose()

Ce qui fait que si le client va à l’url https://server/sites/client, il sera automatiquement redirigé à https://server/sites/client/FR/Rapports/Rapport1.rdl.

Merci à mon collègue au support technique pour cette trouvaille.

Virtualisation, plate-forme BI de Microsoft et économie d’énergie

Introduction

Les utilisateurs n’aiment pas attendre. Les entreprises comme Amazon et Google prennent cela très au sérieux, tel qu’indiqué dans cet article:

Surprising as all this may be, the implications of this impatience are even more shocking. Amazon‘s calculated that a page load slowdown of just one second could cost it $1.6 billion in sales each year. Google has calculated that by slowing its search results by just four tenths of a second they could lose 8 million searches per day–meaning they’d serve up many millions fewer online adverts.

On est d’accord sur le fait qu’un rapport BI est plus complexe à générer qu’une page listant les produits électroniques en solde. Mais les utilisateurs vont quand même exiger des performances acceptables, autrement ils n’utiliseront pas l’application.

C’est pourquoi vous devez faire passer les performances avant les économies d’énergie sur vos serveurs desservant la solution BI.

Plusieurs CPU modernes supportent des fonctions d’économie d’énergie afin de diminuer la consommation d’énergie quand les serveurs ne sont pas trop occupés. Cependant, cette mécanique ne réagit pas assez vite et fait en sorte que la peformance de l’application BI sera médiocre … sauf lors de pointes d’utilisation (charge).

The theory is in “Balanced” mode the CPU will run at a lower clock speed when it is under low workload, and bring more resources online when there is more to do. As great as it sounds, this won’t always be your best option. If your workload is incredibly bursty (quick moments of intense work), your SQL query speeds will take a hit, as by the time Windows has decided it needs more resources the work may already be done.

Symptômes

Si vous ne contrôlez que les paramètres du système d’exploitation “Guest” (machine virtuelle), voici les symptômes qui peuvent indiquer que l’hôte utilise des fonctions de gestion d’énergie:

  1. Si vous utilisez un outil de Benchmark, comme NovaBench, les résultats varient beaucoup d’un test à l’autre.
  2. Si vous demandez un rapport, les temps sont mauvais. Si vous demandez X rapports où X est le nombre de vCPU, les temps individuels sont meilleurs …

Recommandation

Il peut y avoir trois niveaux de configuration:

  1. BIOS
  2. Hypervisor
  3. OS

La recommandation est de soit désactiver la gestion de l’énergie dans le BIOS, soit l’activer en laissant le contrôle à l’OS (OS Controlled). Dans ce dernier cas, il faut s’assurer que l’hypervisor et / ou l’OS guest utilise High Performance.

Par défaut, VMWare ESX/ESXi utilise High Performance par défaut.

Par défaut, Windows Server 2008 R2 est à Balanced Performance, ce qui n’est pas désirable dans un environnement BI de Microsoft.

Références

Does CPU power management affect server performance?
http://serverfault.com/questions/94212/does-cpu-power-management-affect-server-performance

Consider CPU Power Optimization Versus Performance When Virtualizing
http://workinghardinit.wordpress.com/2011/06/20/consider-cpu-power-optimization-versus-performance-when-virtualizing/

Follow Up on Power Options for Performance When Virtualizing
http://workinghardinit.wordpress.com/2011/07/01/follow-up-on-power-options-for-performance-when-virtualizing/

Best Practices in Power Management
http://en.community.dell.com/techcenter/power-cooling/w/wiki/best-practices-in-power-management.aspx

(VMWare) Using CPU Power Management Policies
http://pubs.vmware.com/vsphere-4-esx-vcenter/index.jsp#managing_cpu_resources/c_managing_cpu_power_efficiency.html

Degraded overall performance on Windows Server 2008 R2
http://support.microsoft.com/kb/2207548/en-us

SQL Server on Power-Saving CPUs? Not So Fast.
http://www.brentozar.com/archive/2010/10/sql-server-on-powersaving-cpus-not-so-fast/

Why Microsoft Windows Server 2012 produces slow and inconsistent SQL query speeds
http://www.masterofmalt.com/software-development/blog/why-microsoft-windows-server-2012-produces-slow-and-inconsistent-sql-query-speeds/

Reporting Services 2012 (intégré à SharePoint) sur un portable de démo: désolé vous devrez utiliser une identité stockée pour vos connexions aux sources de données

La meilleure manière de présenter une application BI à un client potentiel ou à un partenaire reste souvent le portable de démo. Il y a de bonne chances que la salle de réunion ou le kiosque ne vous permette pas d’accéder à votre serveur (qui est en ligne) de manière sécuritaire, fiable, performante etc …

Alors aussi bien tout installer (données, logiciels, progiciels etc.) sur le portable et pouvoir préparer vos présentations dans l’autobus, le train, à la maison etc. Une fois rendu vous êtes certain que tout va fonctionner et ça, comme dirait l’annonce, ça n’a pas de prix!

De plus, si vous avez fait vos devoir et avez acheté une machine décente (ex. Core i7 Quad avec 8 Go de RAM et +), la performance de l’applicatif sera au rendez-vous. Cela ne pourra rivaliser avec un serveur dédié, mais dans un mode un seul utilisateur (vous), les temps seront très bons pour afficher vos tableaux de bord.

Avec les versions 2008 et 2008 R2 de Reporting Services, il était possible d’installer SharePoint et SQL Server avec des comptes Windows locaux (vs de domaine) et d’impersonifier l’utilisateur entrant dans SharePoint pour se connecter aux sources de données. Ainsi, lors de la démonstration, il était possible d’utiliser des utilisateurs Windows (locaux) différents pour illustrer des cas de sécurité applicative ou une configuration par utilisateur (ex. SYNTELL MonTB).

Malheureusement, Reporting Services 2012 exige dorénavant un contrôleur de domaine (Domain Controller) pour utiliser ce mode d’authentification. Cela veut dire qu’un portable déconnecté du domaine ne pourra pas fonctionner contrairement aux versions 2008 / 2008R2 de Reporting Services.

Oh ce n’est pas écrit noir sur blanc mais c’est la conclusion à laquelle je suis arrivé en faisant … disons … quelques lectures et tests … Pas de nature à abandonner trop rapidement, j’ai fini par comprendre pourquoi je n’arrivais pas à le faire fonctionner:

  1. Reporting Services 2012, intégré à SharePoint, ne fonctionne qu’en authentification claims, peu importe si l’application Web est en mode classique ou Claims.
  2. Lorsque SSRS veut se connecter à une source de données (ex. SQL Server, SSAS), il doit convertir le claims en identité Windows.
  3. Le service Windows C2WTS (Claims to Windows Token Service) sert justement à cela. Il doit donc être configuré et démarré.
  4. Ce service finit par essentiellement faire ceci:WindowsIdentity s4u = new WindowsIdentity(upn);
    WindowsImpersonationContext wic = s4u.Impersonate();

    upn sera le nom de l’utilisateur local qui a accédé à SharePoint (ex. PortableDeDemo\SuperUtilisateur)

  5. Ce code .NET va éventuellement appeler la fonction d’API Windows LsaLogonUser.Et c’est là que le bât blesse: cette fonction a besoin de parler au contrôleur de domaine pour fonctionner. S’il n’est pas disponible, vous aurez une erreur ressemblant à ceci en testant la connexion SSRS ou en exécutant le rapport:

    Cannot convert claims identity to windows token.

    Ou si le journal Kerberos est activé, dans l’observateur d’événements, volet sécurité:

    An Error occured during Logon.

    Failure Reason:                An Error occured during Logon.Status:                  0xC000005E

    Et la description de 0xC000005E  est:

    There are currently no logon servers available to service the logon request.

Donc pour résumer:

  1. Oui il est possible d’utiliser C2WTS sur un serveur unique. Mais le serveur doit avoir accès en tout temps au contrôleur de domaine et des comptes de services doivent être utilisés pour SharePoint et SQL Server.
  2. Pour un portable de démo avec SSRS 2012 en mode SharePoint, vous devrez stocker une identité spécifique sur vos connexions SSRS:image

    Et utiliser des comptes locaux pour SharePoint et SQL Server.

Références

Verifying whether the broken piece is c2WTS or Active Directory
http://blogs.msdn.com/b/rodneyviana/archive/2014/03/21/verifying-whether-the-broken-piece-is-c2wts-or-active-directory.aspx

LsaLogonUser function
http://msdn.microsoft.com/en-us/windows/desktop/aa378292(v=vs.85).aspx

Use C2WTS to get a classic windows identity from a claims identity
http://blah.winsmarts.com/2013-11-Use_C2WTS_to_get_a_classic_windows_identity_from_a_claims_identity.aspx

Where can I find the full list of Failure Reasons for event 4625?
http://answers.microsoft.com/en-us/windows/forum/windows_vista-security/where-can-i-find-the-full-list-of-failure-reasons/d0269426-2183-4d99-8af0-cc009dee6658

Vous pouvez utiliser le Add-in 2012 SP1 avec SharePoint 2010 et SSRS 2008 R2

Si on regarde la matrice des combinaisons supportées pour le add-in SSRS / SharePoint, on pourrait conclure qu’il faut utiliser la version 2008 R2 lorsque SQL Server 2008 R2 est utilisé.

Supported Combinations of SharePoint and Reporting Services Components
image

http://msdn.microsoft.com/en-us/library/gg492257.aspx

Cependant, j’avais lu qu’il était possible d’utiliser la toute dernière version du add-in dès que SharePoint 2010 était utilisé et que cela pouvait améliorer les performances:

SSRS 2012 Add-In for SharePoint 2010 Performance Testing

http://www.andrewjbillings.com/ssrs-2012-add-in-performance-testing/

Improving performance of reports (for Reporting Services 2008 & 2008 R2) integrated with SharePoint 2010 by using the SQL Server 2012 Add-in

http://blogs.msdn.com/b/mariae/archive/2012/04/23/improving-performance-of-reports-for-reporting-services-2008-amp-2008-r2-integrated-with-sharepoint-2010-by-using-the-sql-server-2012-add-in.aspx

Nous avons réalisé des tests à l’interne, et pour l’utilisation que l’on en fait, les gains sont marginaux (2.5% – 16.5%) mais facile à obtenir.

C’est bon à savoir!

Oui vous pouvez utiliser C2WTS sur un serveur unique (Single Server Install) avec SharePoint 2013

Problématique

Un article de TechNet crée de la confusion au niveau de la configuration de SharePoint 2013 lorsque tout est sur le même serveur.

Le paragraphe suivant est le coupable:

Note: Some of the configuration steps may change, or may not work in certain farm topologies. For instance, a single server install does not support the Windows Identity Foundation C2WTS services so claims to windows token delegation scenarios are not possible with this farm configuration.

Ou en français:

Remarque : certaines étapes de configuration peuvent changer, ou peuvent ne pas fonctionner dans certaines topologies de batteries de serveurs.  Par exemple, une installation de serveur unique ne prend pas en charge les services C2WTS Windows Identity Foundation, c’est pourquoi les scénarios de délégation de jetons Windows ne sont pas possibles avec cette configuration de batterie de serveurs.

Cela laisse sous-entendre que la sécurité de données (SSAS) ne peut être utilisée avec SharePoint 2013, SSRS et SSAS. Il faudrait donc configurer les sources de données pour utiliser un compte en particulier ce qui empêcherait de retourner des données différentes selon l’utilisateur du rapport.

Plusieurs forums discutent de cette affirmation donc celui-ci. Une hypothèse est que Single Server Install a probablement été inversé pour “Standalone” qui signifie que Windows Internal Database est utilisée plutôt qu’une vrai version de SQL Server.

Solution

Peu importe, nous l’avons testé et cela fonctionne parfaitement!

Dans mon article Reporting Services 2012 et la configuration Kerberos: désolé vous devrez utiliser la constrained delegation avec C2WTS je disais que dès que C2WTS est utilisé, la constrained Kerberos delegation doit être utilisée. Je maintiens mon affirmation avec l’exception suivante: pas si tout est sur le même serveur.

Quand tout est sur le même serveur, utilisez vos comptes de services réguliers qui délèguent vers “Any Services”:

Service Compte
SQL Server (engin relationnel) cs-sql
Analysis Services cs-ssas
Reporting Services cs-ssrs ou cs-web
SharePoint (Web Apps) cs-web
C2WTS Local System

La clé pour que cela fonctionne sur un seul serveur est d’utiliser “Local System” comme compte de service pour C2WTS.

Si vous utilisez un compte de domaine pour C2WTS ça ne fonctionnera pas. Vous n’avez même pas besoin de configurer la délégation Kerberos pour le serveur (i.e. servername$).

Cela vous permettra d’avoir le scénario suivant:

  1. Frédérick demande l’affichage d’un rapport SSRS 2012 stocké dans SharePoint 2013.
  2. IIS l’authentifie via Windows Authentication et la plomberie Microsoft .NET convertira le jeton Windows en Claim.
  3. SharePoint et SSRS fonctionnent en claims.
  4. Puis lorsqu’il est temps d’interoger la source de données (SSAS) il faut obtenir une identité Windows car SSAS n’est pas Claim-Aware. C’est là qu’intervient C2WTS et celui-ci génère un jeton pour Frédérick qu’il envoie à SSAS.
  5. SSAS peut donc retourner les données propres à Frédérick (sécurité de données).

image

Le déploiement sur un seul serveur est pratique pour réaliser des tests ou pour des solutions de moindres envergures.

J’espère donc que cet article contribura à réduire la confusion sur ce sujet.

Et vous, utilisez-vous les déploiement sur un seul serveur avec de la sécurité de données?

Références

Claims to Windows Token Service (C2WTS)
http://technet.microsoft.com/en-us/library/hh231678.aspx

Claims to Windows Token Service (c2WTS) Overview
http://msdn.microsoft.com/en-us/library/ee517278.aspx

Does C2WTS work on a single server install??
http://social.technet.microsoft.com/Forums/sharepoint/en-US/85bd9bf4-ce25-4faf-85ea-6e3bbf081f24/does-c2wts-work-on-a-single-server-install?forum=sharepointadminprevious