[gelöst]Problem mit "Linked Server"

14. August 2009 10:08

Hi Leute,

ich habe ein Problem mit dem Feature des SQL-Servers.

Vorerst was ich bezwecken wollte:
Es gibt zwei NAV Datenbanken auf je einem anderem NAV Server. Und in den Datenbanken soll eine Tabelle einfach verglichen werden, ob es gleiche oder Unterschiedliche Datensätze gibt. Die View macht also ein LEFT OUTER JOIN auf den Primärschlüssel etc..

Rangehens weise:
Es wurde eine View erstellt (der auf jeden Fall das richtige Ergebnis liefert)sowie die dazugehörige Tabelle in NAV.
Auch die Properties wurden richtig gesetzt, LinkedObject=Yes; LinkedInTransaction=No.

Problem:
Wenn ich die Tabelle/View in NAV öffnen will, kommt folgender Fehler:
...[ODBC Server Driver]Undefinierter Fehler auf SQL Server.Die verbindung wurde möglicherweise vom Server beendet. Status-ID: HY000.

Nach einer Zeit des ausprobieren kam auch wohl mal der Fehler "Ungültiger Attributswert" aber leider ist mir im Eifer der Verzweiflung entfallen was ich wohl verändert hatte bzw. bin ich mir nicht sicher ob ich was verändert habe.

was mich dabei aber wundert ist, dass die View auf dem SQL-Server selbst (bzw. im Management Studio) genau so funktioniert, wie ich mir das vorgestellt habe.

Kenn jemand eine Lösung?
Zuletzt geändert von MatthiasKönig am 14. August 2009 13:28, insgesamt 1-mal geändert.

Re: Problem mit "Linked Server"

14. August 2009 10:11

Hast du dir den Fehler auf Englisch ausgeben lassen und diesen in der MS Knowledge Base (Suchparameter: Nur "Suchen nach", niemals "Produkt") gesucht?

Re: Problem mit "Linked Server"

14. August 2009 10:15

Beim "Linked Server" hatten wir auch schon mal das Problem, dass die Abfrage nur direkt auf dem Server funktionierte. Wurde im Management Studio am lokalen Desktop der View aufgerufen, kam ein Fehler wegen Berechtigungen. Erst als der Benutzer fix auf den SQL-Serveradmin eingestellt wurde beim "linked Server" kam der View richtig. Ev. hilft dir das...

Re: Problem mit "Linked Server"

14. August 2009 10:21

@Natalie
wie gebe ich mir die Fehlermeldung in English aus? Client umstellen bringt hier nichts, da der Server ja dt. ist.

(ich such ma nach simplen Menschenverstand in der KB, die vergess ich immer wieder ^^)



EDIT:
hmpf......nichts....darum vergess ich die KB auch immer ^^'

Re: Problem mit "Linked Server"

14. August 2009 11:01

MatthiasKönig hat geschrieben:@Natalie
wie gebe ich mir die Fehlermeldung in English aus? Client umstellen bringt hier nichts, da der Server ja dt. ist.

Argh, sorry, hatte ich übersehen.
Du könntest alternativ dort auch nur nach [ODBC Server Driver] und HY000 suchen.

EDIT:
hmpf......nichts....darum vergess ich die KB auch immer ^^'
Ich habe darüber schon soooo viel gefunden ... Darum besser doch daran glauben! ;-)
Und was ist mit google, meinetwegen dann mit der original deutschen Fehlermeldung?

Re: Problem mit "Linked Server"

14. August 2009 11:06

Ich google immer als erstes nach Problemen :)

HY000 scheint eine ID zu sein, die viele Dinge bedeuten kann. Meine Suche dannach hat mir viele andere Fehler angezeigt.

[ODBC Server Driver] - werde ich mal durchforsten...

wegen KB:
vll. such ich einfach nicht richtig :D du scheinst da echt viel zu finden (wenn ich auch ma so an andere Beitraege denke)
KB-Master ;)

Re: Problem mit "Linked Server"

14. August 2009 11:16

MatthiasKönig hat geschrieben:wegen KB:
vll. such ich einfach nicht richtig :D du scheinst da echt viel zu finden (wenn ich auch ma so an andere Beitraege denke)
KB-Master ;)

hehe
Der wirklich wichtigste Tipp (gültig für alle MS-Seiten, z.B. auch die Partnersource-Suche ): Verwende niemals die Produktvoreinstellung (wenn als eigenes Optionsfeld vorhanden), denn sehr viele Artikel sind im falschen Produkt abgelegt. Versuche das Produkt statt dessen (wenn überhaupt) über Stichwortsuche einzugrenzen.
Der andere Punkt ist, die Suche nur auf Englisch (also für englische Originalseiten) zu verwenden.

Weitere Tipps zur KB-Suche findest du in meinem nur für Partner einsehbaren Thema :greenarrow: Tipps und How-Tos auf der MS Knowledge Base.

Re: Problem mit "Linked Server"

14. August 2009 12:41

Hi!

Also ich denke das Problem ist folgendes:

Wenn ich richtig verstanden habe, dann verweist dein VIEW auf Tabellen von verschiedenen Servern (lokal & remote), wobei der Remote-Server als Linked Server eingebunden ist?
Im SSMS funzt alles einwandfrei - weil hier die Authentifizierung direkt am SQL Server erfolgt!

Mit NAV wird der View - als Linked Object (non-transactional) - über eine SHADOW NDO SESSION gestartet. Dieser Prozess hat [url]KEINE[/url] Zugriffsrechte auf dem Linked Server!
Selbst wenn der View "LinkedInTransaction=YES" hätte (dann wird keine SHADOW SESSION verwendet, sondern der originale User-Kontext - fehlen diese Zugriffsrechte, da der NAV Prozess mit den Rechten der NAV "Anwendungsrollen" ($ndo$shadow oder $ndo$ar...) zugreift.
Man könnte den Rollen/Benutzern zwar explizit Rechte auf den View des lokalen Servers geben (GRANT ALL ON [View] TO PUBLIC), NICHT aber die benötigten Zugriffsrechte auf dem "Linked Server" - für den sind die AR gänzlich unbekannt ...

Da bei "sysadmin" Prozessen keine weitere Rechteprüfung stattfindet - also die AR quasi "ausgehebelt" sind -, sollte das funktionieren. Sobald die NAV AR greifen (bei normalen NAV Usern) nicht.

Vielleicht kan man das umgehen - kann's leider im Moment nicht ausprobieren - wenn man einen "View im View" baut:

View1: SELECT auf Remote Server
View2: SELECT auf View1 JOIN lokale Tabelle

Keine Ahnung ob das klappt ...

Re: Problem mit "Linked Server"

14. August 2009 12:58

View im View ging auch nicht.... leider der selbe Fehler. (EDIT--> ich teste das nochmal, ich glaube es gibt doch eine moeglichkeit mit diesem trick :))

wenn ich das richtig verstehe, waere mein Vorhaben dann quasi unmöglich?!

wie verwendet man sonst die Linked Server in NAV?

Re: Problem mit "Linked Server"

14. August 2009 13:27

@Stryk
oh man, ;) dein Trick hat funktioniert!
ich denke ich hatte den beim erstenmal versuchen Falsch verstanden.

Nun habe ich es wie folgt:
- Linked Server
- View auf ganze Tabelle - Tabelle (beispiel) Customer
- View ueber "Serveigene".Datenbank Tabelle Customer und darueber den Join etc.

ist zwar erstmal nicht das schnellste aber so geht es!

Danke!!

BTW
versteh ich das nu eigentlich Richtig, das ich die Anwendungsrollen des Linked Server nun uebergehe?

@Natalie und Bender
auch euch Danke, dass ihr euch an der Lösung dieses Problems beteiligt habt :)

Re: [gelöst]Problem mit "Linked Server"

14. August 2009 14:10

Hi!

Also ich habe dazu auch gerade eine kleine Versuchsreihe durchgeführt; ich bin jetzt auch ohne "View in View" zu Ergebnis gekommen!

Hier mein View:
Code:
use "Navision"
go
create view dbo.LocalRemoteCustomer as
  select lc."No_" collate Latin1_General_CI_AS as "No_",
         lc."Address" collate Latin1_General_CI_AS as "Address",
         rc."Name" collate Latin1_General_CI_AS as "Name"
  from "NB02\SQL2008"."Navision"."dbo"."CRONUS 403 (2008)$Customer" lc
  join "NB02"."Navision"."dbo"."CRONUS 403$Customer" rc
  on lc."No_" collate Latin1_General_CI_AS = rc."No_" collate Latin1_General_CI_AS
go
grant all on LocalRemoteCustomer to public
go


Der lokale NAV Server ist dabei NB02\SQL2008, der Linked Server ist NB02. Der View kombiniert also diverse Daten aus den jeweiligen NAV Datenbanken.
Das Linked Object in NAV hat "LinkedInTransaction=FALSE" und "DataPerCompany=FALSE".
Der NAV Benutzer "TEST" auf dem lokalen System (NB02/2008) war ein normaler NAV User (public).

Jetzt kommts:
Auf dem Remote Server (NB02) habe ich einen Benutzer "REMOTE" angelegt - als "sysadmin". Dieses Login wird nun für den Sicherheitskontext des Linked Servers (NB02) benuzt (siehe Screenshot)!
Damit wird also der lokale "public" User "TEST" zum "sysadmin" "REMOTE" User am Linked Server!

Bei mir hat's so geklappt ... über Performance kann ich nix sagen, da ich alles auf der selben Maschine laufen lasse ...
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: [gelöst]Problem mit "Linked Server"

14. August 2009 14:20

mmhhh das ist natluerlich auch eine Lösung :) je nachdem wie man es braucht :D
Danke!