2011-04-01 81 views
4

我通過.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的搜索引擎尚未提供幫助。有任何想法嗎?

回答

4

the documentation

object.Connect([服務器],[登錄],[密碼])

[...]

使用登錄密碼參數指定用於SQL Server身份驗證的值。要使用Windows身份驗證進行連接,請在調用Connect方法之前將LoginSecure屬性設置爲TRUE。當LoginSecure爲TRUE時,登錄提供的任何值密碼參數將被忽略。

因此,您必須在調用Connect之前將LoginSecure屬性設置爲true。然後,您爲最後兩個參數傳遞的值無關緊要。

+1

感謝您的回答。現在我需要爲SSPI /可信連接/集成安全性術語系列添加另一個術語:LoginSecure – 2011-04-01 20:04:34

2

當然,你可以使用的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

2

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

相關問題