я могу создать учетную запись SQL входа для пользователя следующим образом:Проверить учетные данные входа SQL
CREATE LOGIN [myusername] WITH PASSWORD = N'mypassword', CHECK_POLICY= OFF;
можно проверить, например, если «MyUserName» существует:
SELECT * FROM sys.server_principals WHERE name = N'myusername'
Но как я могу проверить, если «MyUserName» и пароль «wrong_password» поставляется пользователем, правильно?
Мое решение в С # с помощью Роджера следующим образом:
private static bool SqlLoginExists(string username)
{
SqlConnection connection = new SqlConnection();
connection.ConnectionString = "Data Source=.;" + "Integrated Security=SSPI;";
connection.Open();
string sql_command = "SELECT count(*) FROM sys.server_principals WHERE name = N'" + username + "'";
using (SqlCommand command = new SqlCommand(sql_command, connection))
{
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
if (reader.GetValue(0).ToString() == "1")
{
return true;
}
}
}
}
return false;
}
public static bool CheckSQLCredentialsIfLoginExists(string username, string password)
{
bool SqlUserExists = SqlLoginExists(username);
if (SqlUserExists)
{
SqlConnection connection = new SqlConnection();
connection.ConnectionString = "Data Source=.;" + "User id=" + username+";Password=" + password +";";
try
{
connection.Open();
return true;
}
catch (SqlException ex)
{
connection.Dispose();
return false;
}
}
else
{
return true; // it is not a problem for me if account does not exist (as it will be created later), I am only worried about the case when the credentials are wrong
}
}
Если бы они не были, пользователь не смог бы войти в систему в первую очередь. Вы имеете в виду «как мне аутентифицировать пользователя, который не вошел в систему»? Потому что, если это ваш вопрос, вы, вероятно, решаете неправильную проблему - чего вы пытаетесь достичь? Возможно, вам нужно что-то сделать от имени пользователя? –
Похож на [XY Problem] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). Почему вы хотите проверить это вручную? SQL-сервер довольно хорошо проверяет аутентификацию сам по себе - так что именно вы пытаетесь достичь? –
Будет ли у каждого вашего пользователя вход в систему SQL? Это не обязательно будет очень распространенным использованием. Было бы, как правило, либо отображать учетные записи домена, либо у вас есть один логин SQL, и вы управляете входами пользователей через свой код приложения с помощью отдельной таблицы пользователей. – Paddy