SQL Server 連接字串和身分識別驗證 學習

來源:互聯網
上載者:User

標籤:一個   預設值   動態連結程式庫   包括   調整   計時   server   加密   http   

SQL Server .NET Data Provider 連接字串包含一個由一些屬性名稱/值對組成的集合。每一個屬性/值對都由分號隔開。
          PropertyName1=Value1;PropertyName2=Value2;PropertyName3=Value3;.....
同樣,連接字串必須包含SQL Server執行個體名稱:
          Data Source=ServerName;
          使用本地的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。


          在Windows身分識別驗證模式中,SQL Server使用Windows的安全子系統對使用者串連進行有效性驗證。即使顯示地指定使用者ID和密碼,SQL Server也不檢查連接字串中的使用者ID和密碼。因為只有Windows NT、2000、XP支援SSPI,因此如果正使用的是這些作業系統,則只能使用Windows整合的安全性原則去串連SQL Server。不論使用哪一個作業系統,當使用SQL Server身分識別驗證時,必須在連接字串中指定使用者ID和密碼:
Data Source=ServerName;User ID=donaldx;Password=unbreakable

          預設情況下,SQL Server .NET Data Provider串連指定使用者的預設資料庫,當在資料庫中建立使用者時,可以設定使用者的預設資料庫。此外,也可以在任意時間更改使用者的預設資料庫。例如,系統管理員的預設資料庫是master。如果想要串連不同的資料庫,應該指定資料庫的名稱:
Data Source=ServerName;Integrated Security=SSPI;Initial Catalog=Northwind

          每一種身分識別驗證都有它的優點和缺點。Windows身分識別驗證使用單一的使用者資訊庫源,因此,不需要為資料庫訪問去分別配置使用者。連接字串不包含使用者ID和密碼,因此消除了把使用者ID和密碼暴露給未授權的使用者的危險。可以在Active Directory中系統管理使用者和他們的角色,而不必在SQL Server中顯式地配置他們的屬性。
Windows身分識別驗證的缺點是,它要求客戶通過Windows的安全子系統支援的安全通道去串連SQL Server。如果應用種序需要通過不安全的網路(例如Internet)串連SQL Server,Windows身分識別驗證將不工作。此外,這種驗證方法也部分地把管理資料庫存取控制的責任從DBA身上轉移到了系統管理員身上,這在確定的環境中也許是一個問題。
          一般而言,在設計通用的應用程式時,為了使用Windows身分識別驗證,將會對一些方面進行加強。大多數公司的資料庫都駐留在比較健壯的Windows伺服器作業系統上,那些作業系統都支援Windows身分識別驗證。資料訪問層和資料展示層的分離也促進了把資料存取碼封裝在中介層組件思想的應用,中介層組件通常運行在具有資料庫伺服器的內部網路中。當這樣設計時,就不需要通過不安全通道建立資料庫連接。除此之外,Web服務也使直接連接不同域中資料庫的需要大減少。

資料庫的串連性已經發展成為應用程式開發的一個標準方面。資料庫連接字串現在已經成為每個項目的標準必備條件。我發現自己為了找到所需要的句法,經常要從另外一個應用程式中複製連接字串或者進行一次搜尋。這個在與SQL Server互動操作時更是如此,因為它有太多的連接字串選項。現在就讓我們來研究一下連接字串的眾多方面。

連接字串

在對象執行個體化或者建立期間,資料庫連接字串通過屬性或方法被傳遞到必要的對象。連接字串的格式是一個以分號為界,劃分鍵/值參數對的列表。列表A中包括了一個C#中的例子,說明了怎樣用建立SqlConnection對象的方法串連到SQL Server(實際的連接字串是通過對象的ConnectionString屬性分配的)。列表B中包括的是VB.NET的版本。

列表A

string cString = "Data Source=server;Initial Catalog=db;User ID=test;Password=test;";
SqlConnection conn = new SqlConnection();
conn.ConnectionString = cString;
conn.Open();

列表B

Dim cString As String
cString = "Data Source=server;Initial Catalog=db;User ID=test;Password=test;"

Dim conn As SqlConnection = New SqlConnection()
conn.ConnectionString = cString
conn.Open()

連接字串會指定資料庫伺服器和資料庫,以及訪問資料庫必需的使用者名稱和密碼。但是這種格式並不是對所有資料庫互動都適用,它的確有許多可用的選項,其中很多選項都有同義字。

