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


87

Ich habe eine Frage zu benutzerdefinierten 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 (bei der Ausführung des Befehls sql in der ASP.NET-Anwendung ü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 SQL-Befehls (Ausführen einer gespeicherten Prozedur) von 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 ganz gleich zu setzen, was, warum gibt es keine EXECUTEErlaubnis Typ Satz in Eigenschaftenfenster auch immer (ich sehe nur Control, References, Take Ownership, View Definition)?

Was ich auch nicht verstehe, ist, dass das Setzen der Berechtigung auf Controlim Eigenschaftenfenster das Problem löst und die gespeicherte Prozedur ohne Probleme ausgeführt wird.


4
Mögliches Duplikat des Parameters
Damien_The_Unbeliever

Danke! Ich habe gesucht, aber eindeutig nicht gut genug: /
Janez

Versuchen Sie es AS dboam Ende. So : GRANT EXEC ON TYPE::[schema].[typename] TO [User] AS dbo. Hat für mich gearbeitet.
Jonathan

Antworten:


196

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

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

9
Meine 2 Cent: Abhängig von Ihrem Verbindungsauthentifizierungsmechanismus müssen Sie möglicherweise der öffentlichen Gruppe exec gewähren. Ihr Stipendium würde also so aussehen: GRANT EXEC ON TYPE :: [Schema]. [Typname] TO [Public] GO
Sudhanshu Mishra

@dotnetguy Vielen Dank, keine der Lösungen hat für mich funktioniert, außer Ihrer.
Mazen el Senih

3

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

Eine Problemumgehung besteht darin, die gespeicherte Prozedur so zu ändern, dass sie als anderer Benutzer ausgeführt wird . 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 jedoch keine andere Option haben:

CREATE PROCEDURE dbo.usp_Demo
WITH EXECUTE AS SELF

1
Vielen Dank für den Hinweis. Die gespeicherte Prozedur enthält jedoch keine dynamische SQL. Nur allgemeine INSERT INTOund 'UPDATE'-Tabellenanweisungen, für die dieser Benutzer alle erforderlichen Berechtigungen hat. Auch dieser Benutzer / Login ist speziell für diese ASP.NET-Anwendung reserviert / erstellt, um eine Verbindung zu dieser Datenbank herstellen und nur gespeicherte Prozeduren ausführen zu können (nicht erstellen usw., Creator ist immer 'sa').
Janez

Danke, das war das Problem für mich. Andere Leser mit diesem Problem finden weitere Tipps unter SQL Server-Berechtigungen für gespeicherte Prozesse mit dynamischem SQL .
Nickolay
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.