Как отличить пользователя SQL от пользователя домена Windows?

#sql-server #go

#sql-server #Вперед

Вопрос:

Я создаю соединение с базой данных SQL Server.

 package main

import (
    "database/sql"
    "fmt"

    _ "github.com/denisenkom/go-mssqldb"
)

func main() {

    host := "10.50.30.20"
    user := "admin"  //"UDA\admin"   
    pwd := "password"
    port := 1433
    defaultDBName := "master"
    defaultDriverName := "mssql"
    testConnectionQuery := "SELECT name FROM users WHERE age=42;"

    connString := fmt.Sprintf("server=%v;user id=%v;password=%v;port=%v;database=%v;",
        host, user, pwd, port, defaultDBName)
    conn, err := sql.Open(defaultDriverName, connString)
    if err != nil {
        fmt.Printf("Failed to open sql server connection, err: %v", err)

    }
    defer conn.Close()
    err = conn.Ping()
    if err != nil {
        fmt.Printf("Failed to connect to server connection, err: %v", err)
    }
    _, queryErr := conn.Query(testConnectionQuery)
    if queryErr != nil {
        fmt.Printf("Error: %v", queryErr)
    }

}
  

Это работает нормально.

Моя проблема в том, что пользователь может быть пользователем SQL или пользователем домена. Как я могу отличить их друг от друга? потому что прямо сейчас они оба могут подключаться.

Я хочу разрешить пользователю SQL подключаться и запретить пользователю домена подключаться.

P.S Я не хочу отключать пользователя домена, я просто не хочу, чтобы пользователь домена подключался через этот код.

P.P.S Я могу подключиться к БД с именем пользователя, которое является типом WINDOWS_LOGIN. Я называл это пользователем домена. Прошу прощения, если это неправильный термин. Я имел в виду <DomainName><UserName> - Could be an MSA or AD user account.

Комментарии:

1. Строки подключения для пользователя Windows и пользователя проверки подлинности SQL различны. Если вы используете пользователя и пароль в строке подключения, то метод проверки подлинности может использовать только проверку подлинности SQL; Проверка подлинности Windows тоже не используется. Попытка подключиться как пользователь Windows с именем пользователя и паролем завершится неудачей, поскольку он попытается пройти аутентификацию на несуществующем пользователе SQL.

2. Также обратите внимание, что вы не можете отключить проверку подлинности Windows на SQL Server. SQL Server имеет только 2 режима проверки подлинности; Проверка подлинности Windows или смешанная проверка подлинности. В обоих окнах включены учетные данные. Однако, если вы не хотите, чтобы конкретный пользователь Windows мог проходить проверку подлинности с помощью доверенного соединения, просто убедитесь, что вы не создаете пользователя или группы, к которым они принадлежат, LOGIN в экземпляре.

3. @Larnu Я могу подключиться к БД с именем пользователя, которое является типом WINDOWS_LOGIN. Я называл это пользователем домена. Прошу прощения, если это неправильный термин. То, на что я ссылался, было <DomainName><UserName> - Could be an MSA or AD user account.

4. » Я просто не хочу, чтобы пользователь домена подключался через этот код» Опять же, из моего первоначального комментария «Строки подключения для пользователя Windows и пользователя проверки подлинности SQL разные. Если вы используете пользователя и пароль в строке подключения, то метод проверки подлинности может использовать только проверку подлинности SQL» Приведенная выше строка подключения не может использовать проверку подлинности Windows.