Objekte ohne Schema Name in Prozedur

10/11/2008 - 14:31 von Lutz Elßner | Report spam
Ich habe Objekte (Sichten, Synonyme), die den gleichen Name haben und sich nur im Schema unterscheiden.

Eine dbo.Prozedur1 wird von verschiedenen Benutzern mit jeweils eigenem Standard Schema aufgerufen.

In der Prozedur soll nun den Objekten das Standard Schema des aufrufenden Benutzers zugeordnet werden.

Im folgenden Hilfe Text, steht, dass das standardmàßig nicht der Fall ist. Geht es irgendwie trotzdem?


Den Objektnamen innerhalb einer gespeicherten Prozedur, die mit Anweisungen verwendet werden (z. B. SELECT oder INSERT) und die
nicht im Schema qualifiziert sind, wird standardmàßig das Schema der gespeicherten Prozedur zugeordnet. Wenn ein Benutzer, der eine
gespeicherte Prozedur erstellt, die Namen der Tabellen oder Sichten nicht qualifiziert, auf die in einer der SELECT-, INSERT-,
UPDATE- oder DELETE-Anweisungen innerhalb der gespeicherten Prozedur verwiesen wird, wird der Zugriff auf diese Tabellen, der über
die gespeicherte Prozedur erfolgt, standardmàßig auf den Benutzer beschrànkt, der die Prozedur erstellt hat.
 

Lesen sie die antworten

#1 Elmar Boye
11/11/2008 - 11:19 | Warnen spam
Hallo Lutz,
"Lutz Elßner" <www.vb-hosting.de> schrieb ...
Ich habe Objekte (Sichten, Synonyme), die den gleichen Name haben und sich nur im Schema unterscheiden.
Eine dbo.Prozedur1 wird von verschiedenen Benutzern mit jeweils eigenem Standard Schema aufgerufen.
In der Prozedur soll nun den Objekten das Standard Schema des aufrufenden Benutzers zugeordnet werden.

Im folgenden Hilfe Text, steht, dass das standardmàßig nicht der Fall ist. Geht es irgendwie trotzdem?



Was Du machen kannst ist die Abfrage via EXEC bzw. sp_executesql ausführen, also z. B.
EXEC sp_executesql N'SELECT * FROM Tabelle', N''

Dadurch wird der Ausdruck erst zur Laufzeit ausgewertet und das Schema des Aufrufenden
hat Vorrang. Allerdings wird dabei auch der Sicherheitskontext geàndert.

Zum wieso es nicht geht:
Die Prozedur wird kompiliert. Würde das Schema erst beim Aufruf ausgewertet, müßte die
Prozedur jedesmal neu kompiliert werden bzw. je Schema vorgehalten werden - das würde
den Sinn einer Prozedur (mehrfache Nutzung des Ausführungsplanes) widersprechen.
Zudem bestànde ein Sicherheitsrisiko, da man andere Tabellen "unterschieben" könnte.

Wenn Du Dir einen Vorteil von verschiedenen Schematas versprichst, solltest Du die
Prozedur eher für jedes Schema vorhalten - und die Namen mit Schema qualifizieren.

Gruß Elmar

Ähnliche fragen