如何连接到不同的数据库?

时间:2011-09-14 20:44:20

标签: c# entity-framework asp.net-mvc-3 multiple-databases

我目前正在开发基于ASP.NET MVC3,SQL Server 2008和EF的应用程序,首先是数据库。

我的应用程序要求每个用户拥有自己的SQL Server数据库。这些数据库都具有相同的结构。

我的客户被标识为customercode,例如fgt。此代码在网址中提供。 我需要知道如何从url中检索customercode并相应地设置连接字符串。

感谢您的帮助


我的想法是,一旦从URL检索到客户代码,就连接到数据库,然后提示用户输入访问数据的用户名和密码。 但是,是的,创建一个存储每个客户的连接字符串的数据库是个好主意。 任何人都可以编写我需要的代码吗?我是asp新手。我来自php。

(我刚刚学习英语。抱歉语法不好)

4 个答案:

答案 0 :(得分:1)

尝试这样的事情开始:

string customerCode = Request.QueryString["cust"].ToString();

string myNewConnString = ConfigurationManager
                           .ConnectionStrings["MyDatabase"]
                           .ConnectionString
                           .Replace("[placeholder]", customerCode);

.config中的连接字符串就是这样的。请注意,我假设您将放置一个要替换的令牌([placeholder])。

 <add name="MyDatabase" 
      connectionString="Data Source=192.168.0.1;Initial Catalog=[placeholder];User ID=foo;Password=bar"     
      providerName="System.Data.SqlClient" />

答案 1 :(得分:1)

建议您将客户及其连接字符串列入白名单。

  • 为您设置网络服务。
  • 您部署的应用程序使用客户代码调用您的Web服务。
  • Web服务验证客户代码,并返回有效的连接字符串。
  • customer's app将conn字符串保存在内存中(session,cache,whathaveyou)。

这将允许您确保conn字符串始终对给定的客户代码有效。出于任何原因(非付款等),您可以对数据库进行精细控制。由于您构建的任何缓存,您的服务都会受到一些点击。

答案 2 :(得分:0)

也许sqlshard可以帮助您使用多个数据库?

http://enzosqlshard.codeplex.com/

答案 3 :(得分:0)

听起来很不安全的解决方案。如果客户在URL中放入另一个客户代码怎么办?如果您没有任何具有客户权限的中央数据库,客户是否可以访问该代码?

您需要身份验证和一些中央存储(附加数据库),您将验证访问该应用程序的用户是否具有对提供的URL的访问权限。它还将验证此类数据库是否存在。接下来,您只需要SqlConnectionStringBuilder并使用客户代码作为数据库名称(或名称的一部分)。出于安全原因,每个数据库应该具有单独的SQL帐户,该帐户具有仅从该数据库读取的权限。此数据库帐户也可以与加密密码的中央存储一起存储。

如果您还希望动态添加或删除客户代码=数据库,则可能会有其他复杂性。这将需要高特权帐户来管理登录,帐户,数据库等。

因为您正在询问如何获得Uri的一部分,所以看起来您几乎没有使用过ASP.NET MVC的经验,也许还有与之相关的一切。你绝对应该让任何更熟练的同事或老板审查你的架构,因为在这一点上看起来你会遇到严重的问题,你可能会开发出非常不安全的应用程序,这会严重损害你公司和客户的声誉。