Я пытаюсь подключиться к Azure SQL, используя локальную учетную запись AD, которая синхронизируется с Azure AD.
Я могу подключиться с помощью SSMS, когда работаю в качестве другой пользователь, но программно это не работает.
Это локальная учетная запись AD, и да, если мы используем ActiveDirectoryIntegrated, он переопределяет все указанные нами учетные данные и использует AD на локальном компьютере. идентификатор для входа в систему (который в конечном итоге терпит неудачу, поскольку доступ не предоставляется). Нет ли способа пройти программную аутентификацию с использованием пользовательских учетных данных? Недавно команда db сообщила нам, что мы должны использовать учетную запись AD для аутентификации на SQL Server. Последние 10 лет мы используем SQL-сервер, и это изменение появилось только что, поэтому в данный момент мы проводим POC. Я не могу найти документацию MS, в которой говорится, что мы не можем передавать пользовательские учетные данные.
Кроме того, поскольку это будет веб-приложение, размещенное на IIS, есть ли способ, которым мы можем это сделать? делать руны? Если да, то в чем заключаются проблемы?
Проверил несколько строк подключения, но ни одна не работает. Я получаю сообщение об ошибке: «Login failed for user .’
public static void testrun()
{
DataTable dt = new DataTable();
try
{
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
builder.DataSource = "AZURESQLDEV";
builder.InitialCatalog = "DataBaseName";
builder.Authentication = SqlAuthenticationMethod.ActiveDirectoryPassword;
builder.UserID = "DEVUser";
builder.Password = "DEVPass";
builder.TrustServerCertificate = true;
builder.PersistSecurityInfo = false;
//ServicePointManager.ServerCertificateValidationCallback = ValidateServerCertificate;
using (SqlConnection connection = new SqlConnection(builder.ConnectionString))
{
connection.Open();
string strQuery = "SELECT * FROM [FRU].[FRU_BU_PLANT_PRECEDENCE_INFO]";
SqlCommand command = new SqlCommand(strQuery, connection);
SqlDataAdapter adapter = new SqlDataAdapter(command);
adapter.Fill(dt);
}
}
catch (Exception ex)
{
}
}
Также попыталась явно аутентифицировать пользователя и попытаться войти в систему, используя приведенный ниже код.
string username = "DEVUser";
string password = "DEVPass";
try
{
if (AuthenticateUser(username, password))
{
string connectionString = "Data Source=DCA-DEV-123;Initial Catalog=DBATOOLS;User ID=" + username + ";Password=" + password;
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
// Perform SQL operations using the connection
connection.Close();
}
}
else
{
Console.WriteLine("Invalid username or password.");
}
}
catch (Exception ex)
{
throw;
}
private static bool AuthenticateUser(string username, string password)
{
using (PrincipalContext context = new PrincipalContext(ContextType.Domain))
{
return context.ValidateCredentials(username, password);
}
}
Ошибка: не удалось войти в систему для пользователя «DEVUser».
Трассировка стека:
at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, DbConnectionPool pool, String accessToken, Boolean applyTransientFaultHandling, SqlAuthenticationProviderManager sqlAuthProviderManager)
at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)
at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool pool, DbConnection owningObject, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions)
at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
at System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry)
at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
at System.Data.SqlClient.SqlConnection.Open()
at TesSP.Program.Main(String[] args) in C:\TesSP\Program.cs:line 36
Подробнее здесь: https://stackoverflow.com/questions/787 ... redentials