gespeicherte Prozedur aufrufen von Daten in einem anderen schema
SQL Server 2008 R2: in der Regel erstellen wir unsere Tabelle und eine gespeicherte Prozedur zu, und erteilen Sie einem Benutzer die Berechtigung zum ausführen der gespeicherten Prozedur. Wir haben nie zu gewähren, die bestimmte Rechte für die Tabellen oder sichten, denn wenn diese Benutzer können die gespeicherte Prozedur ausführen, die SQL Server-folgert, dass die gespeicherte Prozedur ausführen darf die select/insert/update-Anweisungen. Funktioniert gut, weil wir nur den Umgang mit einem schema, aber jetzt haben wir ein Szenario, wobei die Tabellen in einem schema, sondern eine gespeicherte Prozedur in einem anderen. Wenn der Benutzer die gespeicherte Prozedur ausführt, erhalten Sie eine Fehlermeldung:
Meldung 229, Ebene 14, Status 5, Prozedur teststoredprocedure, Zeile 7 Die
Die SELECT-Berechtigung verweigert wurde, auf das Objekt 'testtable', Datenbank
'testdatabase", schema' testschema'.
teststoredprocedure
ist in einem anderen schema als testtable
. Ist es möglich, die gespeicherte Prozedur wählen Sie aus Tabellen, ohne die Gewährung der Benutzer spezifische Rechte auf die Tabellen?
- Wenn eine Antwort richtig war oder hilfreich bitte akzeptieren oder upvote.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie dem Besitzer der gespeicherten Prozedur
WITH GRANT
Zugriff auf die Tabelle.In der Regel ein Schema ist im Besitz einer Rolle mit dem gleichen Namen wie das schema, so zu ermöglichen
storedprocschema.teststoredprocedure
Zugriff auf die Tabelle wäre es:Dieser sollte funktionieren, WENN und nur wenn die Tabelle in der gleichen Datenbank wie die proc.
Erreichen das gleiche Ergebnis mit einer Tabelle in einer anderen Datenbank, können Sie entweder:
Ermöglichen "Cross-Datenbank Besitz Verkettung"
Bewegen Sie den Vorgang auf der anderen Datenbank, und haben ein shim-Verfahren in der ursprünglichen Datenbank, die es nennt. Dann verwalten Sie Berechtigungen auf beide Verfahren.
Ja, es ist möglich. Hier ist, was Sie tun möchten:
Wo
UserWithPermissions
hat die erforderlichen Berechtigungen für Ihre Datenbank-Objekte, die Sie versuchen, ausführen von CRUD-Operationen wieder.Umgekehrt, wenn der Datenbank-Benutzer Sicherheitskontext verfügt über die erforderlichen Berechtigungen verfügen, können Sie die Verwendung der Kurzschrift um dies zu erreichen, sowie: