我正在努力找到解决以下问题的最佳方法:
我有一个应用程序网站,我想用于所有企业(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
}
}
}
}
答案 0 :(得分:0)
哦好吧......你肯定需要一个存储连接字符串。配置文件是其中一个选项。您还可以使用单个表创建单个数据库,该表包含每个业务的连接字符串。您的web.config文件需要具有此集中式数据库的连接字符串(您应该使用SQL Server加密来加密其数据)。当用户识别目标业务时(某种程度上......可能来自登录页面),您需要连接到集中式数据库,获取用户业务的连接字符串并动态设置连接字符串。
出于性能原因,您可以将连接字符串缓存在内存中,这样您就不必经常访问集中式数据库。