2

大家好,

我正在研究以下案例:

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

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

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

非常感谢!

4

1 回答 1

0

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

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

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

这是至少一种商业审计工具使用的方法

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

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

于 2012-11-03T15:51:15.903 回答