美好的一天,
我正在研究以下案例:
场景:应用程序使用通用“SA”用户而不是域用户连接到生产数据库(SQL Server 2008)。这使得跟踪\ logs \ organization更加困难,因为所有内容都被标记为由SA用户完成!
注意:在应用程序中使用域用户/密码,通用帐户仅与数据库有关。
问题:在这种情况下,最好的做法是什么?每个用户都应该拥有一个帐户来登录数据库? (使用Windows身份验证的sql)有+ - 500个用户是关于数据库性能的问题吗?或指示一般帐户?
非常感谢!
答案 0 :(得分:0)
正如其他人所提到的,如果这是一个选项,Active Directory和Windows身份验证可能更合适。但如果不是......
如果应用程序有一个创建连接的中心位置&更新之前的事务,您可以使用SET CONTEXT_INFO传递“真实”应用程序用户,同时仍然使用共享SQL帐户进行登录。
然后在您的审核触发器中,您可以使用CONTEXT_INFO() function
再次取出信息这是at least one commercial auditing tool
使用的方法另请参阅提及context_info的类似SO问题here和here以及提供NHibernate示例的博文Exploiting Context_Info for Fun and Audit。
你问题中的其他东西:你说它正在使用sa用户。也许这只是一个例子,但可能应用程序不应该在服务器上拥有这么多权限。创建仅具有应用程序使用的特定数据库所需权限的用户。这限制了应用程序中任何未来安全漏洞(例如SQL注入)的影响。更进一步,您可能有一个带有只读用户帐户的连接字符串,然后在创建事务以更新数据的位置,切换到具有读/写用户帐户的连接字符串。您仍然可以获得连接池的大部分好处,但是您进一步限制了任何应用程序层错误的影响。