[gelöst] Navision/SQL Authentifizierung

9. August 2007 09:00

Hallo Zusammen,

ich habe eine Frage die für eingefleischte Navision Leute wohl recht schnell zu beantworten ist, mir aber bisher nach längerer Recherche nicht beantwortet war:

In meinem Fall gibt es hier einen Navision Server 4 SP3 mit der SQL Option auf SQL 2000 Basis. Nun zu meiner Frage:
Wo genau findet die Authentifizierung statt?
Wir haben hier eine integrierte Windows-Anmeldung.
Meine Frage zielt darauf ab, dass ich per ODBC oder ähnlichem direkt auf die SQL Datenbank zugreifen will. Darf ein Benutzer der ODBC Schnittstelle dann die gleichen Daten wie über einen Zugriff über den Navision Client einsehen oder bekommt der Benutzer dann über ODBC Zugriff auf die komplette Datenbank oder gar nichts?
Im Fall, dass alles so wie im Navision Client ist, sollte ich ja dann auch in der SQL Datenbank irgendwo die Rechte der Benutzer nachschauen können und wenn ja, wo?
Zuletzt geändert von Simonal am 13. August 2007 11:12, insgesamt 3-mal geändert.

9. August 2007 10:04

Hi!

Bei "Windows Authentifizierung" wird die Authentifizierung ausschließlich vom Betriebssystem vorgenommen; desahlb wird diese Art auch als "Trusted Mode" bezeichnet - weil der SQL Server dem OS "vertraut".
Bei "Datenbank Auth." übernimmt SQL Server diese Aufgabe.
In beiden Fällen werden anschließend die entsprechenden Rolle & Rechte vom SQL Server dem Login zugeordnet; damit steht fest, daß der Benutzer nicht nur "rein" darf, sondern auch, was er "tun" darf (oft verwendetes Bild: Hoteltür & Zimmertür).

Im Falle von NAV läuft's dann noch - vereinfacht - so:
Da das "Rechtesystem" in NAV ein anderes ist als das des SQL Servers ist, muss eine Art "Übesetzung" stattfinden; die geschieht durch sog. "Application Roles" ($ndo$ar$...) und bestimmte Prozeduren (xp_ndo_enumusersids etc.).

D.h. also, wenn man von "außen" auf die DB zugreifft - via ODBC -, kann ist es erstmal egal wer die Authentifizierung vornimmt, die Zugriffsrechte hängen von den zugeordneten Rollen ab. Da "externen" Anwendungen das NAV Rechte-System ziemlich egal sein kann, ist auch keine "Übersetzung" notwendig.

9. August 2007 10:15

Hallo Stryk,
Danke für die schnelle Antwort.

Mal schauen, ob ich das richtig verstanden habe:
Die Nav-Rechte werden auf SQL Rechte abgebildet, d.h. die Rechte sind sowohl in Nav als auch in SQL hinterlegt.
Im Fall der Anmeldung über den Nav-Client werden die Nav-Rechte für den Zugriff verwendet und im Falle eine SQL-Anmeldung werden die SQL Rechte verwendet. richtig?

Das würde heissen, dass ein Benutzer aus dem ActiveDirectory egal über welche Zugriffsweg er auf die Daten in SQL zugreift, immer die gleichen Rechte zugewiesen bekommt. richtig?

9. August 2007 11:31

Im Fall der Anmeldung über den Nav-Client werden die Nav-Rechte für den Zugriff verwendet und im Falle eine SQL-Anmeldung werden die SQL Rechte verwendet. richtig?

Hmmm ... stimmt so nicht ganz. Man muss aufpassen, über welche Zugriffsrechte man spricht ...

Meldet man sich über den NAV Client an, so findet zunächst eine Authentifizierung statt; also die Überprüfung von Benutzer ID und Passwort. Wie gesagt, bei "Windows Auth." durch das OS, bei "Datenbank Auth." durch SQL Server.
Für jedes Login, das in NAV angelegt wurde - WIN und DB - wird eine "Application Role" ($ndo$ar$...) erstellt.
Jeder Benutzer ist SQL Server seitig zudem der Serverrolle und Datenbankrolle "public" zugeordnet; damit erhält der Benutzer grundlegenden Zugriff auf Server und Datenbank.
Nun ordnet C/SIDE dem Benutzer die jeweilige "Application Role" zu. Diese Rolle beinhaltet nun die expliziten Zugriffsrechte pro Tabelle auf Basis der in NAV konfigurierten Zugriffsrechte (die besagte Übersetzung!).
Deshalb ist ja stets diese Synchronisierung notwendig; hier werden die NAV Zugriffsrechte in die jeweiligen AR übertragen.
Nun kann SQL Server sicherstellen, daß der Benutzer nur auf zulässige Tabellen zugreift.
In NAV kommt nun die Zugriffsrechte auf Forms, Reports, etc. hinzu. SQL Server kennt diese Objekte gar nicht; die Steuerung erfolgt ausschließlich via C/SIDE.

Wenn man nun von "außen" auf den SQL Server zugreift, so ist das Verfahren analog:
1. Authentifizierung
2. Zugriffsrechte via Rollen
Hier hängt es also auch davon ab, welche Server- und DB-Rollen dem Benutzer zugeordnet sind. Es ist prinzipiell auch möglich, eigene Rollen - auch Anwendungsrollen - zu "bauen" und einem Login zuzuweisen.

D.h. wenn ein in NAV angelegtes Login über einen anderen Kanal - also nicht via C/SIDE - auf den Server bzw. die Datenbank zugreift, so treten nur die Server- und DB-Rollen in Kraft; die "Anwendungsrolle" spielt keine Rolle. Somit hat der Benutzer andere Rechte als würde er über C/SIDE kommen.

