0

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

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

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

谢谢您的帮助


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

(我只是在学习英语。抱歉语法不好)

4

4 回答 4

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" />
于 2011-09-14T20:52:05.380 回答
1

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

  • 在您身边设置网络服务。
  • 您部署的应用程序使用客户代码调用您的 Web 服务。
  • Web 服务验证客户代码,并返回一个有效的 conn 字符串。
  • 客户的应用程序将 conn 字符串保存在内存中(会话、缓存、whathaveyou)。

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

于 2011-09-14T21:09:16.203 回答
0

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

http://enzosqlshard.codeplex.com/

于 2011-09-14T21:01:33.647 回答
0

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

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

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

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

于 2011-09-15T07:03:09.493 回答