如何使用Windows身份验证连接到SQL Server?

6

我目前使用以下示例通过Go连接到SQL Server:

创建Go应用程序

这是我使用的示例:

    package main

    import (
        _ "github.com/denisenkom/go-mssqldb"
        "database/sql"
        "context"
        "log"
        "fmt"
    )

    // Replace with your own connection parameters
    var server = "localhost"
    var port = 1433
    var user = "sa"
    var password = "your_password"

    var db *sql.DB

    func main() {
        var err error

        // Create connection string
        connString := fmt.Sprintf("server=%s;user id=%s;password=%s;port=%d",
            server, user, password, port)

        // Create connection pool
        db, err = sql.Open("sqlserver", connString)
        if err != nil {
            log.Fatal("Error creating connection pool: " + err.Error())
        }
        log.Printf("Connected!\n")

        // Close the database connection pool after program executes
        defer db.Close()

        SelectVersion()
    }

有没有已知的方法可以使用Windows身份验证连接到SQL Server?我尝试添加"Trusted_Connection=yes"并删除用户名/密码,但未成功。

我在谷歌上搜索过,但没有找到任何具有此选项的Go软件包。


2
哦,我刚刚弄明白了。"trusted_connection=yes" 确实有效。我只是输入错误了。 - Kade Williams
@KadeWilliams 当您通过TCP连接时,无法使用受信任的身份验证,您需要通过命名管道进行连接。尝试从连接字符串中删除端口。如果这样不起作用,请尝试使用server: np:%s来强制进行命名管道连接。 - Bob Vale
@KadeWilliams,请回答您自己的问题,然后将其标记为已接受。 - kostix
@BobVale,实际上通过SPNEGO交换协议协商NTLM应该是可行的,因为它专门设计用于在GSSAPI协商期间协商特定的身份验证机制;因此在Windows上,理论上应支持Kerberos和NTLM。但问题可能出现在许多地方,包括不同计算机上的策略、存在两个版本的NTLM以及其他任何问题。参见此处是我个人曾经处理过的一个示例。 - kostix
@DB2_Philip 感谢您提出这个问题。实际上,在我的情况下,修复方法是在用户名之前添加ActiveDirectory名称。 - Utsav Jha
显示剩余4条评论
3个回答

5

正如我之前发布的那样...

"trusted_connection=yes" 确实有效。我只是输入错误了。


2
对我不起作用。我使用它的方式是:connString := fmt.Sprintf("server=%s;port=%d;trusted_connection=yes;", server, port) - Gaurav Gahlot

1

在我的工作场所中,我们使用的是GORM,它使用go-mssqldb来连接SQL Server。以下连接字符串格式对我们有效:

sqlserver://DATABASE_HOSTNAME:1433?database=DATABASE_NAME&trusted+connection=yes&app+name=APPLICATION_NAME

嗨,我有同样的问题,如果我尝试通过Goland数据源连接它可以工作,但是如果我放置以下dsn:sqlserver://{USERNAME}:{PASSWORD}@HOST:1433?database={DATABASE}&trusted+connection=yes&app+name=jTDS我得到了登录失败的提示,有什么提示吗? - Manuelarte

0

您的客户端设置是正确的。您是否将Windows用户帐户添加到数据库中?我已经多次完成此操作而没有任何问题。请确保您的数据库启用了Windows身份验证,并且该用户具有足够的权限。

使用Windows身份验证连接到SQL Server的步骤


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接