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.
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
@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. –
@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 –