wake-up-neo.com

Die EXECUTE-Berechtigung wird für die benutzerdefinierten Tabellentypen verweigert.

Ich habe eine Frage zu Benutzerdefinierte Tabellentypen in SQL Server 2008.

Für die Notwendigkeit einer der ASP.NET-Anwendungen haben wir unsere eigenen Tabellentypen in SQL Server 2008 definiert, um sie als Parameter in den gespeicherten Prozeduren zu verwenden. Wenn Sie den Befehl sql in der ASP.NET-Anwendung ausführen, übergeben wir das DataTable-Objekt als Parameter für die gespeicherte Prozedur siehe hier für ein Beispiel )

Das Problem ist, dass beim Ausführen des Befehls Sql (gespeicherte Prozedur ausführen) in ASP.NET eine Fehlermeldung angezeigt wird:

Die EXECUTE-Berechtigung wurde für das Objekt 'ourTableType', die Datenbank 'ourDatabase' und das Schema 'ourSchema' verweigert.

Warum ist das so? Warum müssen wir Berechtigungen für benutzerdefinierte Tabellentypen festlegen? Warum reicht es nicht aus, die Berechtigung nur für die gespeicherte Prozedur festzulegen, die sie verwendet? Und wenn wir es einstellen müssen, egal was passiert, warum gibt es keinen EXECUTE-Berechtigungstyp, der im Eigenschaftenfenster eingestellt werden kann (ich kann nur Control, References, Take Ownership, View Definition)?

Ich verstehe auch nicht, dass das Festlegen der Berechtigung für Control im Eigenschaftenfenster das Problem löst und die gespeicherte Prozedur ohne Probleme ausgeführt wird.

81
Janez

Ich hoffe wirklich, dass Sie das jetzt gelöst haben, da die Frage fast 4 Monate alt ist, aber falls Sie es nicht getan haben, ist hier meiner Meinung nach die Antwort.

GRANT EXEC ON TYPE::[schema].[typename] TO [User]
GO
179
mccow002

Wenn Ihre gespeicherte Prozedur dynamisches SQL verwendet, bedeutet dies, dass @sql wird generiert und dann ausgeführt über exec @sql, Sie benötigen eine Berechtigung für die zugrunde liegenden Tabellen.

Eine Problemumgehung ist Änderung an gespeicherter Prozedur, um als anderer Benutzer ausgeführt zu werden . Wenn Sie es als SELBST ausführen lassen, wird es unter dem Ersteller des gespeicherten Prozesses ausgeführt, was äußerst gefährlich ist. Wenn Sie noch keine andere Option haben:

CREATE PROCEDURE dbo.usp_Demo
WITH EXECUTE AS SELF
3
rkw