Re: Datenbankprozedur auf zwei Datenbanken

From: Ralf Dietrich (du.sollst.mir.keinen.spam.schicken_at_t-online.de)
Date: 01/17/05


Date: Mon, 17 Jan 2005 17:24:51 +0100

Hallo Annette,
sorry, dass ich mich mal reindrängle... (siehe Fließtext und unten)
Annette wrote:
> Hallo Elmar,
> hier mein kleines Beispiel:
>
> USER1 ist mit DB1 verbunden und ruft die SP ,SP_TEST' auf
>
> CREATE PROCEDURE DBO.SP_TEST
> /* Parameter */
> @ID int,
> @Wert int OUTPUT
> AS
> /* lokale Variablen */
> DECLARE @Error int
> /* Actions */
> SET @Error = 0
> SET @Wert = 0
> SELECT @Wert = WERT FROM DB2.USER2.TEST_TABELLE WHERE ID = @ID
-- der Aufruf sollte so funktionieren

> SET @Error = @@ERROR
> RETURN @Error
>
> GO
> Die Tabelle TEST_TABELLE in DB2 hat zwei Spalten (ID int, WERT int).
> Besitzer ist USER2.
> Die Besitzverkettung wurde für die beiden Datenbanken aktiviert:
>
> exec sp_dboption 'DB1', 'db chaining', 'ON'
> exec sp_dboption 'DB2', 'db chaining', 'ON'
>
> Problem: wenn USER1 kein Benutzer in DB2 ist, kommt folgende Meldung:
> "Server: Nachr.-Nr. 916, Schweregrad 14, Status 1, Zeile 1
> Der Serverbenutzer 'USER1' ist kein gültiger Benutzer in der
> DB2-Datenbank."
so verhält sich der Server korrekt

> Wenn der Benutzer USER1 auch in der DB2 vorhanden ist, funktioniert
> die ganze Sache
so verhält sich der Server korrekt

> (auch wenn USER1 sonst keine Rechte in DB2 hat).

wenn er dort keine braucht, solltest du ihm auch keine geben ;-)

> Gibt es eine Möglichkeit dies auszuführen ohne dass der Benutzer
> USER1 in DB2 vorhanden ist?

JA, aber ob die dich glücklich macht?
Du kannst in der DB2 einen User Namens "guest" hinzufügen (aktivieren). (und
diesem die R
Dabei solltest du aber bedenken, dass dieser User (wie ALLE anderen gültigen
Logins auf dem Server auch) dann Zugriff auf dieses Objekt haben.
Warum soll der User dort nicht sein??
Du hast 3 Möglichkeiten:
1.
Du nimmst eine Rolle (z.B. zugiff_extern) in DB2 auf und gibst dieser Rolle
nur die Rechte an der Tabelle USER2.TEST_TABELLE, Serverbenutzer die in der
DB1 die Rechte brauchen fügst du in der DB2 hinzu und packst sie in diese
Rolle
2.
Du nimmst den "guest"-Account, den du in der DB2 hinzugefügt hast.
Du erweiterst die Abfrage dadurch, dass du die Tabelle nicht direkt
abfragst, sondern eine Prozedur in der DB2 erstellst.
und gibst nur die Rechte an der Proc > NICHT an der Tabelle (db2..Tabelle
und db2..Proc MÜSSEN den gleichen Besitzer haben!) In der Proc könntest du
dann im Code prüfen, ob SYSTEMUSER() (bzw. SUSER_SNAME()) korrekt gesetzt
ist und nur dann die Proc ausführen, um unauthorisierten Zugriff zu
unterbinden. Dies wird allerdings etwas haarig zu implementieren!
3.
Du spiegelst diese Tabelle via Repl. oder Script in die DB1

> Danke Annette
>
Bitte :-)

-- 
CU Ralf
---------------------------
www.damisys.de
---------------------------
Ich unterstütze PASS Deutschland (http://www.sqlpass.de)
Die definitive deutsche SQL Server Offline Community


Relevant Pages

  • Re: Server DNS and multiple IP addresses
    ... I also set the DNS server to listen on only the single interface. ... I could still log onto the DB2 server, ... Name resolution and connectivity issues on a Routing and Remote Access ...
    (microsoft.public.backoffice.smallbiz2000)
  • [Full-disclosure] Details for BID 18428
    ... DB2 Universal Database is a popular database software package ... DB2 UDB server. ... handshake process with the server, causing the server process to crash. ... The first message used by a client when establishing a connection to the ...
    (Full-Disclosure)
  • Re: JDBC, SQLJ and DB2: Interesting issue w/DB2SystemMonitor
    ... Server time: The sum of all reported DB2 server elapsed times that were ... collected while system monitoring was enabled, ... Network I/O time: The sum of elapsed network I/O times that were ...
    (comp.lang.java.programmer)
  • Re: =?Utf-8?Q?Timeout_bei_Zugriff_=C3=BCber_ODBC?=
    ... > Beim Aufrufen einer Abfrage am Industrie-PC (Daten holen vom Server) tritt ... > funktioniert das ganze jedoch auch beim Zugriff auf eine verknüpfte Tabelle ... Bitte verwendet für Fragen zu Access mit DBMS-Server-Backends ...
    (microsoft.public.de.access.clientserver)
  • RE: SQL 2005: Microsoft OLE DB Providers for DB2 not working with
    ... When I connectet remotely direct on te server and tried it out, ... (With the Microsoft OLE DB Provider for DB2 that was made available November ... open the Connection Manager for your DB2 ...
    (microsoft.public.sqlserver.dts)

Quantcast