?
SQL Server 連接字符串和身份驗證
?
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服務也使直接連接不同域中數據庫的需要大減少。
來自:
http://www.cnblogs.com/lanse777/archive/2007/03/28/691757.html
?
數據庫的連接性已經發展成為應用程序開發的一個標準方面。數據庫連接字符串現在已經成為每個項目的標準必備條件。我發現自己為了找到所需要的句法,經常要從另外一個應用程序中復制連接字符串或者進行一次搜索。這個在與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;";
SqlConnectionconn = 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(密碼)等元素一起,下面這些選項都是可用的:
?
?
學生做了一個題庫系統,用C#寫的ASP應用程序,數據庫用SQL Server2000,交給我看看。放到服務器上后,出現問題。反復調整后發現了解決的方法,其實很簡單。回過頭去看了看,發現是自己對SQL Server的連接語句和用戶權限的認識不足所造成的。下面將我的一些心得以及網上查到的有關資料匯集一下,以為后來者借鑒,當然很膚淺。
1、SQL Server的連接方式
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");
心得:
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設置成統一的方式。
? from: http://www.cnblogs.com/yongqiudeng/archive/2008/02/12/1067342.html
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
