有没有一种工具可以检查一组SQL所需的最低权限?

4
如果我有一组SQL(即包含任意SQL语句的脚本),是否有办法找出执行SQL所需的最低权限?
(当查看WinForms应用程序的项目属性页上的安全选项卡时,“应用程序所需的权限”区域类似于Visual Studio中的内容。)
背景:
作为应用程序的一部分,我有一组升级脚本(这些脚本会更改表中的数据以及更改架构),将在客户端对其数据库运行。在部署它们之前,我想分析这些升级脚本是否存在潜在的权限问题,因为运行它们的客户可能具有受限制的SQL Server登录。这些脚本中发生的事情通常是添加/删除/更改表/列/索引,但我也从信息模式视图和系统表中选择。
编辑:
我已经设置了错误处理来处理用户没有正确权限执行升级的情况。我还当前检查运行升级的用户是否为db_owner,但我更关心升级之外的事情。例如,脚本经常使用系统表来获取有关数据库架构的信息,以决定是否执行特定操作-我想知道访问这些表所需的权限。另一个例子是打开页面压缩-用户需要特定的权限才能执行此操作吗?
我希望在部署升级脚本之前对其进行检查,因为提前知道需要某些权限比升级失败并出现错误要好得多。

+1 我们的数据库管理员(MCDBA和MCT)没有帮助我解决同样的问题,所以我不久前进行了交易并检查了特殊错误号。 - Sergey Mirvoda
我确实在执行此SQL语句的位置周围包裹了错误处理,但我希望能够事先知道所需的权限,而不是失败后才发现是由于一个权限不足的用户尝试运行它。 - adrianbanks
至少你可以检查 sysdba 或 dbowner :( - Sergey Mirvoda
2个回答

1

我认为这样的命令不存在。

我建议将升级帐户设置为db_owner并让他们运行脚本。保持简单。或者在您的数据库中创建一个角色来完成此任务。

也许您可以创建一个“预执行”阶段,尝试执行一些命令,然后回滚它们。如果您没有访问权限,它会抛出一些错误。虽然有点矫揉造作。


我喜欢pre-execute阶段的想法,尽管这需要我预先知道要尝试什么 - 如果我知道了,我就已经知道我需要什么权限。 - adrianbanks
如果我知道,我已经知道我需要什么权限了。因此,归根结底,如果您想要所需的功能,您将不得不记录应用程序的安全需求并进行这些检查。在我看来,如果您可以指示他们成为用户数据库和主数据库的db_owner,则没有必要这样做。 - Sam
我正在努力避免这种情况发生,因为用户是大公司的用户,在那里进行任何IT更改(例如更改SQL Server中的角色成员资格)都需要一个IT工单,可能需要几周才能完成。此外,我认为他们甚至不被允许成为主数据库中的“db_owner”。 - adrianbanks

0

我也在考虑同样的事情。如果SQL Profiler中有一些选项可以跟踪使用的权限,那就太好了。这样,您只需授予登录sysadmin,然后让用户/应用程序运行并删除未使用的任何权限。

如果您进行了分析器跟踪并将其保存为SQL脚本,然后有某个东西通过跟踪中的每个语句来确定所需的权限,怎么样?

作为副产品,您最终会得到一个方便的脚本,该脚本(理论上)可用于测试所有可用于监视应用程序状态的功能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接