Freitag, 17. Juli 2009

EXECUTE AS LOGIN ändert nicht die Standardeinstellungen der Verbindung

EXECUTE AS LOGIN='LoginName' bietet eine bequeme Möglichkeit, den Sicherheitskontext umzuschalten und so zu testen, wie Abfragen in einem anderen Sicherheitskontext ausgeführt werden. Aber Vorsicht! Die Eigenschaften der aktuellen Verbindung bleiben dabei erhalten. Darüber bin ich gestern gestolpert. Das einfache Umschalten des Sicherheitskontextes über EXECUTE AS LOGIN ist etwas anderes, als wenn der entsprechende Benutzer sich tatsächlich anmeldet. So ändert EXECUTE AS LOGIN zum Beispiel nicht die Standardsprache.
Hier ein Beispiel dazu:

set language russian
print dateadd(month, 1, cast('08/09/2009' as date))


Das Ergebnis sieht so aus:

Параметры языка изменены на "русский".
2009-10-08


Wir legen nun einmal eine Anmeldung mit der Standardsprache Russisch an:

create login Wladimir
with password='xY#*09Tz'
,default_language=russian

In der aktuellen Verbindung kann jetzt der Sicherheitskontext umgeschaltet werden. Zuvor allerdings wechseln wir noch die Sprache der Verbindung:

set language us_english
execute as login='Wladimir'
print dateadd(month, 1, cast('08/09/2009' as date))
revert


Dies ist das Ergebnis:
2009-09-09

Melden wir uns als Wladimir an, dann erhalten wir für

print dateadd(month, 1, cast('08/09/2009' as date)
dieses Ergebnis:
2009-10-08

Also Vorsicht! Das kann natürlich zu einiger Verwirrung führen.

Keine Kommentare:

Kommentar veröffentlichen