SQL Server EXECUTE AS sorunu


13

Saklı yordam kullanmak için çalışırken bir şey eksik EXECUTE AS. Saklı yordam, verileri okur source_db, toplar ve sonucu saklar target_db.

Sp'nin kendisi target_db. Ben özel bir giriş yaparlar ve hem de kullanıcılara harita source_dbve target_dbSP'nin sahibi için (yani kullanıcı app_agentiçinde source_dbve target_dbgiriş için app_agent).

Olarak giriş yapar app_agentve yürütürsem

EXEC target_db.app_agent_schema.import_data

her şey iyi çalışıyor. Ama değiştirirsem

ALTER PROCEDURE app_agent_schema.import_data WITH EXECUTE AS OWNER` (or `AS SELF`) 

ve çalıştırmayı deneyin,

"App_agent" sunucusu asıl adı, geçerli güvenlik bağlamı altında "source_db" veritabanına erişemiyor.

SQL Server 2008 kullanıyorum.

Birisi benim hatamı gösterebilir mi?

Teşekkürler

Güncelleme Biraz araştırma yaptıktan sonra ALTER DATABASE target_db SET TRUSTWORTHY ON, sorunu çözdüğümü fark ettim , ama bu benim için doğru çözüm gibi görünmüyor ...


1
Bence cevap veritabanı düzeyinde çapraz veritabanı sahipliği zinciri seçeneğini kullanıyor. Senaryodaki hatayı yeniden üretebildim, ancak tam olarak yeniden üretip üretmediğimi bilmek için yeterli ayrıntı yok ... CDOC seçeneği benim için işe yaramadı, ancak deneyin ve bunun işe yarayıp yaramadığını görün.
Jon Seigel

Yanıtlar:


24

Bu, EXECUTE AS kullanılarak Veritabanı Kimliğe Bürünme Özelliğinin Genişletilmesi bölümünde açıklanmaktadır . EXECUTE AS bağlamı yalnızca geçerli veritabanında güvenilir ve diğer veritabanlarına dökülmesine izin vermek bir ayrıcalık saldırısı vektörünün yükselmesidir.

Her ikisi de yukarıda bağlantılı makalede açıklanan iki çözüm vardır:

  • Kolay bir veritabanı güvenilir işaretlemek için geçerli: ALTER DATABASE [source_db] SET TRUSTWORTHY ON;. Kolay olsa da, aynı zamanda yapar gibi tehlikelidir dboarasında source_dbbir de-facto sysadmin.

  • güvenli olanı kod imzalamayı kullanmaktır, bkz . Örnek için başka bir veritabanındaki yordamı arama . Bu daha karmaşık, ancak% 100 buletproff güvenliği.


0

Hangi kullanıcı ALTER PROCEDURE komutunu çalıştırır? Bu kullanıcıya Sahip (kendi) erişim düzeyini ayarlamış olabilirsiniz, istediğiniz kullanıcıya değil.


Prosedürü ( app_agent) oluşturan aynı kullanıcı . Eğer app_agentolmadan prosedürü oluşturduysam execute as owner/self, giriş yap app_agent, SP düzgün şekilde çalışır. Ben eklerseniz EXECUTE AS SELF(yine aynı kullanıcı) ve oturum bile app_agentben olsun...is not able to access the database...
a1ex07
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.