在数据库中存储连接字符串的想法是一个不正常的想法,但请先听我说.我们都知道加密web.config文件中的连接字符串是最佳做法,但是如果我们完全跳过web.config文件呢?
几个月前,我被要求将数据库从一台服务器移动到另一台服务器.这意味着必须更新访问这些不同数据库的每个程序中的连接字符串.这是2年来第3次我不得不将数据库从一台服务器移动到另一台服务器.所以我想到将连接字符串存储在数据库中并为每个GUID分配要通过Web服务访问的GUID.您只需将连接字符串GUID存储在web.config中,并引用连接字符串Web服务,以便可以请求连接字符串,而不是将连接字符串放在web.config中.加密可以在应用程序级别完成,连接字符串只是加密存储在数据库中.
我创建了一个概念证明,它工作正常(它只是在本地内部网上,而不是暴露在互联网上).
这个好处对我来说很明显; 例如能够快速更新连接字符串而无需触摸Web应用程序.这意味着您可以构建一个Web应用程序,仅用于编辑数据库中的连接字符串,DBA可以在其中使用,因此在移动数据库时,他们永远不必打扰程序员.
但好处不是我感兴趣的.我对这里的每个人都想做这样的事情感兴趣吗?
我有一个包含两个项目的.NET解决方案:
"模型"项目包含Linq-to-SQL数据上下文以及一些扩展数据库对象的部分类.
连接字符串在"网站"项目的web.config中定义.
但是,"Models"项目似乎有自己的app.config,其中数据库连接是单独定义的.
这意味着如果连接字符串发生更改,我将不得不更新这两个项目.
有没有办法可以将连接字符串集中到一个地方,并且两个项目仍然使用它?
我们正在将我们的一个站点迁移到ASP.Net.我们不想使用集成安全性,它使用Windows帐户连接到SQL服务器(不会进入原因,它只是不可能).我们创建了一个用户名和密码来连接到SQL Server,并希望使用该用户名和密码,但是,我们也不希望其他开发人员看到这些信息(很容易从web.config中读取)....我知道它可以加密,但它可以很容易地被开发人员解密 - 加密性能也会受到影响.
有没有解决这个问题的方法?
我有一个在本地网络上使用Microsoft SQL 2008 Server的网站。有时,SQL Server计算机会重新启动,因此网站无法连接到数据库。如果机器运行起来,它会迅速作出反应。如果出现故障,则无需等待15秒。3秒还可以。
当数据库不可访问时,我想在网站上表示歉意,并希望尽快做到。但是Connection Timeout=3在连接字符串中设置似乎无效。该页面花了22秒钟等待,然后再SqlException继续SqlConnection.Open();。
它出什么问题了?难道它是一个覆盖了超时的隐藏配置?
目前,我的连接字符串是
Data Source=...;
Initial Catalog=...;
Integrated Security=True;
Connection Timeout=3
Run Code Online (Sandbox Code Playgroud)
如果我将其设置为...;ConnectionTimeout=3(无空格),
System.ArgumentException: Keyword not supported: 'connectiontimeout'.
Run Code Online (Sandbox Code Playgroud)
被抛出(奇怪的是,MSDN文档指示我们可以同时使用两个字符串)。
如何在WinForm应用程序中保护我的ConnectionString?
我有一个要求,要求我使用Spring.net来获取存储在app.config中的连接字符串,然后将检索到的连接字符串注入实例化对象.
我怎么能用Spring.net的xml配置呢?
例如,而不是我的代码执行此操作:
// Spring.net config:
<object name="myService" type="com.acme.MyService, com.acme">
<constructor-arg type="System.String" value="myConnectionName"/>
</object>
// Web.config:
<connectionStrings>
<add name="myConnectionName" connectionString="DB_connectionstring"/>
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)
// Codes:
public class MyService {
public MyService(string connectionName) {
var connectionString = ConfigurationManager.AppSettings[connectionName];
// use connectionString to create a DB connection, etc
}
}
Run Code Online (Sandbox Code Playgroud)
我希望这样:
// Spring.net config:
<object name="myService" type="com.acme.MyService, com.acme">
<constructor-arg type="System.String" ref="retrievedConnectionString"/>
</object>
// How to make a call similar to "ConfigurationManager.AppSettings[connectionName]" and get the connection string from Web.config and put inside "retrievedConnectionString"?
// Web.config: …Run Code Online (Sandbox Code Playgroud) .net configuration configurationmanager connection-string spring.net
我有一个使用LocalDb的WinForms应用程序.当然在我的开发盒上,这很好用.当我将应用程序部署到另一个框时,我收到以下错误消息:
"在建立与SQL Server的连接时出现与网络相关或特定于实例的错误."
我经历了许多#1的帖子了在这个问题上 - 大多数人似乎相关的连接字符串.
其中一个我遇到的问题是,在我的开发中,我创立了一个名叫LocalDB实例.在我的安装目标上,我正在运行LocalDb安装MSI.
对于已安装的实例,有没有办法以编程方式实例化一个命名的LocalDb实例或一种连接到默认LocalDb实例的方法?
是否可以以编程方式实例化一个名为LocalDb的实例?
或者我可以使用(localdb)\ v11.0创建一个可用于打开我的LocalDb数据库的连接字符串;
我也在开发中使用DbContext - 再次在开发框中,LocalDb和DbContext工作正常.使用DbContext和EF是否会影响目标框上的LocalDb连接字符串?
我的web.config文件中当前有连接字符串.
是否可以将其放在单独的文件中并将实体框架指向它.
在本地机器上开发ASP.NET-MVC应用程序期间,我使用它connectionString没有任何问题:
<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\AppDb.mdf;Initial Catalog=AppDb;Integrated Security=True;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" />
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)
在托管服务数据库控制面板中,我可以获得连接到我的MSSQL的连接字符串(我选择了SQL Server 2012数据库,但如果有帮助我可以选择2014).他们说连接字符串是:
"Data Source=SQL5013.myASP.NET;Initial Catalog=DB_9B42A0_baza;User Id=DB_9B42A0_baza_admin;Password=YOUR_DB_PASSWORD;"
Run Code Online (Sandbox Code Playgroud)
有关我的MSSQL数据库的信息:
Server name : SQL5013
Server version : Microsoft SQL Server 2012 - 11.0.5058.0 (X64)
May 14 2014 18:34:29
Standard Edition (64-bit) on Windows NT 6.3 (Build 9600: )
Database name:DB_9B42A0_baza
Server URL:SQL5013.myASP.NET
Login name:DB_9B42A0_baza_admin
Run Code Online (Sandbox Code Playgroud)
我的应用程序是带有Entity Framework 6的ASP.NET-MVC5.1.
这是我尝试过的:
添加了此连接定义 <connectionStrings> </connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=SQL5013.myASP.NET;Initial Catalog=DB_9B42A0_baza;User Id=DB_9B42A0_baza_admin;Password=12345678;" providerName="System.Data.SqlClient" />
Run Code Online (Sandbox Code Playgroud)
访问我的网站时的结果:
Exception Details: System.ArgumentException: Format of the initialization string …Run Code Online (Sandbox Code Playgroud) database sql-server asp.net-mvc connection-string web-config
我需要连接到高可用性(HA)/灾难恢复(DR),也称为HADR,使用来自Linux上的Java的AD帐户启用SQL Server 2012.
integratedSecurity 不是一个选项,因为它在Linux上运行multiSubnetFailover=true)jTDS实际上使用用户名,密码和域连接字符串参数,但超过25%的时间.
所以我似乎坚持使用MS SQL JDBC驱动程序,但我不能只使用用户名/密码凭据,因为我试图在没有Kerberos的情况下解决这个问题.
必须有可能(理论上),因为jTDS实际上可以做到这一点!
我发现驱动程序版本6.0具有属性,authentication=ActiveDirectoryPassword所以它看起来很有前途,但是一个SQL连接字符串就像
jdbc:sqlserver://server:port;database=DB;authentication=ActiveDirectoryPassword;username=name;password=PASSWORD
Run Code Online (Sandbox Code Playgroud)
即使尝试使用DOMAIN\username用户名或用户属性,也无法正常工作.
文档说它的原因
使用Azure AD主体名称和密码
但它会让我的生活变得如此简单.
我得到的错误是
用户''登录失败
并显示空用户,但单步执行反编译代码我可以看到用户名和密码值正被加载到变量中.
对此有何解决方案?我将任何AD用户名/密码连接到纯JAVA的HADR SQL Server 2012.
.net ×2
asp.net ×2
asp.net-mvc ×2
sql-server ×2
c# ×1
database ×1
dbcontext ×1
encryption ×1
java ×1
jdbc ×1
localdb ×1
mssql-jdbc ×1
security ×1
spring.net ×1
web-config ×1
web-services ×1
winforms ×1