0

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

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

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

  • 为每个应用程序用户创建不同的登录名和数据库用户是不好的做法吗?这意味着每个 DB 有超过 1000 个用户,跨越多达 80 个数据库(每个登录的创建将通过 T-SQL 处理,而不是手动处理)
  • 在数据库中的视图中可以通过哪些其他方式识别用户?
  • 我们查看了更改连接字符串以在 Workstation ID 中包含用户 ID,我们可以使用 SELECT HOST_NAME() 来获取 ID,但这似乎是对 Workstation ID 的滥用。

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

4

3 回答 3

0

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

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

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

于 2012-08-28T07:47:17.827 回答
0

您是否考虑过使用 Windows 身份验证来代替 SQL 身份验证?这至少会减少需要管理的登录和用户的数量。

于 2012-08-22T20:22:01.817 回答
0

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

出于性能和安全原因,您可以更改为不将数据与审计元素混合。在您的 sql server 上使用 profiler,profiler 中包含有关(应用程序、用户和主机)的信息。因此,您可以通过审计或某些数据库对象的自定义触发器轻松获取此类信息。

您的应用程序还可以拥有自己的用户表并与所有用户共享相同的连接字符串,或者仅授予具有 Windows 身份验证类型的用户公共权限。并在存储过程中使用作为命令运行(在 db 中作为另一个用户运行)。因此,您可以登录任何用户并赋予他们最小的权限。

这是我在这里的第一篇文章,我实际上是在学习英语,哈哈。

于 2012-08-22T20:27:11.810 回答