2009-07-16 12 views
1

Ich versuche eine gespeicherte Prozedur von meiner Website auszuführen, die einen Trigger deaktiviert. Hier ist der Code für den Trigger:Welche Zugriffsrechte fehlen in meiner gespeicherten Prozedur?

CREATE PROCEDURE [dbo].[DisableMyTrigger] 
AS 
BEGIN 
    alter table dbo.TableName DISABLE TRIGGER TriggerName 
END 

Ich habe auch die Berechtigungen für die gespeicherten Prozedur mit:

Grant Exec on dbo.DisableMyTrigger To DBAccountName 

DBAccountName ist und konnte andere gespeicherte Prozeduren sowie dynamische laufen SQL-Anweisungen ohne Problem Hier

ist der Code von meiner CFM Seite:

<cfstoredproc datasource="myDatasource" procedure="DisableMyTrigger" /> 

Und hier ist der Fehler Ich erhalte:

[Macromedia][SequeLink JDBC Driver][ODBC Socket][Microsoft][SQL Native Client][SQL Server]Cannot find the object "TableName" because it does not exist or you do not have permissions. 

Antwort

3

Hat DBAccountName Berechtigungen für TableName? Diese können unabhängig vom Gesamtschema (dbo) gewährt oder widerrufen werden.

Ich bin kein DBA, aber ist DBAccountName erlaubt, DDL-Anweisungen auszuführen? (So ​​kann es Dinge wie programmgesteuert Auslöser deaktivieren)

+0

DBAccountName hat Zugriff auf Tabellenname. Allerdings bin ich mir über den 2. Teil nicht sicher. Ich dachte, indem ich diesem Benutzer exec Rechte an diesem Verfahren gewährte, dann wäre es egal, was in der Prozedur ist. – Jason

+0

@Jason: Mit MS SQL 2000, drei Anweisungen: einfügen, aktualisieren und löschen Sie die erworbenen Rechte über den Eigentümer des gespeicherten Proc gegen die Rechte der Verbindung. Um DDL in einer gespeicherten Prozedur auszuführen, benötigt der Benutzer, der den SP aufruft, die Rechte zum Ausführen der DDL. Sogar TRUNCATE TABLE konnte nicht ausgeführt werden, wenn der Benutzer nicht berechtigt war, die Tabelle zu kürzen. –

+2

@Jason: Ich habe eine Antwort auf eine andere Frage hinzugefügt, die sich auf Rechte und gespeicherte Prozeduren bezieht. Die Fehlermeldung für andere DDL-Anweisungen ähnelt der, die Sie erhalten. Siehe: http: //stackoverflow.com/questions/1139137/what-are-the-ramifications-of-grencing-a-db-user-with-limited-access-execute-perm/1141440#1141440 –

0

Sein, weil Ihr auf der falschen db Katalog verbunden (vorausgesetzt, SQL Server). Sie mit der Datenbank verbunden, aber Sie mit dem „default“ Katalog, der wahrscheinlich ist „Master“

Ich glaube, Sie etwas am Anfang der Prozedur wie setzen können:

Verwendung DBName;

und das wird Sie mit dem richtigen Katalog verbinden.

+0

JA! genau das sage ich oben! Guter Aufruf – Eric

+0

Msg 154, Ebene 15, Status 1, Prozedur DisableMyTrigger, Zeile 9 Eine USE-Datenbankanweisung ist in einer Prozedur, Funktion oder einem Trigger nicht zulässig. – Jason

+0

Haben Sie Datenbank über die Erstellung der gespeicherten Prozedur schreiben geschrieben? – Eric

0

Möglicherweise müssen Sie die Datenbank angeben. Ich glaube nicht, dass es ein Problem mit Berechtigungen ist, ich glaube, es kann es einfach nicht in dieser Datenbank finden.

Verwandte Themen