我有一个sproc来验证调用方是否被授权用给定的params调用这个sproc。如果调用方未被授权,我希望使用访问拒绝错误号的RAISERROR。现在,它不能是错误号10011 (在sys.messages中拒绝访问),因为错误号必须大于50000。我不想使用sp_addmessage sproc添加相同的消息(英语和本地化文本),只是为了重新创建相同的访问拒绝错误。怎么做才是对的?
编辑:,因为需要的SQL代码应该与SQL兼容,所以我最终调用了没有错误号的RAISERROR,并检查了后面代码中默认的50,000个错误代码(在SQL中,目前不支持sp_addmessage和sys.messages)。
发布于 2011-08-10 22:11:59
您不能这样做,因为您想要引发的不是Access denied错误,而是Access denied with these parameters错误。因此,您需要创建一个自定义错误并引发该错误。
如果您想要“真实”访问被拒绝的错误,这是一个撤销该过程的执行权限的问题。
发布于 2011-08-10 20:09:25
创建当前DB用户永远无法访问的表AccessDeniedTable。当您命中您的逻辑ACCESS DENIED条件时,发出一个SELECT @x=COUNT(*) FROM AccessDeniedTable,该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
ENDhttps://stackoverflow.com/questions/7017004
复制相似问题