Использование RAISERROR для индикации ошибки ACCESS DENIED - PullRequest
3 голосов
/ 11 августа 2011

У меня есть спрок, который проверяет, уполномочен ли вызывающий абонент вызывать этот спрок с заданными параметрами.В случае, если вызывающий абонент не авторизован, я хочу RAISERROR с номером ошибки ACCESS DENIED.Теперь это не может быть ошибка с номером 10011 (ACCESS DENIED в sys.messages), потому что номер ошибки должен быть больше 50000. Я не хочу добавлять те же сообщения (английский и локализованный тексты), используя sp_addmessagesproc просто воссоздает ту же ошибку ACCESS DENIED.Какой правильный способ сделать это?

РЕДАКТИРОВАТЬ: , поскольку требуемый код SQL должен был быть совместим с SQL Azure, в итоге я позвонил RAISERROR без номера ошибки и проверил по умолчаниюКод ошибки 50 000 в коде позади (в SQL Azure в настоящее время нет поддержки sp_addmessage и sys.messages).

Ответы [ 2 ]

2 голосов
/ 11 августа 2011

создать таблицу AccessDeniedTable, к которой у текущего пользователя БД никогда не будет доступа.когда вы нажмете логическое условие ACCESS DENIED, выдайте SELECT @x=COUNT(*) FROM AccessDeniedTable, который должен выдать фактическую ошибку, которую вы ищете.

IF @Accesslevel<5 ---your condition here
BEGIN
    SELECT @x=COUNT(*) FROM AccessDeniedTable --throw standard ACCESS DENIED error
    RAISERROR('FATAL ERROR',16,1) --just in case actual error is not thrown
    RETURN 999999 --just in case
END
1 голос
/ 11 августа 2011

Вы не можете сделать это, поскольку то, что вы хотите поднять, не является ошибкой Access denied, а скорее ошибкой Access denied with these parameters.Следовательно, вам нужно создать пользовательскую ошибку и поднять ее.

Если вы хотите, чтобы "реальная" ошибка доступа была запрещена, это вопрос отзыва прав exec на процедуру.

...