Der Vollständigkeit halber sei noch gesagt, daß bei Benutzern der Server Rolle "sysadmin" keine weiteren Rechte-Zuordnungen stattfinden: Einmal Authentifiziert darf er alles.

10. August 2007 08:54

Danke für die Infos!

10. August 2007 12:15

Ich setzt hier einfach nochmal an:

Die Anwendungsrollen werden in der SQL Datenbank gespeichert.

Gibt es dann dort eine Anwendungsrolle für jeden Benutzer oder eine Anwendungsrolle je Benutzergruppe aus Navision?
Wo findet ich zu einem Benutzer die jeweilige Anwendungsrolle?
Und woher bekomme ich das Passwort für die Anwendungsrolle (wahrscheinlich sind diese Passwörter irgendwo verschlüsselt hinterlegt...)?

Damit wäre das Thema dann komplett beleuchtet, denke ich. :-)

PS: Woher bekommst Du eigentlich deine Informationen her? Die Navision-eigenen Dokumentationen sind in solchen Dingen ja nicht sehr aussagekräftig...

10. August 2007 13:31

Die Anwendungsrollen werden je Datenbank-Login oder Windows-Login angelegt. Wird eine Active Directory Gruppe als Windows Login in NAV angelegt, so hängt es vom "Security Model" ab, ob eine Rolle für die Gruppe (Standard) oder für alle Benutzer innerhalb der Gruppe (Enhanced) angelegt werden soll. Deshalb dauert bei "Enhanced" die Synchronisation länger.

Die Zuordnung der AR zu den Benutzern sowie die benötigten Passwörten sind in C/SIDE verankert - NAV lässt sich hier "nicht in die Karten schauen".

PS: Woher bekommst Du eigentlich deine Informationen her? Die Navision-eigenen Dokumentationen sind in solchen Dingen ja nicht sehr aussagekräftig...

Tja, langjährige Forschung & Entwicklung, sowie ein paar gute Kontakte 8-)

10. August 2007 14:16

Das würde aber wiederum heissen, dass ich der Zugriff auf die SQL Daten bzw. über SQL Reporting Services nicht ohne weiteres funktioniert, da ich die Anwendungsrollen nicht für die Verbindung aktivieren kann, da ich gar nicht weiss, welche Anwendungsrollen zu welchem Benutzer gehören, bzw. welches Passwort für die Anwendungsrolle verwendet wird.

Also besteht dann nur die Möglichkeit über den NAS auf Navision-Daten zuzugreifen?!?!? wäre ja wirklich sehr schade....

10. August 2007 16:19

Ich würde anders schlussfolgern: Wie gesagt, die Rechte bzw. Rollen sind anders wenn man nicht via C/SIDE zugreift.
"Anders" heißt in diesem Fall, daß die "Anwendungsrollen" nicht genutzt werden können. Die Frage die sich stellt ist doch: braucht man diese AR für den externen Zugriff? Oder genügt hier z.B. die zusätzliche DB-Rolle "data_reader" (ggf "data_writer")? Damit kann ein Benutzer dann ja auch auf die Daten zugreifen, nur eben nicht so differenziert, wie in der AR festgelegt!
Wenn man die AR von außen unbedingt nutzen will, dann könnte man auch prinzipiell so vorgehen:

1. Das Login wird in NAV angelegt & konfiguriert
2. Nun synchronisiert man nur diesen einzelnen Benutzer und überwacht den Vorgang im SQL Profiler; damit findet man heraus, welche AR zugeordnet ist!
3. Am besten ein CREATE Skript für die AR Rolle erstellen, dann kann man AR- und Schema-Name einfach 'rauskopieren; nehmen wir an AR und Schema heißen
Code:
$ndo$ar$941876174BBAB47F67112EB1734757B1

4. Diese Schema wird nun umbenannt; danach wird ein neues - uns bekanntes - Passwort vergeben; sowie ein anderes Schema zugeordnet:
Code:
ALTER APPLICATION ROLE "$ndo$ar$941876174BBAB47F67112EB1734757B1"
WITH NAME = myAR
GO
ALTER APPLICATION ROLE myAR
WITH PASSWORD = 'myPassword', DEFAULT_SCHEMA = dbo
GO

5. Das "alte" Schema muss nun gelöscht werden, damit sowohl originale Rolle und Schema "verschwinden":
Code:
DROP SCHEMA [$ndo$ar$941876174BBAB47F67112EB1734757B1]
GO

6. Nun in Navision das Benutzerlogin aus 1. erneut synchronisieren; damit wird die originale AR (inkl. Schema) wieder hergestellt.

Voila! Die originale NAV AR wurde kopiert und kann nun - da wir das Passwort kennen - von anderen Applikationen genutzt werden!

13. August 2007 11:12

Nun bin ich erleuchtet. Danke für die vielen Informationen! :-)

12. Oktober 2007 12:25

Kann mich hier vielleicht auch jemand erleuchten? Ich habe eine Navision Datenbank auf einen SQL Server aufgespielt. So weit so gut. Dann kommt die Meldung (genauen Wortlaut weiß ich jetzt nicht):

Gehen Sie auf Extras -> Sicherheit -> Alle synchronisieren um die Logindaten zu synchronisieren

(so in der Art) Wenn ich das mache kommt aber folgende Fehlermeldung
Die Sicherheitssysteme von Microsoft Business Solutions-Navision und dem SQL Server konnten nicht erfolgreich synchronisiert werden.

Das SQL Server Login BACKUP ist auf dem Server BENNERSCHEID nicht vorhanden.


Ich bitte um eine Erleuchtung :wink: