SharePoint und externe Datenquellen

Wer SharePoint richtig ausreizen und es als zentrale Plattform nutzen will, der möchte natürlich so viel wie möglich über SharePoint abbilden. In jedem größeren Unternehmen findet man verschiedene Systeme, die jeweils für sich ihre spezielle Aufgabe haben. Manchmal kann es dadurch auch schon mal dazu führen, dass gleiche Daten an mehreren Stellen bzw. in mehreren Systemen gepflegt werden müssen. Das ist natürlich dann auch etwas anfällig, denn wer überwacht die Synchronisation? SharePoint bietet dafür die Business Connectivity Services, welche die Kopplung solcher Systeme mit SharePoint erlauben, wobei die Änderungen auch gleich synchronisiert werden.

 

Business Connectivity Service ()

Der BCS ist ein Dienst, der SharePoint mit verschiedenen Features versorgt, welche die Anbindung zu externen Datenquellen ermöglichen. In mancher Literatur findet man auch die Bezeichnung Business Data Catalog und auch Business Data Connector (), wobei es sich da aber um die ältere, in SharePoint 2007 vorhandene Version handelt. Der alte ermöglichte bereits eine Anbindung zu externen Systemen. Damit war es möglich auf Daten andere Systeme zuzugreifen, zumindest lesend. Mit dem neuen SharePoint 2010 gibt es nun auch einen neuen Service dieser Art, der es nun etwas leichter macht, auf die Daten zuzugreifen und dies nicht nur lesend. Diese neue Variante steht nun auch in allen SharePoint 2010 Versionen zur Verfügung.

 

BCS Architektur

Der BCS enthält folgende Kernkomponenten, deren Verständnis die Handhabung etwas erleichtern:

Datenbanken, Webanwendungen und Branchenanwendungen, wie bspw. SAP, stellen externe Systeme dar. Jede einzelne Datenbankverbindung zu einem anderen Datenbanksystem stellt dabei eine externe Systeminstanz dar, für die die Authentifizierungs- und Verbindungsdaten festgelegt werden müssen. Steht die Verbindung, nutzt man externe Listen, welche den Listen aus SharePoint ähnlich sind, jedoch die Daten der externen Liste zeigen und bei Änderungen diese Daten auch mit der externen Systeminstanz synchronisieren. Für die Aufbereitung der Datenstruktur werden externe Inhaltstypen genutzt. Hier werden die Listenspalten anhand der externen Datenstruktur (bspw. einer Datenbanktabelle) festgelegt, also von der externen Systeminstanz.

 

Verbindung zu externen Systemen unter Verwendung von konfigurieren

Was habe ich hier vor?

Anbindung einer externen SQL Server Datenbank unter Verwendung der Identität des Benutzers. Mein aktueller SharePoint-Benutzer wird dabei direkt zur Datenbank durchgeleitet und authentifiziert (Pass Through). Dabei ist vorher sicher zu stellen, dass der entsprechende Nutzer in der Datenbank auch Berechtigungen besitzt.

Was ist zu tun?

  • Business Data Connectivity Dienstanwendung erstellen
  • Business Data Connectivity-Dienst starten
  • externen hinzufügen
  • externe Liste hinzufügen und Berechtigungen vergeben
  • BCS Webparts nutzen

 

Business Data Connectivity Dienstanwendung erstellen

  1. ZentraladministrationAnwendungsverwaltung öffnen
  2. auf Dienstanwendung verwalten klicken
  3. aus dem Menüband wählen Sie den Button Neu und dort Business Data Connectivity-Dienst
  4. vergeben Sie einen Dienstnamen, einen Datenbanknamen und geben Sie den Namen des zuständigen Datenbankservers an
  5. Etwas weiter unten wählen Sie den Anwendungspool bzw. erstellen einen neuen.
    Hier habe ich einen neuen Anwendungspool namens SPAppPoolBDC und dazu auch ein neues Konto namens DEMO\SP_app_bdc angelegt.
  6. Bestätigen Sie nun per Button OK und warten Sie, bis die Anwendung erstellt wurde.
  7. Fertig! – die Dienstanwendung haben Sie damit erstellt…

 

Business Data Connectivity-Dienst starten

  1. ZentraladministrationSystemeinstellungen – Dienste auf dem Server verwalten öffnen
  2. oben aus dem Dropdownfeld Server wählen Sie genau den Server aus, auf dem der Dienst BDC laufen soll – quasi den Hostserver
  3. starten Sie dann den Business Data Connectivity-Dienst
  4. Fertig! – Dienst läuft…

 

Hinzufügen eines externen Inhaltstyps für die Verbindungsherstellung zum externen System

  1. SharePoint Designer öffnen.
    Zum Beispiel so: Auf der SharePoint-Seite wählen Sie WebsiteaktionenIn SharePoint Designer bearbeiten
  2. Im Navigationsbereich des Designers (links) wählen Sie den Punkt Externe Inhaltstypen
  3. Für die Erstellung des ext. Inhaltstyps wählen Sie den Menüpunkt Externer Inhaltstyp aus dem Menübandbereich aus.
  4. Geben Sie nun einen Namen und einen Anzeigenamen an. Den Namen verwendet das System um den Inhaltstyp anzusprechen. Der Anzeigename hingegen wird den Nutzern angezeigt.
  5. Um nun die Verbindung zu einer externen Datenquelle zu erstellen, klicken Sie bei dem Punkt Externes System auf den Link.
  6. Nun erstellen Sie über den Button Verbindung hinzufügen eine neue Anbindung zu einer externen Datenquelle.
  7. Wählen Sie den Datenquellentyp entsprechend Ihrer Datenquelle. Ich nutze hier einen MS SQL-Server und wähle dazu SQL Serveraus der Dropdown-Liste.
  8. Nun müssen Sie noch die Verbindungseigenschaften angeben. Für die Authentifizierung haben Sie die Wahl zwischen Identität vom SharePoint-Nutzer, Windows-Nutzer oder der Nutzung von Secure Store Services.
    Für meinen Test belasse ich die Einstellung auf Identität des Benutzers. Damit wird der aktuelle SharePoint-User direkt zur Datenbank durchgeleitet und authentifiziert (Pass Through). Denken Sie daran: In der Datenbank muss der User auch Berechtigung haben.
  9. Die angegebene Datenbank sollte sich nun im Datenquellen-Explorer öffnen. Hier können Sie nun wählen, was Sie in SharePoint anzeigen lassen möchten. Nutzen können Sie Tabellen, Ansichten oder auch Routinen (Prozeduren).
    Per Rechtsklick auf das gewünschte Objekt (bspw. Tabelle) wählen Sie nun den gewünschten Vorgang aus. Wählen Sie für dieses Beispiel Alle Vorgänge erstellen und klicken Sie dann auf Weiter.
  10. Konfigurieren Sie die Datenquellenelemente und klicken Sie dann auf den Button Weiter.
  11. Es können zusätzlich noch Filterparameter angelegt werden.
  12. Klicken Sie dann noch auf Beenden und es erscheinen Ihre angelegten Vorgänge vom externen Inhaltstyp im SharePoint Designer.

So weit, so gut! Wir erinnern uns an die BCS Architektur (siehe oben) und haben also nun eine externe Systeminstanz, einen externen Inhaltstyp und brauchen nun noch eine externe Liste für die Anzeige der Daten.

 

externe Liste hinzufügen und Berechtigungen vergeben

  1. Wir befinden uns noch im SharePoint Designer und dort im Navigationspunkt Externe Inhaltstypen. Den eben bearbeiteten Inhaltstyp haben wir noch geöffnet, d.h. wir sehen oben im Menüband auch den Punkt Listen und Formulare erstellen. Darauf klicken Sie nun bitte.
  2. Geben Sie der neuen, externen Liste einen Namen, evtl. eine Beschreibung.
    Sie haben außerdem die Wahl der Anzeigeform. Entweder Sie lassen sich ein InfoPath-Formular erstellen oder es wird nur ein ASP.NET-Formular für die Datenanzeige erstellt.
    Probieren Sie es einfach mal aus.… und schließen Sie die Aktion per Klick auf OKab. Was uns nun noch fehlt, ist die Berechtigungszuweisung für die externe Liste. Vielleicht soll ja nicht jeder zugreifen dürfen oder einigen sollen bestimmte Operationen verweigert werden.
  3. Für die Berechtigungsvergabe wechseln wir nun wieder in die Zentraladministration vom SharePoint Server und wählen da den Punkt Anwendungsverwaltung.
  4. Wählen Sie nun Dienstanwendung verwalten und klicken dann auf die BDC-Dienstanwendung.
  5. Hier sehen Sie nun den eben erstellten externen Inhaltstyp. Achten Sie darauf, dass Sie in der Menüleiste im Dropdown-Feld auch Externe Inhaltstypenausgewählt haben.
  6. Um die Berechtigung festzulegen, wählen Sie den Inhaltstyp über die Checkbox aus. Setzen Sie also den Haken und klicken Sie dann auf den Button Objektberechtigungen festlegen.
  7. Hier vergeben Sie nun die Berechtigungen über einzelne Nutzer oder auch Gruppen. Dazu wählen Sie ein Benutzerkonto/Gruppe aus, klicken auf Hinzufügen und wählen dann die entsprechende Berechtigung.
  8. Wiederholen Sie den Vorgang für weitere Benutzerkonten/Gruppen und weisen Sie jeweils die entsprechende Berechtigung zu – Fertig!
  9. Die eben erstellte externe Liste können Sie nun im SharePoint anzeigen lassen. Dazu wechseln Sie auf Ihre SharePoint Startseite. Dort finden Sie, unter dem Navigationspunkt Listen, nun die erstellte Personalliste.
  10. Da ich meine Testdatenbank etwas spärlich ausgefüllt habe, ist nicht viel zu sehen. Aber man sieht, dass es funktioniert 😉

 

BCS Webparts nutzen

