SORUN: Güvenlik bağlamı, saklı bir yordam içinde dinamik SQL deyimleri

Makale çevirileri Makale çevirileri
Makale numarası: 301299 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Belirtiler

Bir saklı yordamın dinamik yürütme veya bir sorgu ile (sp_executesql EXECUTE) çalıştırdığınızda, aşağıdaki hata iletisini alabilirsiniz:
Sunucu: Msg 229, Düzey 14, State 5, Hat 1 ' permission ' reddedildi nesne ' object ' veritabanı ' database ' sahip ' owner '.

Neden

Bu davranış, ana saklı yordamdan gelen ayrı bir bağlamda dinamik yürütme (EXECUTE veya sp_executesql) sorgu yürütür nedeniyle oluşur; bu güvenlik bağlamında değil saklı yordam sahibinin ve saklı yordamın yürüten kullanıcının güvenlik bağlamında yürütülür.

Not: sahiplik zincirlerini belirleme sürece, bu davranış hesaba katmanız.

Pratik Çözüm

Bu soruna geçici bir çözüm bulmak için:
  • Doğru dinamik yürütme sorguda belirtilen temel her nesne için gerekli izni vardır.
  • Bir SELECT deyimi, özgün tabloyu ve sonra <a1>EXEC</a1> SQL deyiminizi geçici tablo karşı tüm veri içeren geçici bir tablo oluşturmak için INTO yan tümcesi ile yeniden çalıştırabilirsiniz. Ile ilgili tablolara küçük, güvenilir bir çözümdür.

Daha fazla bilgi

Bu sorun aşağıdaki kod gösterir:
   create database dynamicSQL
   go
   use dynamicSQL
   create table employee(Name varchar(255), salary money)
   go
   create proc TestError @MySql nvarchar(500) As 
   exec (@mySql)
   go
   set nocount on
   insert employee select 'FunctionFunction', 100000
   insert employee select 'Function', 30000
   set nocount off
   exec sp_addlogin 'FunctionFunction'
   exec sp_adduser 'FunctionFunction'
   exec sp_addlogin 'Function'
   exec sp_adduser 'Function'

   grant execute on TestError to Function

   setuser 'Function'
				
bu sorun aşağıdaki kodu reproduces:
   go
   declare @Sql varchar(500)
   set @Sql = 'select * from employee where Name = ''FunctionFunction'''
   exec TestError @Sql
				
dynamicSql veritabanı sınama ve bu çoğaltılması senaryosunda kullanılan oturumu bırakmak için şu kodu kullanın:
   go
   setuser 
   use master
   drop database dynamicSql
   exec sp_droplogin  'FunctionFunction'
   exec sp_droplogin 'Function'
				
Sahipliği Chains kullanarak SQL Server Books Online'da sahipliği zincirlerini hakkında daha fazla bilgi için bkz.

Özellikler

Makale numarası: 301299 - Last Review: 16 Ekim 2003 Perşembe - Gözden geçirme: 3.2
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
Anahtar Kelimeler: 
kbmt kbprb KB301299 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:301299

Geri Bildirim Ver

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com