和Data Source(資料來源)、Initial Catalog(初始編目)、User ID(使用者ID)、和Password(密碼)等元素一起,下面這些選項都是可用的:

 

    • Application Name(應用程式名稱):應用程式的名稱。如果沒有被指定的話,它的值為.NET SqlClient Data Provider(資料提供者).
    • AttachDBFilenameextended properties(擴充屬性)/Initial File Name(初始檔案名稱):可串連資料庫的主要檔案的名稱,包括完整路徑名稱。資料庫名稱必須用關鍵字資料庫指定。
    • Connect Timeout(連線逾時)/Connection Timeout(連線逾時):一個到伺服器的串連在終止之前等待的時間長度(以秒計),預設值為15。
    • Connection Lifetime(串連存留時間):當一個串連被返回到串連池時,它的建立時間會與目前時間進行對比。如果這個時間跨度超過了串連的有效期間的話,串連就被取消。其預設值為0。
    • Connection Reset(串連重設):表示一個串連在從串連池中被移除時是否被重設。一個偽的有效在獲得一個串連的時候就無需再進行一個額外的伺服器來回運作,其預設值為真。
    • Current Language(當前語言):SQL Server語言記錄的名稱。
    • 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的工作站的名稱。其預設值為本機電腦的名稱。

       

       

      解決SQL Server 串連時的一些基本問題後的若干初淺心得

      學生做了一個題庫系統,用C#寫的ASP應用程式,資料庫用SQL Server2000,交給我看看。放到伺服器上後,出現問題。反覆調整後發現瞭解決的方法,其實很簡單。回過頭去看了看,發現是自己對SQL Server的串連語句和使用者權限的認識不足所造成的。下面將我的一些心得以及網上查到的有關資料彙集一下,以為後來者借鑒,當然很膚淺。

      1、SQL Server的串連方式

      以本機伺服器(LocalHost),資料庫(Northwind)為例,可以有以下一些串連方式SqlConnection conn=new SqlConnection( "Server=LocalHost;Integrated Security=SSPI;Database=Northwind");SqlConnection conn = new SqlConnection("Data Source=LocalHost;Integrated Security=SSPI;Initial Catalog=Northwind;");SqlConnection conn = new SqlConnection(" Data Source=LocalHost;Initial Catalog=Northwind;Integrated Security=SSPI;Persist Security Info=False;Workstation Id=XURUI;Packet Size=4096; ");
      SqlConnection myConn = new SqlConnection("Persist Security Info=False;Integrated Security=SSPI;Database=northwind;Server=LocalHost");
      SqlConnection conn = new SqlConnection(" Uid=sa;Pwd=***;Initial Catalog=Northwind;Data Source=LocalHost;Connect Timeout=900");

      心得:

      a.Server和Database,Data Source和Initial Catalog配對使用的,可以互相替換(見笑)
      b.Integrated Security預設值是False,此時需要提供Uid和Pwd,即將以Sql Server 使用者身份登陸資料庫;如果設定為True,Yes 或 SSPI,這不能出現Uid和Pwd,將以Windows使用者省份登陸資料庫。強烈推薦用後一種形式,安全性更高。
      c.Integrated Security和Persist Security Info同時出現,後者設定為False,可保證資訊安全。

      更多字串串連說明請看MSDN:
      http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemDataSqlClientSqlConnectionClassConnectionStringTopic.asp

      連接字串的書寫應該熟練後應該沒有什麼問題,我是再看別人的程式,說實話有些東東還真不清楚。但串連不上的問題出現後,得解決呀。所以必須要弄懂這些關鍵字的意義,修改後再測試。

      2、SQL Server的使用者佈建
      問題一、採用連接字串
      SqlConnection conn = new SqlConnection(" Uid=sa;Pwd=***;Initial Catalog=Northwind;Data Source=LocalHost;Connect Timeout=900");
      錯誤:
      使用者"sa"登陸失敗,沒有可信任的Sql Server串連
      查資料後找到解決方案:
      原因:Sql Server的驗證方式需要設定為Sql Server驗證和Windows整合驗證的混合方式,如果僅設定為後一種方式,就會出像上述問題
      解決:運行Sql Server的企業管理器,點擊伺服器,在右鍵菜單中選擇屬性,選安全性,更改驗證方式即可
      問題二、採用連接字串
      SqlConnection conn = new SqlConnection("Data Source=LocalHost;Integrated Security=SSPI;Initial Catalog=Northwind;");
      錯誤:
      使用者"computername\IWAM_servername"登陸失敗
      原因:SQL Server的登陸使用者中不包括IWAM_servername
      解決方案:運行Sql Server的企業管理器,點擊伺服器,選安全性,選登陸,建立登陸中加入IWAM_servername,並配備相應的許可權,如只能訪問Northwind資料庫,資料庫的角色設定為public和db_owner。

      3、關於串連的安全性

      最好使用SSPI的整合安全方式串連資料庫,而sa使用者的方式串連會存在安全隱患,我認為主要是因為在安裝SQL Server時,經常會為了訪問的方便設定sa的密碼為空白,駭客一旦讓sa成為管理員,就可以獲得對系統的所有存取權限。所以為了資料庫的安全,可以設定 SQL server的訪問使用者只能經過windows整合驗證,設定sa的安全密碼,加強資料庫的安全性。當然設定為windows整合驗證後,資料庫的效能和訪問的靈活性勢必會受到影響,管理員可以針對每一個資料庫設定不同的驗證方式,而不必對SQL server設定成統一的方式。

SQL Server 連接字串和身分識別驗證 學習

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.