Wenn Sie als Nutzer über die Berechtigung verfügen, Website bearbeiten zu dürfen, dann können Sie auch die BCS Webparts einfügen und sich dort den externen Inhaltstyp anzeigen lassen. Wie Sie das anstellen möchte ich noch kurz darstellen:

  1. SharePoint Seite im Internet Explorer öffnen
  2. WebsiteaktionenSeite bearbeiten anklicken
  3. Cursor dort positionieren, wo der Webpart eingefügt werden soll
  4. im Menüband unter dem Reiter Einfügen auf Webpart klicken
  5. unter Kategorie Geschäftsdaten wählen Sie bspw. Geschäftsdatenliste und klicken dann auf Hinzufügen
  6. Öffnen Sie den Toolbereich vom Webpart – also Webpart bearbeiten
  7. im Feld Typ wählen Sie den externen Inhaltstyp aus und bestätigen dann die Aktion
  8. wählen Sie nun noch Speichern und schließen im Menübandreiter Seite
  9. Fertig!

 

Fehler und Lösungen

SSPI-Kontext-Fehler

Folgende Fehlermeldung erscheint:

Mit dem LobSystem (externes System) kann keine Verbindung hergestellt werden. Der SSPI-Kontext kann nicht generiert werden. 

Unsere Ausgangssituation ist folgende:

  • Kerberos wird genutzt
  • SPNs sind  für das Application Pool Konto ist eingerichtet

Wenn Sie Kerberos nutzen und die SPNs (Service Principal Name oder auch Dienstprinzipalname) eingerichtet haben (Hilfe dazu gibt’s hier), dann prüfen Sie diese erneut. Schauen Sie sich bspw. per Kommandozeilentool Klist.exe an, ob Sie ein passendes Kerberosticket haben.

Es sollten für jede Webanwendung zwei SPNs, in der Form HTTP/site.domain.de und HTTP/site (FQDN und NetBIOS-Namen) sein.

Ein Konto kann also mehrere SPNs besitzen, jedoch darf ein nur für ein Konto registriert sein!

Die SPNs können Sie entweder über den ADSIEditor oder per Kommandozeilenbefehl setspn abrufen und festlegen.

Eine ausführliche Variante für diesen Fehler gibt es auch hier: http://support.microsoft.com/kb/811889/de

 

Kerberos-Fehler : NT-Autorität\Anonymous-Anmeldung

Folgende Fehlermeldung erscheint:

Ungültige Anmeldeinformationen. Wenden Sie sich an den Systemadministrator.
Korrelations-ID: xyz….
Fehler bei der Anmeldung für den Benutzer NT-AUTORITÄT\ANONYMOUS-ANMELDUNG.

bzw. bei der englischen Version

Login failed for user NT AUTHORITY\ANONYMOUS LOGON

Unsere Ausgangssituation ist folgende:

  • Kerberos wird genutzt
  • SPNs sind für das Application Pool Konto eingerichtet
  • für die Verbindung zur externen Datenquelle nutzen wir Verbindung mit der Identität des Benutzers herstellen, also Pass Through

Obwohl wir für unsere externe Datenquelle bzw. für unsere SQL Server-Verbindung den Punkt Verbindung mit der Identität des Benutzers herstellen (also Pass Through) ausgewählt haben, versucht sich SharePoint anonym am SQL Server anzumelden. Die anonyme Anmeldung sollte natürlich nicht funktionieren. Auf jeden Fall erkennt man, dass SharePoint die Identität des Benutzers nicht weitergeben kann. Aber warum? Fakt ist, dass die ganze Sache nur mit Kerberos funktioniert. NTLM ist dazu nicht in der Lage. Das ist also das bekannte double-hop-problem! Dabei erfolgt ein Sprung vom Client-PC zum Web Frontend (erster Sprung) und ein weiterer Sprung vom Web Frontend zum externen System bzw. SQL Server (zweiter Sprung). Wer NTLM nutzt und dem double-hop-problem entgegenwirken will, der muss den Secure Store von SharePoint nutzen.

Fazit: Die Fehlermeldung sagt uns, dass Kerberos bzw. die Identitätsweitergabe (Delegierung) nicht richtig funktioniert!

Wie man Kerberos für SharePoint einrichtet und welche Möglichkeiten es gibt das Kerberosticket abzufragen, habe ich hier beschrieben: http://www.dacomsys.de/2012/05/sharepoint-kerberos-ntlm-und-spn/

Schauen Sie sich also per Kommandozeilentool Klist.exe an, ob Sie ein passendes Kerberosticket haben und überprüfen Sie den SPN vom Application Pool Konto der entsprechenden Webanwendung.

Für jede Webanwendung sollte es für das zugehörige AppPool-Konto zwei SPN-Einträge geben.  Je einen in der Form HTTP/site.domain.de und einen in der Form HTTP/site (FQDN und NetBIOS-Namen).

Ein Konto kann also mehrere SPNs besitzen, jedoch darf ein SPN nur für ein Konto registriert sein!

Die SPNs können Sie entweder über den ADSIEditor oder per Kommandozeilenbefehl setspn abrufen und festlegen.


Ein Gedanke zu „SharePoint und externe Datenquellen

Kommentar verfassen

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.