在登录时更改连接字符串取决于业务ID

时间:2016-10-05 01:45:47

标签: c# mysql asp.net

我正在努力找到解决以下问题的最佳方法:

我有一个应用程序网站,我想用于所有企业(ASP.NET / C#)。但是,根据登录时的业务名称,我想切换数据库。换句话说,每个企业都有自己的MySQL数据库,结构和程序完全相同,因此它不会与前端代码发生冲突。实现这一目标的最佳方法是什么?我想在web.config中添加不同的连接字符串,并根据业务ID,使用其中一个。但是,我不想在web.config中结束数十个连接字符串。必须是另一种更有效的方式。我也担心安全问题,所以如果我是商业ABC,我想确保我只会看到ABC数据库。任何反馈都会非常感激。

以下是使用登录数据库的示例全局登录:

protected void GlobalLogin(string email, string password)
        {
            int salt = email.Trim().Length;
            string hashedPassword;
            Passwords obj = new Passwords(password, salt);
            hashedPassword = obj.ComputeSaltedHash();
            using (MySqlConnection connection = new MySqlConnection(constr))
            {
                using (MySqlCommand cmd = new MySqlCommand("sp...", connection))
                {
                    cmd.CommandType = System.Data.CommandType.StoredProcedure;
                    cmd.Parameters.Add("@email", MySqlDbType.VarChar, 100).Value = email;
                    cmd.Parameters.Add("@password", MySqlDbType.VarChar, 200).Value = hashedPassword;
                    connection.Open();
                    MySqlDataReader dr = cmd.ExecuteReader();
                    if (dr.HasRows)
                    {
                        dr.Read();
                        {
                          ... set session and go to the homepage
                        }
                    }
                }
            }

1 个答案:

答案 0 :(得分:0)

哦好吧......你肯定需要一个存储连接字符串。配置文件是其中一个选项。您还可以使用单个表创建单个数据库,该表包含每个业务的连接字符串。您的web.config文件需要具有此集中式数据库的连接字符串(您应该使用SQL Server加密来加密其数据)。当用户识别目标业务时(某种程度上......可能来自登录页面),您需要连接到集中式数据库,获取用户业务的连接字符串并动态设置连接字符串。

出于性能原因,您可以将连接字符串缓存在内存中,这样您就不必经常访问集中式数据库。