總結:資料庫連線字串的使用方法
-
綜述
什麼是資料庫連線字串?
連線字串的格式是一個以分號為界,劃分鍵/值引數對的列表。連線字串包含一個由一些屬性名/值對組成的集合。每一個屬性/值對都由分號隔開。
PropertyName1="Value1";PropertyName2="Value2";PropertyName3="Value3";..... |
同樣,連線字串必須包含SQL Server例項名稱: Data Source=ServerName;
總的來說,資料庫的連線字串分為兩種:Windows身份驗證和SQL Server身份驗證。每種方法都有各自的優缺點。但是遵循的基本規則是一樣的,基本規則如下:
如果採用SQL Server身份驗證方式,Data Source(資料來源)、Initial Catalog(初始編目)、User ID(使用者ID)、和Password(密碼)等元素是必須的,下面這些選項都是可用的:
·Application Name(應用程式名稱):應用程式的名稱。如果沒有被指定的話,它的值為.NET SqlClient Data Provider(資料提供程式).
·AttachDBFilename/extended properties(擴充套件屬性)/Initial File Name(初始檔名):可連線資料庫的主要檔案的名稱,包括完整路徑名稱。資料庫名稱必須用關鍵字資料庫指定。
·Connect Timeout(連線超時)/Connection Timeout(連線超時):一個到伺服器的連線在終止之前等待的時間長度(以秒計),預設值為15。
·Connection Lifetime(連線生存時間):當一個連線被返回到連線池時,它的建立時間會與當前時間進行對比。如果這個時間跨度超過了連線的有效期的話,連線就被取消。其預設值為0。
·Connection Reset(連線重置):表示一個連線在從連線池中被移除時是否被重置。一個偽的有效在獲得一個連線的時候就無需再進行一個額外的伺服器來回運作,其預設值為真。
·Current Language(當前語言):
·Data Source(資料來源)/Server(伺服器)/Address(地址)/Addr(地址)/Network Address(網路地址):SQL Server例項的名稱或網路地址。
·Encrypt(加密):當值為真時,如果伺服器安裝了授權證書,SQL Server就會對所有在客戶和伺服器之間傳輸的資料使用SSL加密。被接受的值有true(真)、false(偽)、yes(是)和no(否)。
·Enlist(登記):表示連線池程式是否會自動登記建立執行緒的當前事務語境中的連線,其預設值為真。
·Database(資料庫)/Initial Catalog(初始編目):資料庫的名稱。
·Integrated Security(整合安全)/Trusted Connection(受信連線):表示Windows認證是否被用來連線資料庫。它可以被設定成真、偽或者是和真對等的sspi,其預設值為偽。
·Max Pool Size(連線池的最大容量):連線池允許的連線數的最大值,其預設值為100。
·Min Pool Size(連線池的最小容量):連線池允許的連線數的最小值,其預設值為0。
·Network Library(網路庫)/Net(網路):用來建立到一個SQL Server例項的連線的網路庫。支援的值包括: dbnmpntw (Named Pipes)、dbmsrpcn (Multiprotocol/RPC)、dbmsvinn(Banyan Vines)、dbmsspxn (IPX/SPX)和dbmssocn (TCP/IP)。協議的動態連結庫必須被安裝到適當的連線,其預設值為TCP/IP。
·Packet Size(資料包大小):用來和資料庫通訊的網路資料包的大小。其預設值為8192。
·Password(密碼)/Pwd:與帳戶名相對應的密碼。
·Persist Security Info(保持安全資訊):用來確定一旦連線建立了以後安全資訊是否可用。如果值為真的話,說明像使用者名稱和密碼這樣對安全性比較敏感的資料可用,而如果值為偽則不可用。重置連線字串將重新配置包括密碼在內的所有連線字串的值。其預設值為偽。
·Pooling(池):確定是否使用連線池。如果值為真的話,連線就要從適當的連線池中獲得,或者,如果需要的話,連線將被建立,然後被加入合適的連線池中。其預設值為真。
·User ID(使用者ID):用來登陸資料庫的帳戶名。
·Workstation ID(工作站ID):連線到SQL Server的工作站的名稱。其預設值為本地計算機的名稱。
-
Windows 身份驗證方式
- 首推最簡單的一種方法,也是最不得已的情況下才使用的一招!
首先:隨便在電腦上的什麼地方新建一個字尾為.udl的檔案;
接著:雙擊開啟這個檔案,會自動彈出資料鏈接屬性對話方塊,如下如所示,配置好之後點選確定就OK了。
最後,把這個udl檔案拖到記事本里開啟就可以看見連線字串了。
每一種身份驗證都有它的優點和缺點。
Windows身份驗證使用單一的使用者資訊庫源,因此,不需要為資料庫訪問去分別配置使用者。連線字串不包含使用者ID和密碼,因此消除了把使用者ID和密碼暴露給未授權的使用者的危險。可以在Active Directory中管理使用者和他們的角色,而不必在SQL Server中顯式地配置他們的屬性。
Windows身份驗證的缺點是,它要求客戶通過Windows的安全子系統支援的安全通道去連線SQL Server。如果應用種序需要通過不安全的網路(例如Internet)連線SQL Server,Windows身份驗證將不工作。此外,這種身份驗證方法也部分地把管理資料庫訪問控制的責任從DBA身上轉移到了系統管理員身上,這在確定的環境中也許是一個問題。
一般而言,在設計通用的應用程式時,為了使用Windows身份驗證,將會對一些方面進行加強。大多數公司的資料庫都駐留在比較健壯的Windows伺服器作業系統上,那些作業系統都支援Windows身份驗證。資料訪問層和資料表示層的分離也促進了把資料訪問程式碼封裝在中間層元件思想的應用,中間層元件通常執行在具有資料庫伺服器的內部網路中。當這樣設計時,就不需要通過不安全通道建立資料庫連線。除此之外,Web服務也使直接連線不同域中資料庫的需要大減少。
三、SQL Server 身份驗證方式
SQL Server 身份驗證標準連線:
Data Source = myServerAddress; Initial Catalog = myDataBase; User Id = myUsername; Password = myPassword;
server=.\sqlexpress; database=testDB; uid=sa; pwd=123456
使用本地的SQL Server(localhost),如果想要使用遠端伺服器執行,應該在示例物件中把正確的伺服器賦給Data Source 屬性。此外,還必須指定所支援的兩種身份驗證方法(即Windows身份驗證和SQL Server身份驗證)中的其中一種。Windows身份驗證使用Windows登入使用者身份連線資料庫,而SQL身份驗證要求顯式地指定SQL Server使用者ID和密碼。要想使用Windows身份驗證,必須在連線字串中包括 Integrated Security 屬性:
Data Source=ServerName;Integrated Security=True; |
預設情況下,Integrated Security 屬性為 False ,這意味著將禁用Windows身份驗證。如果沒有顯式地把這個屬性的值設定為True,連線將使用SQL Server身份驗證,因此,必須提供SQL Server使用者ID和密碼。Integrated Security屬性還能識別的其他值只有SSPI(Security Support Provider Interface,安全性支援提供者介面)。在所有的Windows NT作業系統上,其中包括Windows NT 4.0、2000、XP,都支援值SSPI。它是使用Windows身份驗證時可以使用的惟一介面,相當於把Integrated Security 屬性值設定為True。
使用SQL Server的連線方式時,以本地伺服器(LocalHost),資料庫(testDB)為例,可以有以下一些連線方式
Data Source=LocalHost;Initial Catalog= testDB;Integrated Security=SSPI;Persist Security Info=False;Workstation Id=XXX;Packet Size=4096; |
Server=LocalHost; Persist Security Info=False;Integrated Security=SSPI;Database= testDB; |
在Windows身份驗證模式中,SQL Server使用Windows的安全子系統對使用者連線進行有效性驗證。即使顯示地指定使用者ID和密碼,SQL Server也不檢查連線字串中的使用者ID和密碼。因為只有Windows NT、2000、XP支援SSPI,因此如果正使用的是這些作業系統,則只能使用Windows整合的安全策略去連線SQL Server。不論使用哪一個作業系統,當使用SQL Server身份驗證時,必須在連線字串中指定使用者ID和密碼:
Server= ServerName,Data Source=DB;User ID=ID;Password=pwd |