如何使用Windows身份验证sql Server与Mono SQL Client运行在Windows上没有用户名密码在连接字符串?
更多…
>我们必须使用Mono来支持我们应用程序的某些组件的多个平台
这是一个外部限制,我们不能改变
>我们将运行仅在Windows上访问数据库的组件
Mono sql Client的可移植性/操作系统无关功能不添加任何值
也就是说,在非Windows上运行的任何组件将不会访问sql Server数据库
>该过程运行在某些Windows用户(真实用户,服务帐户,无论如何)
嵌入用户名和密码是件坏事
不管你来自哪个角度
那么,如何启用Mono sql Client来读取运行该进程的用户的NT登录令牌并将其传递给sql Server?就像MS .net一样吗?
>有没有一个标志或设置没有很好的文件
>我们需要实现自己的扩展吗?
如果是这样,我们真的是第一个要这样做的人吗?
解决方法
Has a connection string format for NT Authentication:
Server=hostname;Database=databaseName;User
ID=windowsDomain\windowsUserid;Password=windowsPassword;Integrated
Security=SSPI
但是,您当然希望集成安全性= SSPI的简单形式,并让NT身份验证握手使用当前的进程凭据.这里就是这个问题.虽然检索当前进程用户名(身份)是微不足道的,但进程不可能发现自己的凭据密码.当进行NT身份验证时,Windows进程实际上并不执行身份验证,而是要求Locas Security Authority(也称为LSASS.EXE,琐事:不要附加调试器))来验证此过程.这意味着任何想要实现相同的库都必须使用相同的协议,即.请求LSA认证.实际的细节,好奇的是,Using SSPI,InitializeSecurityContext
,AcceptSecurityContext
的顺序如Using SSPI所述.我没有学习sqlClient的单声道源,但我很确定他们使用一些GSS-API库进行身份验证,而不是SSPI .因此,根据定义,他们需要知道密码,因为他们将自己进行Kerberos交换,不要求LSA代表它们执行.
这就是你可以告诉我的一些猜测,更多的猜测在我身边,但我会惊讶地听到一个不同的故事.虽然它可以分叉或修补Mono.Data.Tds和修改认证实现以使用SSPI而不是GSS,这将是一个非便携式Windows特定实现.因为Mono的第一个吸引点是Windows不具体,我猜测没有什么动力.恐怕你要自己去实现它了.