【问题标题】:Is it possible to use a trusted connection (SSPI) with the SQLDMO API?是否可以通过 SQLDMO API 使用可信连接 (SSPI)?
【发布时间】:2011-07-27 20:26:09
【问题描述】:

我通过 .NET 使用 DMO API 来为 SQL Server 2000 代理上的作业调度功能提供替代接口。工作代码如下所示:

using SQLDMO;

internal class TestDmo {
    public void StartJob() {
        SQLServerClass sqlServer = new SQLServerClass();
        sqlServer.Connect("MyServerName", "sql_user_id", "p@ssword"); // no trusted/SSPI overload?

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

            job.Start(null);
        }
    }
}

一切都以上面列出的形式工作(提供 uid/pwd 的 SQL Server 身份验证),但我还想提供一个选项以作为受信任用户进行身份验证(又名 SSPI,受信任的连接)

这可以在 DMO API 中实现吗?如果有怎么办?

注意:SQLServerClass.Connect 方法似乎没有任何重载,我已经尝试为用户 ID 和密码传递空值,但无济于事,谷歌还没有提供帮助。有什么想法吗?

【问题讨论】:

    标签: c# .net sql-server sql-server-2000 sqldmo


    【解决方案1】:

    来自the documentation

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

    [...]

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

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

    【讨论】:

    • 感谢您的回答。现在我需要在 SSPI/可信连接/集成安全系列术语中添加另一个术语:LoginSecure
    【解决方案2】:

    设置SQLServerClass.LoginSecure = true并将用户名和密码留空。

    查看here 了解更多信息。不过,我刚刚注意到 LoginSecure 已被弃用。显然,SQL-DMO 已被 SMO 取代。

    【讨论】:

    • SMO 是更新、更好、更流畅的 API,但它对 MS SQL 2k 的向后兼容性有些问题。我需要使用 DMO,以免给系统带来不同的兼容性设置等负担。
    • @Paul Sasik:很公平。 :-)
    • +1 感谢您的出色回答。复选标记虽然基于时间戳,但会变成 Heinzi。该答案提前 2 或 3 分钟到达。
    • @Paul Sasik:好吧,如果您正在查看时间戳,那就是它:Heinzi:1-April 17:17:46; CesarGon:1-4月17:14:55;西蒙·穆里埃:17:14:14。西蒙是第一个,然后是我,海因齐是最后一个。 :-)
    【解决方案3】:

    当然,您可以使用 LoginSecure 属性:

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

    (实际上,我不记得你是否必须传递 null 或空字符串......)

    【讨论】:

    • 不管你是让它们为空还是传递空字符串。设置 LoginSecure = true 后,用户名和密码值将被忽略。
    • +1 感谢您的出色回答。复选标记虽然基于时间戳,但会变成 Heinzi。该答案提前 2 或 3 分钟到达。
    • @Paul Sasik - 实际上,我认为你错了,我的答案是 17:14:14 和 Heinzi 的 17:17:46,但没有难过的感觉。
    猜你喜欢
    • 2012-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-14
    • 1970-01-01
    • 1970-01-01
    • 2020-06-16
    • 2012-02-08
    相关资源
    最近更新 更多