我可以爲用戶創建一個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」由用戶提供的是正確的?
我在C#中的解決方案是與羅傑的幫助如下:
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問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。爲什麼你想要手動檢查它? SQL服務器相當不錯,它自己檢查身份驗證 - 所以你試圖達到什麼目的? –
您的每個用戶是否都有SQL登錄名?這不一定是非常常見的用法。它往往是要麼映射域帳戶,要麼你有一個單一的SQL登錄,並且你使用單獨的用戶表通過你的應用程序代碼管理用戶登錄。 – Paddy