3

呼び出し元が特定のパラメーターでこの sproc を呼び出す権限があるかどうかを検証する sproc があります。RAISERROR呼び出し元が承認されていない場合に備えて、ACCESS DENIED エラー番号を使用したい。エラー番号は 50000 より大きくなければならないため、エラー番号 10011 (sys.messages でアクセスが拒否されました) になることはありませんsp_addmessage。同じ ACCESS DENIED エラーを再現します。これを行う正しい方法は何ですか?

編集:必要な SQL コードは SQL Azure と互換性があるはずだったので、RAISERRORエラー番号なしで呼び出し、コード ビハインドでデフォルトの 50,000 エラー コードをチェックすることになりました (SQL Azure では、現在 と のサポートはsp_addmessageありませんsys.messages)。

4

2 に答える 2

2

AccessDeniedTable現在の DB ユーザーがアクセスできないテーブルを作成します。論理ACCESS DENIED条件の問題 aSELECT @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
于 2011-08-10T20:09:25.630 に答える
1

あなたが提起したいのはAccess deniedエラーではなく、むしろエラーであるため、これを行うことはできませんAccess denied with these parameters。したがって、カスタムエラーを作成し、それを発生させる必要があります。

「実際の」アクセス拒否エラーが必要な場合は、プロシージャの実行権限を取り消す必要があります。

于 2011-08-10T22:11:59.247 に答える