【问题标题】:Application vs SQL server 2008 accounts issue应用程序与 SQL Server 2008 帐户问题
【发布时间】:2012-10-21 04:33:09
【问题描述】:

大家好,

我正在研究以下案例:

场景:应用程序使用通用“SA”用户而不是域用户连接到生产数据库(SQL Server 2008)。这使得跟踪\日志\组织变得更加困难,因为一切都被标记为由 SA 用户完成!

注意:在应用程序中使用域用户/密码,通用帐户仅与数据库有关。

问题:在这种情况下最好的做法是什么?每个用户都应该有一个帐户来登录数据库吗? (使用 Windows 身份验证的 sql)有 +- 500 个用户是关于数据库性能的问题吗?或指定通用帐户?

非常感谢!

【问题讨论】:

  • 您可以使用一个通用 sql 帐户,但在任何或所有表中存储一个 UserName / UserID 和 DateModified 字段。更新时将记录或进行交易的用户存储在此字段中,此外还有一个日志文件...
  • 这可能更适合 DBA 站点,但是如果您可以选择使用 Windows 身份验证,那么一种常见的方法是将所有用户放在一个 AD 组中并授予该组权限而不是给每个单独的用户。
  • 感谢@JonH 的建议,对于某些表格,我同意您的看法!如果在所有表中都这样做会是巨大的日志和一些性能损失,很高兴知道在这种情况下通用帐户不会有问题感谢您的建议!
  • @Pondlife 感谢您的建议!我会和网络管理员核实一下... =)

标签: sql-server sql-server-2008 sql-server-2008-r2


【解决方案1】:

正如其他人所提到的,如果可以选择,Active Directory 和 Windows 身份验证可能更合适。但如果不是……

如果应用程序有一个在更新之前创建连接和事务的中心位置,您可以使用SET CONTEXT_INFO 传递“真实”应用程序用户,同时仍然使用共享 SQL 帐户进行登录。

然后在您的审计触发器中,您可以使用 CONTEXT_INFO() function 再次提取信息

这是at least one commercial auditing tool使用的方法

另请参阅类似的 SO 问题 herehere,其中引用了 context_info 和博客文章 Exploiting Context_Info for Fun and Audit,其中提供了 NHibernate 示例。

在您的问题中提出其他问题:您说它正在使用 sa 用户。也许这只是一个例子,但可能应用程序不应该在服务器上拥有这么多的权限。创建仅具有应用程序使用的特定数据库所需权限的用户。这限制了应用程序中任何未来安全漏洞(例如 SQL 注入)的影响。更进一步,您可能有一个带有只读用户帐户的连接字符串,然后在您创建更新数据的事务时,切换到带有读/写用户帐户的连接字符串。您仍然可以获得连接池的大部分好处,但您可以进一步限制任何应用程序层错误的影响。

【讨论】:

  • 你好史蒂夫,很抱歉回复的延迟,很多tks提到的点真的很有用!关于 sa,在某些情况下,应用程序确实使用了 sa 用户,但人们决定不更改这一点,因为这会给开发团队带来麻烦,不幸的是,这项研究被推迟了……多谢帮助。
猜你喜欢
  • 2011-10-28
  • 2011-09-24
  • 1970-01-01
  • 1970-01-01
  • 2019-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多