SQL Server-Berechtigungen für Gespeicherte Prozeduren mit dynamic SQL

Ich habe eine Datenbank mit einer Anwendung Rolle. Die Rolle, die Mitglieder gehören alle zu einer Gruppe in Active Directory. Anstatt die Rolle Berechtigungen wählen Sie aus den Tabellen habe ich wegen der Rolle, die Ausführungsberechtigung für alle gespeicherten Prozeduren, die es braucht, um zu rufen.

Dies funktioniert gut, außer für einen meiner gespeicherten Prozeduren, die Gebäude bis einige dynamische SQL-und Aufruf von sp_executesql.

Den dynamischen sql-sieht irgendwie wie diese:

SET @SQL = N'
SELECT * 
FROM dbo.uvView1 
INNER JOIN uvView2 ON uvView1.Id = uvView2.Id'

EXEC sp_executesql @SQL

Den Benutzer in dieser Rolle Versagen, die zum aufrufen der gespeicherten Prozedur. Es gibt den folgenden Fehler, das ist so in der Art erwartet, nehme ich an:

Die SELECT-Berechtigung verweigert wurde, auf das Objekt 'uvView1', Datenbank 'Foobar', schema 'dbo'.

Gibt es eine Möglichkeit, ich kann meine Benutzer erfolgreich ausführen dieser proc, ohne dass die Rolle, die Berechtigungen für alle Ansichten in der dynamischen SQL?

Der Benutzer ist auf die Sicht, die richtige? Ich glaube nicht, dass die Sicherheit kümmert sich, wie Sie darauf zugreifen.
Dies ist die einzige proc, der wird scheitern und es ist nicht zu Versagen, die mit execute-Berechtigungen auf dem proc...es ist speziell, sagte mir, dass Sie können WÄHLEN Sie aus der Sicht...also ich vermute, es ist nicht egal irgendwie.
Warum das passiert, ich fand den Dynamische SQL-und besitzverkettung in SQL Server @ mssqltips.com nützlich: "Wenn entweder der sp_executesql oder die EXECUTE-Anweisung führt einen string, der string wird ausgeführt, als seine eigene Selbstversorger-batch. ... Berechtigungen sind erforderlich, auf die sicherungsfähigen Elemente, auf die verwiesen wird in der EXECUTE-Zeichenfolge"

InformationsquelleAutor Dismissile | 2010-11-02

Schreibe einen Kommentar