首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果用户未经授权运行存储过程,则显示消息。

如果用户未经授权运行存储过程,则显示消息。
EN

Stack Overflow用户
提问于 2014-11-11 01:36:16
回答 3查看 259关注 0票数 0

我对存储过程很陌生,只是好奇事情是如何完成的。我想知道的是,如果用户试图执行他没有权限的过程,如何显示消息?

据我所知,Server本身负责处理消息。我尝试过这样做(在存储过程中):

代码语言:javascript
复制
BEGIN
try
DELETE from MYTABLE
END TRY
BEGIN CATCH
    SELECT ERROR_MESSAGE() AS ErrorMessage;
        END CATCH;

不管我写不写,这都没什么区别。错误是一样的。我不知道怎么写你自己的信息。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-11-11 03:33:27

如果用户试图执行未通过一个或多个角色成员身份显式或隐式授予其权限的存储过程或用户定义函数(UDF),则Server将处理异常和错误消息。您不能在该代码中设置消息,因为根据定义,不允许用户执行该消息以获取其内部的任何错误消息或错误处理。

如果您想要一个自定义消息,您需要从应用程序端捕获SQL异常(应该有一个错误代码,您可以测试它以指示“拒绝权限”),然后返回您的自定义消息。

票数 3
EN

Stack Overflow用户

发布于 2014-11-11 06:50:07

当您尝试访问未经授权的对象时,有修复消息或默认消息显示。

有这么多的安全特性,如用户、角色、模式等。如果有任何不匹配之处,您就会得到“无法找到存储过程‘guest.get_procedureName’”的错误。

假设创建了一个名为procedure1的默认模式(Dbo)的过程。

代码语言:javascript
复制
exec dbo.procedure1 para1value,'para2value', null,para4value etc.
exec guest.procedure1 para1value,'para2value', null,para4value etc.

现在,如果一切顺利,第一次给我数据到side和C#端。但是第二个错误会给我上面的错误。

这种类型的安全性在sqlserver端不需要处理,就像上面的代码一样,尝试捕获与相同,但理想情况下,只有当您显式地希望sql返回的消息直接显示到ui (即自定义逻辑错误消息)时,或者当您运行sp或数据等不匹配时,它才需要处理。

对于c#的观点,您可以在catch中获取此消息,因此您可以这样做。

代码语言:javascript
复制
public method    
{
 try
   {
      .....
   }
 catch(Exception ex)
   {
       if (ex.Message.Contains("Could not find"))
         //give any your custom message or throw ex
    }
}
票数 0
EN

Stack Overflow用户

发布于 2014-11-11 09:08:35

代码语言:javascript
复制
try
   DoTheThing();
except
   on E:Exception
     ShowMessage("Something Went Wrong! : " + E.Message);
end;

这显示了一个自定义消息(排序),它还为您提供了一种通过'E‘检查错误内容的方法。

您还可以处理更具体的异常。

代码语言:javascript
复制
except
    on E:ESomeSpecificException
      // ----
end;

--

正如其他人所指出的--试图捕捉存储过程中的错误是没有意义的--用户无法访问它.按定义

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26856092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档