如何使用模拟其他用户的Windows身份验证连接到SQL Server?

时间:2017-05-08 10:35:47

标签: sql-server delphi authentication delphi-10-seattle devart

为了更好地表达自己,我从榜样开始。

在我的客户端服务器应用程序中有一个用户表。

每个用户都映射到一个sql server用户。

数据库中有很多表,无论如何每个用户只能查询一个表。

该表包含以下信息:

  • 数据库的版本(因此客户端应用程序可以检查数据库版本是否与客户端版本匹配)

  • 数据库管理员登录名(简称“sa”)

  • 数据库管理员密码(为了安全起见,这是使用自定义算法加密的 - 请注意我为我的应用程序安装专用的Sql Server实例)

我确保每个用户都可以通过为每个用户执行来查询一个表:

GRANT SELECT ON ConnectionTable TO LoginName

所以完整的流程是:

1)用户插入用户名/密码

2)客户端应用程序从ConnectionTable

中检索所有信息

3)客户端应用程序解密sa密码

4)客户端应用程序以sa身份登录,因此所有表都可见且可编辑

现在这就是我的遗产,我无法改变它。

不知何故,这个“自定义登录技巧”已经完成,以避免在客户端上的某处写入sa密码,我知道的许多客户端服务器软件实际上都使用sa来连接,而用户/密码只是简单的两个字段{ {1}}表,但真实的连接字符串以某种方式(具有一定程度的安全性)保存在每个客户端的文件中;在我的情况下,“连接字符串”存储在数据库中,以便用户登录到数据库(即使对于具有受限访问权限的用户),他也可以获得成功登录所需的全部内容。

由于我以混合模式安装Sql Server,因此我也支持Windows AU身份验证。

因此,在登录时,用户可以选择SQl服务器和Windows身份验证,就像连接到SS Management Studio时一样。

我现在想要实现的是以另一个用户身份登录。

我希望用户检查“Windows身份验证”,但他/她仍然可以输入用户名和密码。

我的应用程序是使用SDAC components在Delphi中编写的。据我所知,SDAC不允许执行我需要做的事情,但我只能使用其他DAC(例如Firedac)更改登录部分。我的目标是以另一个Windows用户身份登录。

最终目标是查询USERS,以便我可以检索加密的sa密码并登录。

所以我的问题是: 通过设置与当前登录用户不同的windos用户,可以(在Delphi Seattle VCL应用程序中)登录到Sql Server数据库吗?

更新

为了更好地解释我的需要,我描述了产生我的要求的真实场景。 我创建了一个Web应用程序(使用VCL for web),它使用与我的客户端服务器应用程序相同的身份验证方法。 想象一下,我的用户是MyDomain \ MyUser,当我在局域网中时,我将使用Windows身份验证登录,但是当我登录时,我想通过提供密码登录MyDomain \ MyUser。事实就是如此,事实上我不需要模仿其他用户,我只想在我没有登录局域网中的Windows PC时登录我的用户。 所以somohow在我的应用程序的登录屏幕上我想选择Auth:Win / SQL,如果选择Win,我想传递实际的用户名和密码登录。 我希望这更能说明情况。

此外,我还在云中托管我的应用程序,在这种情况下,所有用户都是我为管理目的创建的域的WIndows身份验证用户,每个用户都需要提供用户名和密码才能登录。

我的请求来自于我总是假设Winows身份验证= LDAP,因此在LDAP中可以指定用户和密码,而在sql server中,它看起来以某种方式预先定义用户(和=登录)用户)在Windows身份验证的情况下。

0 个答案:

没有答案