Son zamanlarda belirli bir kişinin veritabanlarımızdan birinde bir tablo işlevini kullanıp kullanamayacağını kontrol etmek için GİRİŞ OLARAK EXECUTE kullanıyorum. Testler yapabileceğini gösterdi ama defalarca başarısızlık bildirdi.
Kişi veritabanına bağlanmak için giriş 'WEB' kullanır ve o veritabanında 'WEB' girişiyle ilişkili 'WEB' kullanıcısı vardır, bu yüzden aşağıdaki komut dosyalarını denedim:
-- part 1
EXECUTE AS USER = 'WEB'
GO
SELECT
USER_NAME() AS 'user_name'
,SUSER_NAME() AS 'suser_name'
,SUSER_SNAME() AS 'suser_sname'
,SYSTEM_USER AS 'system_user'
GO
REVERT
GO
ve
-- part 2
EXECUTE AS LOGIN = 'WEB'
GO
SELECT
USER_NAME() AS 'user_name'
,SUSER_NAME() AS 'suser_name'
,SUSER_SNAME() AS 'suser_sname'
,SYSTEM_USER AS 'system_user'
GO
REVERT
GO
İlk bölüm aşağıdakilerin sonucu ile iyiydi:
WEB | WEB | WEB | AĞ
Ancak ikinci sonuç biraz kafa karıştırıcıydı:
dbo | WEB | WEB | AĞ
KULLANICI OLARAK EXECUTE ve ikincisini başarısız kılan EXECUTE AS LOGIN arasındaki fark nedir? Ayrıca, elbette, ilki veritabanı düzeyinde, ikincisi de sunucu düzeyinde kimliğe bürünme, farkında olduğum ve buradaki durumu açıklamıyor.