你真的了解连接字符串吗.docx
- 文档编号:11119875
- 上传时间:2023-05-29
- 格式:DOCX
- 页数:10
- 大小:19.67KB
你真的了解连接字符串吗.docx
《你真的了解连接字符串吗.docx》由会员分享,可在线阅读,更多相关《你真的了解连接字符串吗.docx(10页珍藏版)》请在冰点文库上搜索。
你真的了解连接字符串吗
连接字符串关键字
连接字符串的格式是使用分号分隔的键/值参数对列表:
keyword1=value;keyword2=value
忽略空格,关键字不区分大小写,尽管值可能会区分大小写,这取决于数据源的大小写。
要加入包含分号、单引号或双引号的值,值必须加双引号。
持续安全信息
连接字符串中PersistSecurityInfo关键字的默认设置为false。
PersistSecurityInfo=false;
如果将该关键字设置为true或yes,将允许在打开连接后,从连接中获得涉及安全性的信息(包括用户标识和密码)。
如果在建立连接时必须提供用户标识和密码,最安全的方法是在使用信息打开连接后丢弃这些信息,在PersistSecurityInfo设置为false或no时会发生这种情况。
当您向不可信的源提供打开的连接,或将连接信息永久保存到磁盘时,这点尤其重要。
如果将PersistSecurityInfo保持为false,可帮助确保不可信的源无法访问连接中涉及安全性的信息,并帮助确保任何涉及安全性的信息都不会随连接字符串信息在磁盘上持久化。
使用Windows身份验证
我们建议您使用Windows身份验证(通常称为集成安全性)连接到服务器数据库上。
要指定Windows身份验证,可以对SQLServer.NETFramework数据提供程序使用下列两个键/值对中的任意一个:
IntegratedSecurity=true;
IntegratedSecurity=SSPI;
但是,只有第二个将适用于OleDb.NETFramework数据提供程序。
为ConnectionString设置IntegratedSecurity=true将引发异常。
对于ODBC.NETFramework数据提供程序,必须使用以下键/值对指定Windows身份验证。
Trusted_Connection=yes;
SqlClient连接字符串
SqlConnection的ConnectionString属性可以为SQLServer7.0或更高版本的数据库获取或设置连接字符串。
如果需要连接到早期版本的SQLServer,必须使用OleDb.NET数据提供程序。
SqlClient连接字符串语法
连接到SQLServer数据库的语法很灵活。
下列每个语法形式均将使用集成安全性连接到本地服务器上的AdventureWorks数据库。
始终通过名称或通过关键字(local)指定服务器。
"PersistSecurityInfo=False;IntegratedSecurity=true;InitialCatalog=AdventureWorks;Server=MSSQL1"
"PersistSecurityInfo=False;IntegratedSecurity=SSPI;database=AdventureWorks;server=(local)"
"PersistSecurityInfo=False;Trusted_Connection=True;database=AdventureWorks;server=(local)"
要强制使用某个协议,请添加下列前缀之一:
np:
(local),tcp:
(local),lpc:
(local)
对于SQLServer身份验证,使用此语法指定用户名和密码,其中的星号表示有效的用户名和密码。
"PersistSecurityInfo=False;UserID=*****;Password=*****;InitialCatalog=AdventureWorks;Server=MySqlServer"
OleDb连接字符串
通过OleDbConnection的ConnectionString属性可以为OLEDB数据源(例如MicrosoftAccess或SQLServer6.5或更低版本)获取或设置连接字符串。
对SQLServer7.0或更高版本使用SqlConnection。
OleDb连接字符串语法
必须为OleDbConnection连接字符串指定提供程序名称。
以下连接字符串使用Jet提供程序连接到MicrosoftAccess数据库。
注意,如果数据库未受保护(默认设置),UserID和Password关键字是可选的。
Provider=Microsoft.Jet.OLEDB.4.0;DataSource=d:
\Northwind.mdb;UserID=Admin;Password=;
如果数据库受保护,必须提供工作组信息文件的位置。
Provider=Microsoft.Jet.OLEDB.4.0;DataSource=d:
\Northwind.mdb;JetOLEDB:
SystemDatabase=d:
\NorthwindSystem.mdw;UserID=*****;Password=*****;
对于SQLServer6.5或更低版本,请使用sqloledb关键字。
Provider=sqloledb;DataSource=MySqlServer;InitialCatalog=pubs;UserId=*****;Password=*****;
不要使用通用数据链接文件
可以在通用数据链接(UDL)文件中提供OleDbConnection的连接信息;但是,应避免这样做。
UDL文件未加密,会以明文的形式公开连接字符串信息。
因为UDL文件对应用程序来说是基于外部文件的资源,所以,无法使用.NETFramework保护其安全。
连接到Excel
MicrosoftJet提供程序用于连接到Excel工作簿。
在以下连接字符串中,ExtendedProperties关键字设置Excel特定的属性。
“HDR=Yes;”指示第一行中包含列名,而不是数据,“IMEX=1;”通知驱动程序始终将“互混”数据列作为文本读取。
注意
Provider=Microsoft.Jet.OLEDB.4.0;DataSource=D:
\MyExcel.xls;ExtendedProperties=""Excel8.0;HDR=Yes;IMEX=1""
注意,ExtendedProperties所需的双引号必须还要加双引号。
DataShape提供程序连接字符串语法
在使用MicrosoftDataShape提供程序时,应同时使用Provider和DataProvider关键字。
以下示例使用Shape提供程序连接到SQLServer的本地实例。
"Provider=MSDataShape;DataProvider=SQLOLEDB;DataSource=(local);InitialCatalog=pubs;IntegratedSecurity=SSPI;"
Odbc连接字符串
OdbcConnection的ConnectionString属性可以为OLEDB数据源获取或设置连接字符串。
以下连接字符串使用Microsoft文本驱动程序。
Driver={MicrosoftTextDriver(*.txt;*.csv)};DBQ=d:
\bin
有关ODBC连接字符串语法的更多信息,请参见ConnectionString。
Oracle连接字符串
OracleConnection的ConnectionString属性可以为OLEDB数据源获取或设置连接字符串。
DataSource=Oracle9i;UserID=*****;Password=*****;
附录一热心网友的解答
大家看我上面的字符串有问题吗?
很负责任的告诉你,有问题,而且执行到sqlconnection.open()时,会抛出一个异常:
“用户''登录失败。
该用户与可信SQLServer连接无关联。
”
这是为什么呢?
查了一下msdn才发现,上面的字符串同时集成了windows身份认证和sqlserver混合身份认证。
当在字符串中指定:
IntegratedSecurity=SSPI时,字符串会基层windows方式来验证,也就是说数据库服务器会在域账户中检查sa账户是否存在而且是否有权限连接web2.0这个数据库。
很显然,我的域
账户中没有sa。
对于IntegratedSecurity属性,还有几点需要注意:
(1)如果数据提供程序是sqlserver.netframework(通俗的说就是如果你采用sqlserver作为数据库)那么下面三种方式都可以用:
IntegratedSecurity=true;
IntegratedSecurity=SSPI;
Trusted_Connection=True;
另外Provider是System.Data.SqlClient
如:
混合身份认证方式:
集成windows方式:
(2)如果数据库提供程序是oledb.Netframework(通俗的说就是你采用access,excel等)那么只能采用下面的方式
IntegratedSecurity=SSPI;
而且必须为OleDbConnection连接字符串指定提供程序名称。
以下连接字符串使用Jet提供程序连接到MicrosoftAccess数据库。
注意,如果数据库未受保护(默认设置),UserID和Password关键字是可选的。
Provider=Microsoft.Jet.OLEDB.4.0;DataSource=d:
\Northwind.mdb;UserID=Admin;Password=;
如果数据库受保护,必须提供工作组信息文件的位置。
Provider=Microsoft.Jet.OLEDB.4.0;DataSource=d:
\Northwind.mdb;JetOLEDB:
SystemDatabase=d:
\NorthwindSystem.mdw;UserID=*****;Password=*****;
对于SQLServer6.5或更低版本,请使用sqloledb关键字。
Provider=sqloledb;DataSource=MySqlServer;InitialCatalog=pubs;UserId=*****;Password=*****;
(3)如果你使用传统的ODBC.Netframework那么必须使用下面的方式:
Trusted_Connection=yes;
最后我们再说一下:
PersistSecurityInfo属性。
有时我们会在连接字符串中看到如下配置节:
PersistSecurityInfo=False;IntegratedSecurity=SSPI;database=Northwind;server=(local)
这个属性是干嘛的呢?
MSDN有如下解释:
持续安全信息(PersistSecutiryInfo)
连接字符串中PersistSecurityInfo关键字的默认设置为false。
PersistSecurityInfo=false;
如果将该关键字设置为true或yes,将允许在打开连接后,从连接中获得涉及安全性的信息(包括用户标识和密码)。
如果在建立连接时必须提供用户标识和密码,最安全的方法是在使用信息打开连接后丢弃这些信息,在PersistSecurityInfo设置为false或no时会发生这种情况。
当您向不可信的源提供打开的连接,或将连接信息永久保存到磁盘时,这点尤其重要。
如果将PersistSecurityInfo保持为false,可帮助确保不可信的源无法访问连接中涉及安全性的信息,并帮助确保任何涉及安全性的信息都不会随连接字符串信息在磁盘上持久化。
说白了,就是要我们尽量保持PersistSecurityInfo保持为false。
附录二网上贴吧解答
integratedsecurity=true的意思是集成验证,也就是说使用Windows验证的方式去连接到数据库服务器。
这样方式的好处是不需要在连接字符串中编写用户名和密码,从一定程度上说提高了安全性。
那么到底是用哪一个Windows身份呢?
很多朋友说,使用当前用户的身份吧?
这个回答不能算错,至少在Windows应用程序中是这样的。
但如果换成是ASP.NET应用程序,则就不是了。
如果是ASP.NET应用程序(网站或者服务),那么根据其运行宿主环境的不一样,可能会有差异
1.WindowsXP:
ASPNET帐号
2.Windows2003或者以后的版本:
NetWorkService帐号
知道这个原理之后,那么如果你准备用Integratedsecurity=true,则需要授予这两个帐号对于数据库的访问权限。
但要注意一个问题(也是很多朋友疑惑的),就是在VisualStudio里面调试的时候,貌似又不是使用ASPNET这个帐号的。
这是因为VisualStudio总是使用当前开发环境中,用户的Windows身份来发起请求的。
从下面的图可以看到这个差别。
在VS里面调试,与在IIS中调试,访问的身份是不一样的。
Microsoft安全支持提供器接口(SSPI)是定义得较全面的公用API,用来获得验证、信息完整性、信息隐私等集成安全服务,以及用于所有分布式应用程序协议的安全方面的服务。
应用程序协议设计者能够利用该接口获得不同的安全性服务而不必修改协议本身。
上面这句话的意思就是这个连接采用了这个接口,如果没有定义就会出错!
==============
IntegratedSecurity身份验证方式
当为false时,将在连接中指定用户ID和密码。
当为true时,将使用当前的Windows帐户凭据进行身份验证。
可识别的值为true、false、yes、no以及与true等效的sspi。
==============
指你使用windows自带的安全验证机制,这时你不用加uid和password也可以打开数据库
如果你没有那一句的话,就必须在联接字符串里写上uid=sa;password=00;
否则你不能打开数据库。
关于sql连接语句中的IntegratedSecurity=SSPI
解决方法:
即:
SecuritySupportProviderInterface
设置IntegratedSecurity为True的时候,连接语句前面的UserID,PW是不起作用的,即采用windows身份验证模式。
只有设置为False或省略该项的时候,才按照UserID,PW来连接。
IntegratedSecurity可以设置为:
True,false,yes,no,这四个的意思很明白了,还可以设置为:
sspi,相当于True,建议用这个代替True。
initialcatalog与database的区别是什么
InitialCatalog:
DataBase:
两者没有任何区别只是名称不一样,就好像是人类的真实姓名与曾用名一样。
。
都可以叫你。
********************************************
IntegratedSecurity=SSPI这个表示以当前WINDOWS系统用户身去登录SQLSERVER服务器,如果SQLSERVER服务器不支持这种方式登录时,就会出错。
你可以使用SQLSERVER的用户名和密码进行登录,如:
"Provider=SQLOLEDB.1;PersistSecurityInfo=False;InitialCatalog=数据库名;DataSource=192.168.0.1;UserID=sa;Password=密码"
***************************************************
IntegratedSecurity-或-Trusted_Connection'false'当为false时,将在连接中指定用户ID和密码。
当为true时,将使用当前的Windows帐户凭据进行身份验证。
可识别的值为true、false、yes、no以及与true等效的sspi(强烈推荐)。
*************************************************
ADO.net中数据库连接方式
System.Data.SqlClient.SqlConnection
常用的一些连接字符串(C#代码):
SqlConnectionconn=newSqlConnection(“Server=(local);IntegratedSecurity=SSPI;database=Pubs“);
SqlConnectionconn=newSqlConnection(“server=(local)\NetSDK;database=pubs;IntegratedSecurity=SSPI“);
SqlConnectionconn=newSqlConnection(“DataSource=localhost;IntegratedSecurity=SSPI;InitialCatalog=Northwind;“);
SqlConnectionconn=newSqlConnection(“datasource=(local);initialcatalog=xr;integratedsecurity=SSPI;
persistsecurityinfo=False;workstationid=XURUI;packetsize=4096;“);
SqlConnectionmyConn=newSystem.Data.SqlClient.SqlConnection(“PersistSecurityInfo=False;Integrated
Security=SSPI;database=northwind;server=mySQLServer“);
SqlConnectionconn=newSqlConnection(“uid=sa;pwd=passwords;initialcatalog=pubs;datasource=127.0.0.1;ConnectTimeout=900“);
在与SQLServer建立连接时出现与网络相关的或特定于实例的错误。
未找到或无法访问服务器。
请验证实例名称是否正确并且SQLServer已配置为允许远程连接。
(provider:
命名管道提供程序,error:
40-无法打开到SQLServer的连接)
如果你的机器装了sql2000那DataSource=.肯定是不行的了
因为实例名2000和2005的默认的是一样的所以2005的实例肯定不能用DataSource=.表示
查看sql2005的实例名将DataSource=.\SQLEXPRESS中的SQLEXPRESS用你的新实例名替换掉。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 了解 连接 字符串