我目前正在开发基于ASP.NET MVC3,SQL Server 2008和EF的应用程序,首先是数据库。
我的应用程序要求每个用户拥有自己的SQL Server数据库。这些数据库都具有相同的结构。
我的客户被标识为customercode
,例如fgt
。此代码在网址中提供。
我需要知道如何从url中检索customercode
并相应地设置连接字符串。
感谢您的帮助
我的想法是,一旦从URL检索到客户代码,就连接到数据库,然后提示用户输入访问数据的用户名和密码。 但是,是的,创建一个存储每个客户的连接字符串的数据库是个好主意。 任何人都可以编写我需要的代码吗?我是asp新手。我来自php。
(我刚刚学习英语。抱歉语法不好)
答案 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)
建议您将客户及其连接字符串列入白名单。
这将允许您确保conn字符串始终对给定的客户代码有效。出于任何原因(非付款等),您可以对数据库进行精细控制。由于您构建的任何缓存,您的服务都会受到一些点击。
答案 2 :(得分:0)
也许sqlshard可以帮助您使用多个数据库?
答案 3 :(得分:0)
听起来很不安全的解决方案。如果客户在URL中放入另一个客户代码怎么办?如果您没有任何具有客户权限的中央数据库,客户是否可以访问该代码?
您需要身份验证和一些中央存储(附加数据库),您将验证访问该应用程序的用户是否具有对提供的URL的访问权限。它还将验证此类数据库是否存在。接下来,您只需要SqlConnectionStringBuilder
并使用客户代码作为数据库名称(或名称的一部分)。出于安全原因,每个数据库应该具有单独的SQL帐户,该帐户具有仅从该数据库读取的权限。此数据库帐户也可以与加密密码的中央存储一起存储。
如果您还希望动态添加或删除客户代码=数据库,则可能会有其他复杂性。这将需要高特权帐户来管理登录,帐户,数据库等。
因为您正在询问如何获得Uri的一部分,所以看起来您几乎没有使用过ASP.NET MVC的经验,也许还有与之相关的一切。你绝对应该让任何更熟练的同事或老板审查你的架构,因为在这一点上看起来你会遇到严重的问题,你可能会开发出非常不安全的应用程序,这会严重损害你公司和客户的声誉。