我正在构建一个连接到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}"
这是正确的方法吗?该代码假定:
我正在切换到SQL身份验证,因为我正在考虑连接到远程服务器上的SQL Server实例 - SQL身份验证是正确的方法吗?我只需要输入IP“LOCALHOST”目前是?
谢谢!
更新:谢谢你们所有的好答案,伙计们!所有这些都很精彩,非常有帮助,我甚至无法决定哪一个给予“接受的答案”,但我已经投了所有这些因为他们摇滚。再次感谢!
答案 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属性中提取连接字符串。这种方式是错误证明,您可以稍后修改其他属性,如ConnectTimeout或AsynchronousProcessing,您不必记住字符串语法。
答案 3 :(得分:1)
是的,这将完全按照您的说法运作。
“数据来源= 11.22.33.44;初始目录= {0};用户ID = {1};密码= {2}”
答案 4 :(得分:1)
如果本地和远程服务器之间没有公共Active Directory域,那么我认为您需要SQL身份验证。但是,如果你做有一个共同的ADS域,那么我建议使用它 - 否则你必须为每个人使用一个通用的SQL帐户(然后使用适当的机制来加密密码)或创建为每个用户分隔SQL帐户,从而复制数据。
对初始目录设置要非常小心。如果该值可以由用户输入提供,那么它可能会用于尝试攻击另一个数据库,如果您没有良好的验证来防止它。对不起,如果我正在向合唱团讲道: - )。