DetailPage-MSS-KB

Knowledge Base

Artikel-ID: 301299 - Geändert am: Donnerstag, 16. Oktober 2003 - Version: 3.2

 

Problembeschreibung

Wenn Sie eine gespeicherte Prozedur mit einer Abfrage dynamische Ausführung ( Sp_executesql - oder EXECUTE) ausgeführt werden, erhalten Sie folgende Fehlermeldung:
Server: Meldung 229, Ebene 14, Status 5 1 ' permission '-Berechtigung für Objekt ' object ', Datenbank ' database ' Besitzer ' owner ' verweigert.

Ursache

Dieses Verhalten tritt auf, weil eine dynamische Ausführung-Abfrage ( Sp_executesql - oder EXECUTE) in einem separaten Kontext die primäre gespeicherte Prozedur ausführt, er führt im Sicherheitskontext des Benutzers, der die gespeicherte Prozedur ausführt und nicht im Sicherheitskontext des Besitzers der gespeicherten Prozedur.

Hinweis : Sie sollten berücksichtigen dieses Verhalten während Sie Besitzketten ermitteln.

Abhilfe

Dieses Problem zu umgehen:
  • Sie müssen ordnungsgemäß der Bedarf für jedes Objekt zugrunde liegenden Berechtigung, das in der Abfrage dynamische Ausführung genannt wird.
  • Sie können eine SELECT-Anweisung mit der INTO-Klausel zum Erstellen einer temporären Tabelle, die die Daten in der ursprünglichen Tabelle und Ihre SQL-Anweisung für die temporäre Tabelle EXEC enthält ausführen. Dies ist eine geeignete Lösung, wenn die Tabellen, denen Sie zuständig sind klein sind.

Weitere Informationen

Der folgende Code veranschaulicht dieses Problem:
   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'
				
der folgende Code das Problem reproduziert:
   go
   declare @Sql varchar(500)
   set @Sql = 'select * from employee where Name = ''FunctionFunction'''
   exec TestError @Sql
				
den folgenden Code verwenden, um die DynamicSql Testdatenbank und Anmeldungen, die in diesem Szenario Vervielfältigung verwendeten ablegen:
   go
   setuser 
   use master
   drop database dynamicSql
   exec sp_droplogin  'FunctionFunction'
   exec sp_droplogin 'Function'
				
Weitere Informationen über Besitzketten finden Sie unter Verwenden von Besitzketten in SQL Server-Onlinedokumentation.

Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
Keywords: 
kbmt kbprb KB301299 KbMtde
Maschinell übersetzter ArtikelMaschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 301299  (http://support.microsoft.com/kb/301299/en-us/ )
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.
Freigeben
Weitere Supportoptionen
Microsoft Community-Supportforen
Kontaktieren Sie uns direkt
Zertifizierten Partner finden
Microsoft Store
Folgen Sie uns: