是否可以对SQLDMO API使用可信连接(SSPI)?

问题描述:

我通过.NET使用DMO API为SQL Server 2000代理上的作业调度功能提供备用接口。工作代码看起来是这样的:是否可以对SQLDMO API使用可信连接(SSPI)?

using SQLDMO; 

internal class TestDmo { 
    public void StartJob() { 
     SQLServerClass sqlServer = new SQLServerClass(); 
     sqlServer.Connect("MyServerName", "sql_user_id", "[email protected]"); // no trusted/SSPI overload? 

     foreach (Job job in sqlServer.JobServer.Jobs) { 
      if (!job.Name.Equals("MyJob")) continue; 

      job.Start(null); 
     } 
    } 
} 

一切正常,在上面列出的形式(与UID /密码提供SQL Server身份验证),但我也想提供一个选项,作为一个值得信赖的用户进行身份验证(又名SSPI,可信连接)

这可能在DMO API中吗?如果是这样如何?

注意:SQLServerClass.Connect方法似乎没有任何重载,我已经尝试为用户标识和密码传递null值,但无济于事,Google的搜索引擎尚未提供帮助。有任何想法吗?

the documentation

object.Connect([服务器],[登录],[密码])

[...]

使用登录密码参数指定用于SQL Server身份验证的值。要使用Windows身份验证进行连接,请在调用Connect方法之前将LoginSecure属性设置为TRUE。当LoginSecure为TRUE时,登录提供的任何值密码参数将被忽略。

因此,您必须在调用Connect之前将LoginSecure属性设置为true。然后,您为最后两个参数传递的值无关紧要。

+1

感谢您的回答。现在我需要为SSPI /可信连接/集成安全性术语系列添加另一个术语:LoginSecure – 2011-04-01 20:04:34

当然,你可以使用的LoginSecure属性:

SQLServerClass sqlServer = new SQLServerClass(); 
sqlServer.LoginSecure = true; 
sqlServer.Connect("MyServerName", null, null); 

(实际上,我不记得,如果你必须考绩null或空字符串...)

+0

不要介意你是否让它们为空或传递空字符串。一旦设置LoginSecure = true,用户名和密码值将被忽略。 – CesarGon 2011-04-01 17:20:30

+0

+1感谢您的好评。虽然根据时间戳,但选中标记仍然是Heinzi。答案提前2到3分钟。 – 2011-04-01 20:02:25

+1

@Paul Sasik - 事实上,我认为你错了,我的回答是17:14:14,Heinzi的17:17:46,但没有感情。 – 2011-04-02 07:38:12

SQLServerClass.LoginSecure = true,并留下用户名和密码为空。

看一看here了解更多信息。但我注意到LoginSecure已被弃用。显然,SQL-DMO已被SMO所取代。

+0

SMO是更新,更好,更清晰的API,但它与MS SQL 2k的向后兼容性有些问题。我需要使用DMO,以免因不同的兼容性设置等而给系统造成负担。 – 2011-04-01 17:28:20

+0

@Paul Sasik:够了。 :-) – CesarGon 2011-04-01 17:29:51

+0

+1感谢您的好评。虽然根据时间戳,但选中标记仍然是Heinzi。答案提前2到3分钟。 – 2011-04-01 20:02:01