我有一个Windows窗体应用程序,我将从MySql迁移到MsSql。在MySql中,我们为每个用户使用数据库用户。因此,每个用户都使用自己的帐户连接到数据库。这不是我们想要的,因为将来我们希望应用程序集对世界开放,数据库用户不是愿望清单上的东西。所以这就消失了。
问题是许多视图使用一个函数,该函数使用CURRENT_USER()来提供对记录的访问(因为用户是部门的一部分,不允许查看所有部门的所有记录)。
在MsSql中,我们只使用一种类型的连接字符串,但每个应用程序都直接连接数据库。在MSSQL中是否可以为每个连接存储变量,以便我可以在创建连接后通过我设置的变量在视图中识别用户?
所以它会是这样的:
所以每个用户都必须拥有它自己的变量。这可能吗?
应用程序是使用NET和iBatis构建的。不是最好的组合,但iBatis需要进行大量集成才能完全融入其中。
答案 0 :(得分:2)
虽然这可能会或可能不会,但它绝对不是正确的方法。正如您所说,您使用单个连接字符串,并且可能使用连接池来访问数据库。由于您希望用户能够在池中选择任何可用的连接来进行查询,因此您不希望将任何用户状态(或任何状态)与连接绑定。
当您向全世界开放时,您不希望应用程序直接连接到数据库。相反,您应该实现将处理身份验证和访问权限的中间件,并且只返回用户可以访问的数据库中的数据。而不是
user application <- iBatis -> MSSQL
你将拥有:
user application <- HTTP/something else -> API <- iBatis -> MSSQL
这也是网站采用的方法。此外,您还可以向API添加缓存,连接池等功能,从而可以支持更多用户。