Re: Datenbankprozedur auf zwei Datenbanken
From: Ralf Dietrich (du.sollst.mir.keinen.spam.schicken_at_t-online.de)
Date: 01/17/05
- Next message: Phenich Lebao: "Bilder und video in speichern"
- Previous message: Sascha Lorenz: "Re: Diagramm-Inhalte werden nicht angezeigt ?"
- In reply to: Annette: "Re: Datenbankprozedur auf zwei Datenbanken"
- Next in thread: Annette: "Re: Datenbankprozedur auf zwei Datenbanken"
- Reply: Annette: "Re: Datenbankprozedur auf zwei Datenbanken"
- Messages sorted by: [ date ] [ thread ]
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
- Next message: Phenich Lebao: "Bilder und video in speichern"
- Previous message: Sascha Lorenz: "Re: Diagramm-Inhalte werden nicht angezeigt ?"
- In reply to: Annette: "Re: Datenbankprozedur auf zwei Datenbanken"
- Next in thread: Annette: "Re: Datenbankprozedur auf zwei Datenbanken"
- Reply: Annette: "Re: Datenbankprozedur auf zwei Datenbanken"
- Messages sorted by: [ date ] [ thread ]
Relevant Pages
|