C# 通过从mysql数据库中获得的排名对用户进行身份验证,而不使用mysql查询
我尝试过使用Mysql查询进行身份验证,但由于服务器的限制,除非手动添加异常,否则不允许进行任何外部连接,但这对于很多用户来说都很繁琐 这是我最初使用的,当身份验证成功时(用户名和密码存在),应使名为“状态”的标签文本显示已连接或未连接:C# 通过从mysql数据库中获得的排名对用户进行身份验证,而不使用mysql查询,c#,mysql,authentication,C#,Mysql,Authentication,我尝试过使用Mysql查询进行身份验证,但由于服务器的限制,除非手动添加异常,否则不允许进行任何外部连接,但这对于很多用户来说都很繁琐 这是我最初使用的,当身份验证成功时(用户名和密码存在),应使名为“状态”的标签文本显示已连接或未连接: public partial class Login : Form { MySqlConnection connect = new MySqlConnection("Server=SERVER;Database=DB;Uid=USER;Pwd=PWD"
public partial class Login : Form
{
MySqlConnection connect = new MySqlConnection("Server=SERVER;Database=DB;Uid=USER;Pwd=PWD");
public Login()
{
InitializeComponent();
}
public string LabelText
{
get
{
return this.status.Text;
}
set
{
this.status.Text = value;
}
}
private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
ProcessStartInfo sInfo = new ProcessStartInfo("http://beatpadpc.com/member.php?action=register");
Process.Start(sInfo);
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
private void textBox2_TextChanged(object sender, EventArgs e)
{
}
public static string MD5Hash(string text)
{
MD5 md5 = new MD5CryptoServiceProvider();
//compute hash from the bytes of text
md5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(text));
//get hash result after compute it
byte[] result = md5.Hash;
StringBuilder strBuilder = new StringBuilder();
for (int i = 0; i < result.Length; i++)
{
//change it into 2 hexadecimal digits
//for each byte
strBuilder.Append(result[i].ToString("x2"));
}
return strBuilder.ToString();
}
private void button1_Click(object sender, EventArgs e)
{
connect.Open();
MySqlCommand cmd = new MySqlCommand("SELECT * FROM mybb_users WHERE username = " + textBox1.Text + " AND (password = " + MD5Hash(textBox2.Text) + " AND usergroup = \"3\" OR usergroup = \"4\" OR usergroup = \"6\" OR usergroup = \"8\")");
MySqlDataReader read = cmd.ExecuteReader();
if (read.Read())
{
status.Text = "Connected";
MessageBox.Show("Success!");
}
else
{
status.Text = "Not Connected";
MessageBox.Show("Error!");
}
}
}
公共部分类登录:表单
{
MySqlConnection=newmysqlconnection(“Server=Server;Database=DB;Uid=USER;Pwd=Pwd”);
公共登录()
{
初始化组件();
}
公共字符串标签文本
{
收到
{
返回此.status.Text;
}
设置
{
this.status.Text=值;
}
}
私有无效链接Label1\u链接已单击(对象发送方,链接LabelLinkClickedEventArgs e)
{
ProcessStartInfo sInfo=新的ProcessStartInfo(“http://beatpadpc.com/member.php?action=register");
进程启动(sInfo);
}
私有void textBox1\u TextChanged(对象发送方,事件参数e)
{
}
私有void textBox2_TextChanged(对象发送方,事件参数e)
{
}
公共静态字符串MD5Hash(字符串文本)
{
MD5 MD5=新的MD5CryptoServiceProvider();
//从文本字节计算哈希
计算哈希(ascienceoding.ASCII.GetBytes(text));
//计算后得到散列结果
字节[]结果=md5.Hash;
StringBuilder strBuilder=新StringBuilder();
for(int i=0;i
那么,有没有一种方法可以验证用户身份,如果凭据正确,并且用户位于用户组3、4、6或8上,则生成status.Text“Connected”或“Not Connected”,但考虑到服务器对外部mysql连接的限制
提前感谢。为什么不在服务器上创建一个Web服务,并使用用户名和编码密码调用其中的函数呢。因此,服务器建立自己的连接,并且只有服务器在MySQL上连接到自己,请查看以下内容:
为什么不在服务器上创建一个Web服务,并使用用户名和编码密码在其上调用一个函数呢。因此,服务器建立自己的连接,并且只有服务器在MySQL上连接到自己,请查看以下内容:
您可能不希望在应用程序中执行查询,而是希望在服务器上执行查询。例如,将登录详细信息发送到服务器,服务器返回登录是否正确。这将防止人们对程序进行反向工程,获得对MySQL数据库凭据的访问,并将所有连接保留在本地主机上。你提到的第3、4、6、8组是什么?您可以连接到MySQL数据库,也可以不连接,您指的是什么样的限制?您可能不希望在应用程序中执行查询,而是在服务器上执行查询。例如,将登录详细信息发送到服务器,服务器返回登录是否正确。这将防止人们对程序进行反向工程,获得对MySQL数据库凭据的访问,并将所有连接保留在本地主机上。你提到的第3、4、6、8组是什么?你可以连接MySQL数据库,也可以不连接,你指的是什么样的限制?你能给我举一个例子来计算我以前的代码吗?非常感谢。可以这样做:一旦完成Web服务,它将在服务器机器上运行,接收参数并向您提供结果的xml,您将不需要再次在客户端上运行查询。您能给我一个算上我以前代码的示例吗?非常感谢。可以这样做:一旦完成Web服务,它将在服务器机器上运行,接收参数并向您提供结果的xml,您将不需要再次在客户端上运行查询。