![](/img/trans.png)
[英]Problem in the connection string of Microsoft SQL Server 2005 !
[英]SQL Server 2005 SQL 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}"
这是正确的方法吗? 该代码假定:
我正在切换到SQL身份验证,因为我正在考虑连接到远程服务器上的SQL Server实例-SQL身份验证是执行此操作的正确方法,我是否只需要输入当前“ LOCALHOST”所在的IP?
谢谢!
更新:伙计们,谢谢您提供的所有很好的答案! 所有这些都很棒,而且非常有帮助,我什至无法决定授予哪个“可接受的答案”,但是我投票赞成了所有这些,因为它们很摇摆。 再次感谢!
您以正确的方式前进,但我认为查看连接字符串可能比这里的任何答案对您有更大的帮助。
您还可以使用uid代替“用户ID”,并使用pwd代替“ password”:
"Data Source=LOCALHOST;Initial Catalog={0};uid={1};pwd={2}"
可以使用远程计算机的IP或DNS名称代替LOCALHOST。 请注意,如果远程计算机上存在多个SQL Server实例,则需要在“数据源”下指定实例-例如“数据源= 11.22.33.44 \\ SQLEXPRESS”。
有一个适用于此的应用程序: 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 ,而不必记住字符串语法。
是的,这将完全按照您所说的进行。
“数据源= 11.22.33.44;初始目录= {0};用户标识= {1};密码= {2}”
如果本地服务器和远程服务器之间没有公用的Active Directory域,那么我认为您将需要SQL身份验证。 have a common ADS domain, then I recommend using it – otherwise you have to either use a common SQL account for everyone (and then use an appropriate mechanism to encrypt the password) or create separate SQL accounts for each user, thereby duplicating data. 但是,如果您有一个通用的ADS域,那么我建议您使用它-否则,您必须为所有人使用一个通用SQL帐户(然后使用适当的机制来加密密码),或者为每个用户创建单独的SQL帐户,从而复制数据。
对该初始目录设置要非常小心。 如果该值可以由用户输入提供,那么如果您没有适当的验证来防止它攻击,则可以将其用于尝试攻击另一个数据库。 对不起,如果我正在宣讲合唱团:-)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.