gbn*_*gbn 10 sql-server mono windows-authentication
快...
如何使用Windows上运行的Mono SQL客户端对SQL Server进行Windows身份验证,而在连接字符串中没有用户名+密码?
更多...
我们必须使用Mono为我们应用程序的某些组件支持多个平台
这是一个我们无法改变的外部限制
我们将运行仅在Windows上访问数据库的组件
Mono SQL Client的可移植性/操作系统不可用的功能不会增加任何值
也就是说,在非Windows上运行的任何组件都不会访问SQL Server数据库
该过程在一些Windows用户(真实用户,服务帐户,等等)下运行
嵌入用户名和密码是一件坏事,
无论你来自哪个角度
那么,我们如何让Mono SQL Client读取运行该进程的用户的NT Logon Token并将其传递给SQL Server?就像MS .net一样?
是否有标记或设置没有详细记录
我们需要实现自己的扩展吗?
如果是这样,我们真的是第一个想要这样做的人吗?
还有其他5个问题(目前)标记为Mono和SQL-Server:他们没有回答这个问题......
这并不像听起来那么容易实现.我相信你知道,Mono SqlClient支持NT身份验证:
具有NT身份验证的连接字符串格式:Server = hostname; Database = databaseName; User ID = windowsDomain\windowsUserid; Password = windowsPassword; Integrated Security = SSPI
但是,当然,您需要更简单的形式,Integrated Security=SSPI并让NT身份验证握手使用当前进程凭据.这就是问题所在.虽然很容易检索当前进程的用户名(标识),但进程无法发现它自己的凭据密码.在进行NT身份验证时,Windows进程实际上并不进行身份验证,而是要求Locas安全机构(也就是.LSASS.EXE,琐事:不要将调试器附加到它;))来验证此进程.这意味着任何想要实现相同目标的库必须使用相同的协议,即.请LSA对其进行身份验证.实际细节,好奇,是序列中AcquireCredentialHandle,InitializeSecurityContext,AcceptSecurityContext如描述使用SSPI.我没有研究SqlClient的单一来源,但我很确定他们使用一些GSS-API库进行身份验证,而不是 SSPI.因此,根据定义,他们需要知道,因为他们会做的Kerberos交换密码本身,不问LSA做代表他们.
正如你所知道的那样,这是猜测,而且更多的猜测在我身边,但我会惊讶地听到一个不同的故事.虽然可以分叉或修补Mono.Data.Tds并修改身份验证实现以使用SSPI而不是GSS,但根据定义,这将是一个非便携式Windows特定实现.考虑到Mono的#1吸引点不是 Windows特定的,我猜它没有什么动力.我担心你必须自己实施它.
| 归档时间: |
|
| 查看次数: |
1706 次 |
| 最近记录: |