为了更好地表达自己,我从榜样开始。
在我的客户端服务器应用程序中有一个用户表。
每个用户都映射到一个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身份验证的情况下。