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 EXECUTE
Erlaubnis 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 Control
im Eigenschaftenfenster das Problem löst und die gespeicherte Prozedur ohne Probleme ausgeführt wird.
AS dbo
am Ende. So :GRANT EXEC ON TYPE::[schema].[typename] TO [User] AS dbo
. Hat für mich gearbeitet.Antworten:
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.
quelle
Wenn Ihre gespeicherte Prozedur dynamisches SQL verwendet, dh das
@sql
wird generiert und dann über ausgeführtexec @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:
quelle
INSERT INTO
und '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'
).