【问题标题】:Is there a tool to check the minimum privileges required for a set of sql?是否有工具可以检查一组 sql 所需的最低权限?
【发布时间】:2011-01-11 19:16:11
【问题描述】:

如果我有一组 SQL(即包含任意 SQL 语句的脚本),有没有办法找出执行 SQL 所需的最低权限?

(在查看 WinForms 应用程序的项目属性页面上的“安全”选项卡时,我正在考虑类似于 Visual Studio 中的“应用程序所需的权限”区域。)

一点背景:

作为应用程序的一部分,我有一组升级脚本(用于更改表中的数据以及更改架构),这些脚本将在客户的数据库中运行。我想在部署这些升级脚本之前分析它们是否存在任何潜在的权限问题,因为运行它们的客户可能对 SQL Server 的登录有限制。这些脚本中发生的事情类型通常是添加/删除/更改表/列/索引,但我也会从信息模式视图和系统表中进行选择。

编辑:

当用户没有正确的升级权限时,我有适当的错误处理来应对这些情况。我目前也在检查运行升级的用户是db_owner,但我更关心正在升级的数据库之外的东西。例如,脚本经常使用系统表来获取有关数据库模式的信息,以决定是否执行特定操作 - 我想知道访问这些表需要哪些权限。另一个例子是打开页面压缩——用户是否需要特定的权限才能做到这一点?

我想在部署升级脚本之前对其进行检查,因为事先知道您需要某些权限,而不是升级失败并出现错误,这是一种更好的用户体验。

【问题讨论】:

  • +1 我们的 dba (mcdba an mct) 没有帮助我做同样的事情,我前段时间完成了事务并检查特殊错误号
  • 我确实在此 SQL 执行位置周围有错误捕获,但我希望能够事先知道需要什么权限,而不是让它失败然后发​​现它是由于一个不足- 特权用户尝试运行它。
  • 至少你可以检查 sysdba 或 dbowner :(

标签: sql sql-server sql-server-2005 sql-server-2008 permissions


【解决方案1】:

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

我建议将升级帐户设置为 db_owner 并让他们运行脚本。把事情简单化。或者为此目的在您的数据库中提供一个角色。

也许您可以创建一个“预执行”阶段,尝试执行一些命令,然后将它们回滚。如果您没有访问权限,它会引发一些错误。不过很杂乱。

【讨论】:

  • 我喜欢执行前阶段的想法,尽管它需要我事先知道要尝试什么 - 如果我知道我已经知道我需要什么权限的话。
  • "如果我知道我已经知道我需要什么权限。"所以底线是你必须记录你的应用程序的安全需求,如果你想要你想要的功能,就做这些检查。恕我直言,当您可以指示他们成为 userdb 中的 db_owner 和 master 并完成它时,这是不值得的。
  • 我正在努力避免这种情况,因为用户是大公司的用户,要进行任何 IT 更改(如更改 sql server 中的角色成员资格)需要可能需要数周才能完成的 IT 票证。此外,我认为他们甚至不会被允许在主数据库中成为db_owner
【解决方案2】:

我也在想同样的事情。如果 SQL 探查器中有一些选项可以让您跟踪使用了哪些权限,那就太好了。这样,您只需授予登录系统管理员权限,然后让用户/应用程序运行它的步伐并删除任何未使用的权限。

那...

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-30
    • 1970-01-01
    • 2020-11-05
    相关资源
    最近更新 更多