SQL Server 2005 SQL身份验证连接字符串

时间:2009-08-10 18:08:39

标签: c# sql-server sql-server-2005 authentication connection-string

我正在构建一个连接到SQL Server 2005的应用程序。它目前使用Windows身份验证,但我想切换到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身份验证是正确的方法吗?我只需要输入IP“LOCALHOST”目前是?

谢谢!

更新:谢谢你们所有的好答案,伙计们!所有这些都很精彩,非常有帮助,我甚至无法决定哪一个给予“接受的答案”,但我已经投了所有这些因为他们摇滚。再次感谢!

5 个答案:

答案 0 :(得分:6)

你走的是正确的,但我认为看Connection Strings对你来说可能比这里的任何答案都更有帮助。

答案 1 :(得分:2)

您也可以使用uid代替“用户ID”和pwd代替“密码”:

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

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

答案 2 :(得分: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,您不必记住字符串语法。

答案 3 :(得分:1)

是的,这将完全按照您的说法运作。

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

答案 4 :(得分:1)

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

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