2009-07-16 3 views
1

J'essaie d'exécuter une procédure stockée à partir de mon site Web qui désactive un déclencheur. Voici le code pour le déclencheur:Quels sont les droits d'accès qui me manquent sur ma procédure stockée?

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

J'ai mis aussi les autorisations sur la procédure stockée avec:

Grant Exec on dbo.DisableMyTrigger To DBAccountName 

DBAccountName est et a été en mesure d'exécuter d'autres procédures stockées, ainsi que dynamique Instructions SQL sans problème.

Voici le code de ma page CFM:

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

Et voici l'erreur que je reçois:

[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. 

Répondre

3

Est-ce que DBAccountName possède des autorisations sur TableName? Ceux-ci peuvent être accordés ou révoqués séparément du schéma global (dbo).

Je ne suis pas un dba, mais DBAccountName est-il autorisé à exécuter des instructions DDL? (donc il peut faire des choses comme désactiver les déclencheurs par programmation)

+0

DBAccountName a accès à Tablename. Cependant, je ne suis pas sûr de la 2ème partie. Je pensais qu'en accordant à cet utilisateur des droits d'exécution sur cette procédure, peu importe ce qu'il y avait dans la procédure. – Jason

+0

@Jason: Avec MS SQL 2000, trois instructions: insérer, mettre à jour et supprimer les droits acquis via le propriétaire du proc stocké par rapport aux droits de la connexion. Pour faire DDL dans une procédure stockée, l'utilisateur appelant le SP avait besoin des droits pour exécuter le DDL. Même TRUNCATE TABLE ne peut pas être exécuté à moins que l'utilisateur n'ait le droit de tronquer la table. –

+2

@Jason: J'ai ajouté une réponse à une autre question qui parle des droits et des procédures stockées. Le message d'erreur pour les autres instructions DDL est similaire à ce que vous obtenez. Voir: http: //stackoverflow.com/questions/1139137/what-are-the-ramifications-of-granting-a-db-user-with-limited-access-execute-perm/1141440#1141440 –

0

Son parce que votre connecté au mauvais db Catalogue (en supposant que SQL Server). Votre connecté à la base de données, mais votre connecté au catalogue « par défaut », ce qui est probablement « maître »

Je pense que vous pouvez mettre quelque chose au début de votre procédure comme:

utilisation DBName;

et cela vous connectera au bon catalogue.

+0

OUI! C'est exactement ce que je dis ci-dessus! bon appel – Eric

+0

Msg 154, niveau 15, état 1, procédure DisableMyTrigger, ligne 9 Une instruction de base de données USE n'est pas autorisée dans une procédure, une fonction ou un déclencheur. – Jason

+0

Avez-vous écrit l'utilisation de la base de données en plus de la création de la procédure stockée? – Eric

0

Vous devrez peut-être spécifier la base de données. Je ne pense pas que ce soit un problème d'autorisations, je crois qu'il ne peut tout simplement pas le trouver dans cette base de données.

Questions connexes