如果我有一组SQL(即包含任意SQL语句的脚本),有没有办法找出执行SQL所需的最低权限是什么?
(当我在WinForms应用程序的项目属性页面上查看“安全性”选项卡时,我正在考虑类似于Visual Studio中“应用程序所需的权限”区域。)
一些背景知识:
作为应用程序的一部分,我有一组升级脚本(可以更改表中的数据以及更改架构),这些脚本将在客户端的数据库中运行。我想在部署之前分析这些升级脚本以查找任何潜在的权限问题,因为运行它们的客户可能有限制的SQL Server登录。这些脚本中发生的事情类型通常是添加/删除/更改表/列/索引,但我也从信息模式视图和系统表中进行选择。
编辑:
我有错误处理,以应对用户没有正确权限进行升级的情况。我目前还在检查运行升级的用户是db_owner
,但是我更关注正在升级的数据库之外的事情。例如,脚本经常使用系统表来获取有关数据库模式的信息,以决定是否执行特定操作 - 我想知道访问这些表所需的权限。另一个例子是打开页面压缩 - 用户是否需要特定权限才能执行此操作?
我希望在部署之前检查升级脚本,因为要提前知道您需要某些权限,而不是升级失败并出现错误,这是一种更好的用户体验。
答案 0 :(得分:1)
我不认为这样的命令存在。
我建议将升级帐户设置为db_owner并让他们运行脚本。把事情简单化。或者为此目的在数据库中发送一个角色。
也许你可以创建一个'预执行'阶段,试图执行一些命令,然后回滚它们。如果您没有访问权限,则会产生一些错误。虽然相当不错。
答案 1 :(得分:0)
我在考虑同样的事情。如果在SQL事件探查器中有一些选项允许您跟踪使用的权限,那将会很棒。这样你就可以授予一个登录系统管理员然后让用户/应用程序运行它的步伐并删除任何未使用的权限。
怎么样......如果您执行了一个探查器跟踪并将其保存为SQL脚本,那么跟踪中的每个语句是否都有效,以确定所需的权限?
作为副产品,您最终会得到一个方便的脚本(理论上)可以用作对可用于监控应用程序状态的所有功能的测试。