KULLANICI OLARAK EXECUTE ve ikincisinin beklenmedik davranmasını sağlayan EXECUTE AS LOGIN arasındaki fark nedir?


10

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.


İkincisi "başarısız" değil, sadece oturum açma atanmış bir sunucu rolü (sysadmin) olduğunu söylüyor. Kullanıcı tarafından talep edilen şemaları kontrol ettiniz mi? Daha önce dbo varsayılan şemasının geliştiricilerin beklediği gibi olmasaydı. Tamamen tabloya
Stuart Moore

Yanıtlar:


7

Bir sysadmingrup üyesi , veritabanında açık bir kullanıcı olsa bile her zaman eşlenir dbo. Yani giriş WEBüye gibi görünüyor sysadmin, bu nedenle ikinci durumda USER_NAME()doğru bir şekilde döner dbo.


Kontrol edildi ve onaylandı. Gerçekten de sysadmin üyesiydi. Bu raporun diğer geliştiricilerden birine ulaştığı ve doğru çözüm yerine giriş sysadmin rolünü atadığı ortaya çıktı. Bunun olduğunu bile düşünmezdim, gerçekten hayal kırıklığına uğradım. Geri döndüğünde ciddi bir konuşma yapacağız. Bugün yeni bir şey öğrendim, teşekkürler.
gemisigo

Ayrıca, uygulamanızın (rapor?) Bir sysadmin üyesinde kimliğe bürünme izni olduğu anlamına gelir. İzin hiyerarşisinde bunun tam olarak nasıl verildiğine bakın. Raporun şimdi bile, isterse başka bir sysadminüyeyi taklit edebilmesi muhtemeldir , bu nedenle raporlama uygulaması fiili bir sistemdir. Yani. imtiyaz saldırı vektörü olası bir yükselişi, bir hacker tarafından veya daha büyük olasılıkla, personeliniz tarafından kullanılabilir.
Remus Rusanu

Açıklama Raporu uygulaması üzerinde kimliğine bürünmek izni varsa WEBve WEBçıkarıldı sysadminsonra kapı kapatılır. Ama hiçbiri daha az kontrol etmeye değer.
Remus Rusanu

Evet, bu şekilde "düzeltilen" başka sorunlar olup olmadığını görmek için hakları etkileyen her şeyi bir kez daha kontrol etmemiz gerekecek. Şu anda çok mutlu değil :( Tekrar teşekkürler Remus.
gemisigo
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.