Fehler beim Ausführen eines MSSQL-Triggers mit EXECUTE AS User
Hi,
ich bräuchte mal wieder euren Support. Ich habe den Fall, dass ich einen SQL-Trigger gebaut habe der beim Update 2 Werte in eine andere Tabelle schreiben soll. Die zweite Tabelle liegt in einer anderen Datenbank mit unterschiedlichen Benutzern. Ich habe nun das Problem, dass der Trigger einen Fehler generiert wenn er von einem Benutzer ausgelöst wird, der keine Rechte in der Ziel-Tabelle hat (was ja auch irgendwo Sinn macht).
Ich würde ungern allen Benutzern aus Datenbank 1 Schreibrechte auf Datenbank 2 geben, deshalb habe ich etwas gesucht und bin dabei auf "Execute as" gestoßen. Das klingt an sich genau nach dem was ich brauche. Wenn ich das "Execute as" in den Trigger einbaue und den Trigger dann auslöse, bekomme ich die gleiche Fehlermeldung "Der Serverprinzipal <XXX> kann unter dem aktuellen Sicherheitskontext nicht auf die <YYY>-Datenbank zugreifen", nur dass <XXX> jetzt der mit "Execute as" ausgewählte Benutzer anstelle des aufrufenden Benutzers ist.
Der Benutzer <XXX> hat Berechtigungen sowohl in der Quell-Datenbank als auch in der Ziel-Datenbank.
Ich habe schon probiert das Impersonate Recht zu setzen was nicht geholfen hat. Ich habe auch gelesen, dass das Prinzipal in Sys. database_principals oder Sys. server_principals angelegt sein muss, <XXX> ist in beiden vorhanden.
Sieht jemand den Fehler in meinem Trigger?
Grüße,
Mesaou
ich bräuchte mal wieder euren Support. Ich habe den Fall, dass ich einen SQL-Trigger gebaut habe der beim Update 2 Werte in eine andere Tabelle schreiben soll. Die zweite Tabelle liegt in einer anderen Datenbank mit unterschiedlichen Benutzern. Ich habe nun das Problem, dass der Trigger einen Fehler generiert wenn er von einem Benutzer ausgelöst wird, der keine Rechte in der Ziel-Tabelle hat (was ja auch irgendwo Sinn macht).
Ich würde ungern allen Benutzern aus Datenbank 1 Schreibrechte auf Datenbank 2 geben, deshalb habe ich etwas gesucht und bin dabei auf "Execute as" gestoßen. Das klingt an sich genau nach dem was ich brauche. Wenn ich das "Execute as" in den Trigger einbaue und den Trigger dann auslöse, bekomme ich die gleiche Fehlermeldung "Der Serverprinzipal <XXX> kann unter dem aktuellen Sicherheitskontext nicht auf die <YYY>-Datenbank zugreifen", nur dass <XXX> jetzt der mit "Execute as" ausgewählte Benutzer anstelle des aufrufenden Benutzers ist.
ALTER TRIGGER [dbo].[Update<Tabelle1>]
ON [dbo].[<Tabelle1>]
with execute as <XXX>
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
iF EXISTS(Select k.Adresse from <Tabelle2> k, inserted i where k.Adresse = i.Adresse and k.Mandant = i.Mandant)
Insert <YYY>.dbo.<Ziel-Tabelle> (Feld0Wert,Feld1Wert) Select i.Adresse, i.Mandant from inserted i;
END
Der Benutzer <XXX> hat Berechtigungen sowohl in der Quell-Datenbank als auch in der Ziel-Datenbank.
Ich habe schon probiert das Impersonate Recht zu setzen was nicht geholfen hat. Ich habe auch gelesen, dass das Prinzipal in Sys. database_principals oder Sys. server_principals angelegt sein muss, <XXX> ist in beiden vorhanden.
Sieht jemand den Fehler in meinem Trigger?
Grüße,
Mesaou
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 332095
Url: https://administrator.de/contentid/332095
Ausgedruckt am: 24.11.2024 um 07:11 Uhr
1 Kommentar