C# 通过从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"

我尝试过使用Mysql查询进行身份验证,但由于服务器的限制,除非手动添加异常,否则不允许进行任何外部连接,但这对于很多用户来说都很繁琐

这是我最初使用的,当身份验证成功时(用户名和密码存在),应使名为“状态”的标签文本显示已连接或未连接:

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,您将不需要再次在客户端上运行查询。