每个应用程序用户登录SQL Server

时间:2012-08-22 20:16:11

标签: sql-server crystal-reports

我正在寻找在SQL Server 2008中唯一标识应用程序用户的不同方法。

为这个问题提供一些支持: 我使用的ASP.NET 4 Web应用程序使用SQL Server 2008数据库,从应用程序到数据库的所有连接都有一个SQL Server登录和数据库用户。

我们正在使用Crystal Reports开发报告解决方案,用户可以通过该应用程序编写和执行自己的报告。水晶报告只能从Views返回数据。每个应用程序用户都有自己唯一的登录服务器。 然后,View使用SELECT SYSTEM_USER()查找登录用户并限制从视图返回的数据。

  • 为每个应用程序用户创建一个独特的登录和数据库用户是不好的做法吗?这将意味着>每个数据库1000个用户,最多80个数据库(创建 每个登录都将通过T-SQL处理,而不是手动处理)
  • 在数据库的视图中可以通过哪些其他方式识别用户?
  • 我们考虑更改连接字符串以在工作站ID中包含用户ID,我们可以使用SELECT HOST_NAME()来获取ID,但这似乎是滥用工作站ID。

有关如何唯一识别用户的任何其他建议将不胜感激。 非常感谢

3 个答案:

答案 0 :(得分:0)

您是否考虑使用Windows身份验证而不是SQL身份验证?这至少会减少登录次数;需要管理的用户。

答案 1 :(得分:0)

当您使用msql 2008时,Y可以使用外部数据库,文件或其他资源来存储用户对任何数据的访问权限。 http://msdn.microsoft.com/en-us/library/dd392015%28v=sql.100%29.aspx

出于性能和安全原因,为了不将数据与审计元素混合而进行更改。 在sql server和profiler中使用profiler是有关(aplication,user和host)的信息。因此,通过审计或某些数据库对象的自定义触发器可以轻松获得这种信息。

您的应用程序也可以拥有自己的用户表,并且也可以为所有用户共享相同的连接字符串,或者为用户提供仅使用Windows auth类型的公共权限。并在存储过程中使用作为命令运行(在db中作为另一个用户运行)。 因此,您可以记录任何用户并给予他们最小的权利。

我的第一个帖子在这里,我实际上学习英语大声笑。

答案 2 :(得分:0)

我们提出了两种解决方案:

  1. 在执行Crystal报表之前,在.Net中我们可以提取SQL报表(和子报表)将生成,执行SQL并将结果放入数据集并从数据集生成报表。这样做的好处是,因为我们拥有SQL,所以在SQL执行之前,我们可以向SQL服务器会话提供用户信息,这些信息可用于在执行SQL时识别用户。

  2. 具有可以动态分配给应用程序用户的有限数量的SQL Server用户登录。我们将有一个表,它将在运行Crystal报表之前将SQL Server登录映射到应用程序用户。当他们的查询完成执行时,将释放Login。显然这意味着在繁忙时间我们可能会用完登录,但可以根据使用情况添加更多。