ivanmp Asked: 2012-09-19 13:54:19 +0800 CST2012-09-19 13:54:19 +0800 CST 2012-09-19 13:54:19 +0800 CST 确定用户最小权限集的最有效方法 772 我有一个应用程序使用db_owner权限连接到的数据库。 我如何有效地确定该用户(应用程序)在不导致服务中断的情况下实际运行所需的最低要求集?(即没有反复试验) sql-server sql-server-2008-r2 2 个回答 Voted Best Answer World Wide DBA 2012-09-19T14:16:18+08:002012-09-19T14:16:18+08:00 这应该可以从编写软件的开发人员那里获得。但是,有时此信息不可用 - 例如,如果软件是由第三方供应商编写的。大多数供应商倾向于说它需要sa,或者db_owner如果事实证明是这样的话,这通常归结为他们的编码不当。 如果软件开发人员无法提供此信息,那么您最好的解决方案是在一段时间内针对该用户帐户运行探查器跟踪 - 这应该为您提供它需要访问的大部分对象。 最佳做法是设置一个测试环境并在其上放置跟踪——除非绝对必要,否则你真的不想在生产数据库上放置跟踪——并期望在更改生产帐户权限之前进行大量测试。 我希望这可以帮助你。 Jon Seigel 2012-09-19T19:37:10+08:002012-09-19T19:37:10+08:00 这一切都归结为一件简单的事情:您可以访问应用程序的源代码吗? 如果您这样做了(并且可能会同意进行这些更改;而且,从技术上讲,逆向工程也属于此类,但是……您没有从我这里听说过),这只是一个搜索、测试和解决问题的问题文档。一帆风顺,对吧?:) 如果你不这样做,有两种情况: 该应用程序当前已获得许可和/或供应商/所有者不希望您干预。做出这种改变是绝对不行的。在极少数情况下,数据库级别的更改是可以接受的,但这肯定不是其中之一。 该应用程序已超出许可范围,或者供应商/所有者不关心您如何使用它。在这种情况下,别无选择,只能根据应用程序进行的数据库查询来确定需要哪些权限。从技术上讲,这不是猜测,但您只能根据已经发生的事情找到所需的权限,而不是根据将来需要的权限。这归结为彻底的跟踪(探查器或扩展事件)和测试。
这应该可以从编写软件的开发人员那里获得。但是,有时此信息不可用 - 例如,如果软件是由第三方供应商编写的。大多数供应商倾向于说它需要
sa
,或者db_owner
如果事实证明是这样的话,这通常归结为他们的编码不当。如果软件开发人员无法提供此信息,那么您最好的解决方案是在一段时间内针对该用户帐户运行探查器跟踪 - 这应该为您提供它需要访问的大部分对象。
最佳做法是设置一个测试环境并在其上放置跟踪——除非绝对必要,否则你真的不想在生产数据库上放置跟踪——并期望在更改生产帐户权限之前进行大量测试。
我希望这可以帮助你。
这一切都归结为一件简单的事情:您可以访问应用程序的源代码吗?
如果您这样做了(并且可能会同意进行这些更改;而且,从技术上讲,逆向工程也属于此类,但是……您没有从我这里听说过),这只是一个搜索、测试和解决问题的问题文档。一帆风顺,对吧?:)
如果你不这样做,有两种情况:
该应用程序当前已获得许可和/或供应商/所有者不希望您干预。做出这种改变是绝对不行的。在极少数情况下,数据库级别的更改是可以接受的,但这肯定不是其中之一。
该应用程序已超出许可范围,或者供应商/所有者不关心您如何使用它。在这种情况下,别无选择,只能根据应用程序进行的数据库查询来确定需要哪些权限。从技术上讲,这不是猜测,但您只能根据已经发生的事情找到所需的权限,而不是根据将来需要的权限。这归结为彻底的跟踪(探查器或扩展事件)和测试。