1

我正在构建连接到SQL Server 2005的应用程序。它当前使用Windows身份验证,但我想切换到SQL身份验证(我相信它有时也称为混合身份验证) 。我现在的连接字符串是:SQL Server 2005 SQL身份验证连接字符串

"Data Source=LOCALHOST;Initial Catalog={0};Integrated Security=SSPI" 

这对Windows身份验证,但对于SQL,我想到的是:

"Data Source=LOCALHOST;Initial Catalog={0};user id={1};password={2}" 

这是正确的方法是什么?该代码假定:

  • {0}是数据库的名称
  • {1}是用户名
  • {2}是密码

我切换到SQL身份验证,因为我正在考虑连接到远程服务器上的SQL Server实例 - SQL身份验证是正确的方式来做到这一点,我只需要输入“LOCALHOST”当前的IP?

谢谢!

更新:谢谢你的所有伟大的答案,家伙!他们都非常棒,非常有帮助,我甚至不能决定哪一个奖励“接受的答案”,但我已经投票支持他们,因为他们摇摆不定。再次感谢!

+0

@Joel谢谢您修复标签 – 2009-08-10 18:11:43

回答

6

你走对了,但我认为看看Connection Strings可能比这里的任何答案更有帮助。

+0

对,那是我一直在寻找的网站!我记得有一个很棒的网站有所有这些信息,但不记得它被称为 - 看起来很*欺骗性的名字! – 2009-08-10 18:18:21

1

是的,这将工作完全按照你说的。

“数据源= 11.22.33.44;初始目录= {0};用户ID = {1};密码= {2}”

+0

太好了,谢谢! – 2009-08-10 18:12:21

2

也可以使用流体,而不是 “用户ID” 和pwd代替“密码”:

"Data Source=LOCALHOST;Initial Catalog={0};uid={1};pwd={2}" 

代替LOCALHOST,您可以使用远程机器的IP或DNS名称。请注意,如果远程计算机上存在多个SQL Server实例,则需要在数据源下指定实例 - 例如, “数据源= 11.22.33.44 \ SQLEXPRESS”。

+0

非常感谢。 – 2009-08-10 18:18:54

2

没有为一个应用程序:SqlConnectionStringBuilder

SqlConnectionStringBuilder scsb = new SqlConnectionStringBuilder(); 
scsb.DataSource = "LOCALHOST"; 
scsb.InitialCatalog = ...; 
scsb.IntegratedSecurity = false; 
scsb.UserID = ...; 
scsb.Password = ...; 

SqlConnectionStringBuilder scsb = new SqlConnectionStringBuilder(); 
scsb.DataSource = "LOCALHOST"; 
scsb.InitialCatalog = ...; 
scsb.IntegratedSecurity = true; 

然后,您可以从中提取生成器的ConnectionString属性的连接字符串。这种方法是有效的,你可以稍后修改其他属性,如ConnectTimeoutAsynchronousProcessing,你不必记住字符串语法。

+0

这很好,但它确实使得将配置值提取到配置文件中的过程更加困难。 – sfuqua 2009-08-10 18:44:16

+0

@sfuqua:不是真的,因为SCSB construnctor加入了一个连接字符串。当从配置设置conn字符串构建SCSB时,还会验证过程中的格式。 – 2009-08-10 19:20:49

1

如果在本地服务器和远程服务器之间没有通用的Active Directory域,那么我认为您需要SQL身份验证。但是,如果您的有一个共同的ADS域,那么我推荐使用它–否则您必须为每个人使用一个通用的SQL帐户(然后使用适当的机制来加密密码)或为每个帐户创建单独的SQL帐户用户,从而复制数据。

对初始目录设置要非常小心。如果该值可以通过用户输入提供,那么如果没有适当的验证来防止它,可以用它来尝试攻击另一个数据库。对不起,如果我正在向合唱团传道:-)。

相关问题