2012-04-26 33 views
1

我有删除表上的触发器,其中我使用函数HOST_NAME()来检索执行操作的用户,然后我检查用户存在用户表中如果不是那么我扔Raiserror。动作是从ASP.NET Web应用程序中执行的,我将动态地将“Workstation Id”添加到连接字符串,以便在删除触发器中具有当前记录的用户名。
修改HOST_NAME()在sql服务器

问题是我有时必须从SSMS手动运行一些脚本,并且Host_Name()包含当前登录的用户在sql server中的名称,但该用户在用户表中没有相应的行,然后发生Raiserror。问题是如何从SSMS运行删除脚本并且没有Rairserror?

+1

只是为了澄清:你想修改一个系统函数,以便触发器允许未经授权的用户运行删除脚本?我真的很茫然。如果你找到了一个方法来做到这一点,让我知道,以便我可以找到一种方法来抵御它。 – JAQFrost 2012-04-26 13:48:12

+0

澄清:我创建了这个问题,因为我动态地添加“工作站ID”连接字符串从我的Web应用程序已记录用户名在删除triger(然后我检查名称存储在用户表的Host_Name(),然后我做一些SQL ),但有时候我必须运行一些在用户表中没有对应行的帐户。休息一段时间后,我发现了溶剂,我创建了自己的函数,在其中检查Host_Name(),如果用户名不存在于用户表中,但名称等于xyz,则从用户表中返回用户。我希望你现在明白我的问题。 – 2012-04-26 18:41:50

+0

我这么认为:你并不是真的想改变系统功能,你想把它包装在一个自定义函数中,该函数返回脚本应该运行的用户。请相应地编辑你的帖子,并回答你做了什么来得到你想要的。 – JAQFrost 2012-04-27 13:25:23

回答

0

答案很简单,使你的自定义函数覆盖Host_Name(),如果Host_Name()包含名称XYZ的用户,那么我返回用户表中具有相应行的系统用户的常量名称。

+0

我建议的一件事是你完全做出一个新的功能并且调用它。覆盖系统功能意味着你破坏了期望它们按照文档工作的代码。 – JAQFrost 2012-04-30 18:32:38

+0

好的,谢谢你的好建议 – 2012-04-30 18:42:24