确定用户最小权限集的最有效方法

iva*_*nmp 6 security sql-server sql-server-2008-r2

我有一个应用程序使用db_owner权限连接到的数据库。

如何有效地确定该用户(应用程序)在不导致服务中断的情况下实际运行所需的最低要求集?(即没有反复试验)

Wor*_*DBA 7

这应该可以从编写软件的开发人员那里获得。但是,有时此信息不可用 - 例如,如果软件是由第三方供应商编写的。大多数供应商倾向于说它需要,sa或者db_owner如果事实证明是这样的话,这通常归结为他们的编码不佳。

如果软件开发人员无法提供此信息,那么您最好的解决方案是在一段时间内针对该用户帐户运行分析器跟踪 - 这应该为您提供它需要访问的大部分对象。

最佳实践是设置一个测试环境并在其上放置跟踪 - 除非绝对必要,否则您真的不想在生产数据库上放置跟踪 - 并期望在更改生产帐户权限之前进行重要测试。

我希望这可以帮助你。

  • 审计数据库对象访问事件是一个很好的在 Profiler 中使用的事件。我用它来帮助我了解应用程序使用了哪些对象以及哪些权限。还有一个类似的方法可以捕获使用对象的失败尝试。 (4认同)
  • 附带说明,因为您有 SQL 2008 R2,您可以查看 SQL 安全审计。它使用扩展事件,并且比长时间运行 Profiler 的干扰要小得多。http://msdn.microsoft.com/en-us/library/cc280386.aspx (4认同)

Jon*_*gel 5

这一切都归结为一件简单的事情:您可以访问应用程序的源代码吗?

如果您这样做了(并且可能会购买以进行这些更改;此外,从技术上讲,逆向工程属于这一类,但是……您没有从我这里听到),这只是一个搜索、测试和文档。一帆风顺,对吧?:)

如果没有,有两种情况:

  1. 该应用程序当前已获得许可和/或供应商/所有者不希望您干预。做出这种改变是绝对不可以的。在极少数情况下,数据库级别的更改是可以的,但这肯定不是其中之一。

  2. 应用程序没有许可证或者供应商/所有者不关心你用它做什么。在这种情况下,别无选择,只能根据应用程序进行的数据库查询来确定需要哪些权限。从技术上讲,这不是猜测,但您只能根据已经发生的情况找到所需的权限,而不是将来需要的权限。这归结为彻底的跟踪(Profiler 或扩展事件)和测试。