我们在.Net 3.5中工作,我们在代码中有SqlDependency,这要求.Net用户拥有CREATE权限和其他权限。
这里的DBA希望避免给.Net用户提供如此巨大的权限。
有没有办法通过手动执行SqlDependency的操作来绕过SqlDependency?运行具有.net one权限的更多权限的后台进程并创建必要的程序等?
谢谢!
为了将来参考,我只想说我们通过一个非常简单的解决方案解决了权限问题:SqlDependency使用不同的连接字符串,其用户具有与常规.net连接字符串不同的权限。
答案 0 :(得分:7)
请改用SqlNotificationRequest。这是底层的基础类,在其基础上构建了SqlDependency。要了解SqlDependency的工作原理,请阅读The Mysterious Notification。
要接收查询通知,您必须拥有有效的服务和队列。应用程序实例无法共享服务和队列,因为它们将接收彼此的通知。这就是为什么SqlDependency选择对临时服务,队列和过程进行“即时”部署(当您调用Start()时),这就是驱动要求具有CREATE权限的原因。
较低级别的SqlNotificationRequest允许您指定要使用的服务(以及队列),但缺点是服务和队列必须已存在。但是,您可以在安装阶段创建它们,当安装或.msi由特权管理员运行时。当用户调用时,代码使用已创建的服务。但同样,您必须为每个应用程序实例(即每个appdomain)创建一个服务,这会使事情变得复杂。
答案 1 :(得分:0)
为什么不能使用存储过程来处理此任务?它们是从客户端代码中抽象权限和数据库逻辑的一种方法。
如果所有对象(表,存储过程等)都归同一所有者所有(多次dbo),则客户端权限只需要访问权限即可执行所需的存储过程。