每个连接用户的设置

时间:2014-08-07 08:21:18

标签: sql-server session variables sql-server-2012

我有一个Windows窗体应用程序,我将从MySql迁移到MsSql。在MySql中,我们为每个用户使用数据库用户。因此,每个用户都使用自己的帐户连接到数据库。这不是我们想要的,因为将来我们希望应用程序集对世界开放,数据库用户不是愿望清单上的东西。所以这就消失了。

问题是许多视图使用一个函数,该函数使用CURRENT_USER()来提供对记录的访问(因为用户是部门的一部分,不允许查看所有部门的所有记录)。

在MsSql中,我们只使用一种类型的连接字符串,但每个应用程序都直接连接数据库。在MSSQL中是否可以为每个连接存储变量,以便我可以在创建连接后通过我设置的变量在视图中识别用户?

所以它会是这样的:

  1. 启动申请
  2. 用户登录
  3. 应用程序使用mssql
  4. 创建连接
  5. 应用程序在sql-server上设置变量
  6. 用户打开带有视图的屏幕
  7. SQL Server使用之前设置过的变量返回视图,仅返回允许查看的记录。
  8. 所以每个用户都必须拥有它自己的变量。这可能吗?

    应用程序是使用NET和iBatis构建的。不是最好的组合,但iBatis需要进行大量集成才能完全融入其中。

1 个答案:

答案 0 :(得分:2)

虽然这可能会或可能不会,但它绝对不是正确的方法。正如您所说,您使用单个连接字符串,并且可能使用连接池来访问数据库。由于您希望用户能够在池中选择任何可用的连接来进行查询,因此您不希望将任何用户状态(或任何状态)与连接绑定。

当您向全世界开放时,您不希望应用程序直接连接到数据库。相反,您应该实现将处理身份验证和访问权限的中间件,并且只返回用户可以访问的数据库中的数据。而不是

user application <- iBatis -> MSSQL
你将拥有:

user application <- HTTP/something else -> API <- iBatis -> MSSQL

这也是网站采用的方法。此外,您还可以向API添加缓存,连接池等功能,从而可以支持更多用户。