2013-03-16 62 views
3

我在爲Windows 7上的SQL Server創建ODBC數據源連接時遇到問題。MS SQL服務器:不能在Windows 7上連接ODBC?

問題摘要:只能爲「主」數據庫創建ODBC數據源連接,而不是爲其他任意數據庫創建連接。

我已經搜索了網絡,並沒有找到解決方案。以下是詳細信息:

  1. 我在Windows 7 64位系統上安裝了MS SQL Server。詳細信息:SQLEXPRESS版本,版本:10.1.2531.0,版本:2007.100.2531.0,實例ID:MSSQL10.SQLEXPRESS。

使用「SQL Server配置管理器」,它說:

SQL Server(SQLEXPRESS) running
我還建立了:「登錄爲:內置帳戶 - >本地系統」。

  1. 使用「Microsoft SQL Server Management Studio」(版本10.0.1600.22)我已連接到數據庫,並使用空白的用戶名和密碼。然後,我創建了一個名爲「Test1」的新數據庫,並指示創建的文件位於:「F:\ Data \ SQL Server \ Test1.sdf」。 我繼續創建了幾個(不重要的)表,填充了幾行代碼,併成功運行了幾個查詢 - 全部使用「Microsoft SQL Server Management Studio」。到現在爲止還挺好。

  2. 但是,我需要使用ODBC連接從外部程序接口到數據庫。 因此,使用「ODBC數據源管理員」(\%sysdir%\ SysWOW64 \ odbcad32.exe版本6.1.7600.16385)(64位),我試圖創建一個數據源界面。這裏是我的經歷:(我叫dsn:「SYS_DB」):

3a。去「系統DNS」 - >添加 - >「SQL Native Client 10.0」; (爲司機);服務器:PLUTO \ SQLEXPRESS; 「使用集成的Windows身份驗證」; (所有其他選項:默認),當我按下「測試數據源」時,它會顯示:

... ... Address PLUTO\SQLEXPRESS' was used to establish the connection. 
... TESTS COMPLETED SUCCESSFULLY!
(PLUTO是計算機名稱)。

3b。問題是,我需要連接到「Test1」數據庫,而不是默認的「主」數據庫。

因此,在「ODBC數據源管理員」窗口的第三個窗口中,當我去時: - >將默認數據庫更改爲:Test1,我得到一個窗口說:

The database entered is not valid
如果我去一個窗口,並取消選中:「連接到SQL Server以獲取其他配置選項的設置」,然後檢查:「附加數據庫文件名」:F:\ Data \ SQL Server \ Test1.sdf(如我在上面的2.中所述),數據源測試失敗:
Attempting connection 
[Microsoft][SQL Server Native Client 10.0][SQL Server] 
The header for file 'F:\Data\SQL Server\Test1.sdf' is not a valid database file header. 
The FILE SIZE property is incorrect.
3c。嘗試設置驅動程序時:「系統DNS」 - >「添加」 - >「SQL Server」; (而不是上面3a中的「SQL Native Client 10.0」),行爲是相同的:連接到默認的「master」數據庫時成功,嘗試連接到「Test1」數據庫時失敗,錯誤消息與在3b中。以上。

  1. 注:當我走:「SQLCMD -L」,它說:
    Servers: 
    PLUTO 
    PLUTO\SQLEXPRESS
    我整個網絡一派,還沒有找到一個解決方案。您的幫助將不勝感激。

許多TIA - 海倫

更多信息(3-16):當我去:

>sqlcmd -S pluto\sqlexpress -Q "select getdate()" 
2013-03-16 10:07:04.380 (1 rows affected)
所以用默認的連接( 「主」)數據庫工作正常。

但是,當我去:

>sqlcmd -S pluto\sqlexpress -d Test1 -Q "select getdate()" 
Msg 4060, Level 11, State 1, Server PLUTO\SQLEXPRESS, Line 1 
Cannot open database "Test1" requested by the login. The login failed. 
Msg 18456, Level 14, State 1, Server PLUTO\SQLEXPRESS, Line 1 
Login failed for user 'PLUTO\MyUser'. 

如此看來,這個問題是與用戶權限/權限到該服務器上的新的數據庫,即:「測試1」。

任何人都可以幫助如何檢查/分配SQL Server上的特定數據庫的權限?

許多TIA

海倫

+0

請參閱[this](http://support.dataaccess.com/Forums/entry.php?126-I-Cannot-Connect-To-An-ODBC-Database)和[this](http:// support.microsoft.com/kb/942976)。我猜你的問題很小。 – omid 2013-03-16 13:19:07

+0

@omid:這不是32位與64位的問題。因爲:1.我使用的ODBC管理器是64位; 2.正如我在OP的3a中所提到的,當我連接到dsn的「master」數據庫(它說:「測試已成功完成!」)時,ODBC管理器連接測試正常工作。嘗試連接到同一SQL服務器上的另一個數據庫(「Test1」)時彈出問題。 – 2013-03-16 15:52:52

回答

1

原來的 「Test1的」 數據庫是在 「緊湊」 的實例。 (可能會發現在我的OP中看到「sdf」數據庫文件擴展名)。

所以這就是ODBC連接沒有看到它的原因。 (SQL Server Compact版本沒有ODBC管道)。

3

你的權限問題,運行希望這有助於。

sp_addlinkedsrvlogin

創建或在Microsoft®SQL Server™的本地實例和遠程登錄鏈接服務器上更新登錄之間的映射。 語法

sp_addlinkedsrvlogin [@rmtsrvname =] 'rmtsrvname的數據類型' [[@useself =] 'useself'] [[@locallogin =] 'locallogin的'] [[@rmtuser =] '歸爲rmtuser' ] [[@rmtpassword =] 'rmtpassword'] 參數

[@rmtsrvname =] 'rmtsrvname的數據類型'

那是應用登錄映射到鏈接服務器的名稱。 rmtsrvnamesysname,沒有默認值。

[@useself =] 'useself'

確定用於連接到遠程服務器的登錄名。 useself is varchar(8),默認爲TRUE。值爲true指定SQL Server已驗證的登錄名使用其自己的憑據連接到rmtsrvname,而rmtuserrmtpassword參數被忽略。假指定的歸爲rmtuserrmtpassword參數用於連接到rmtsrvname的數據指定的locallogin的。如果rmtuserrmtpassword也設置爲NULL,則不使用登錄名或密碼連接到鏈接的服務器。除非Microsoft WindowsNT®環境支持安全帳戶委派並且提供程序支持Windows身份驗證(在這種情況下,創建值爲true的映射不再需要但仍有效),否則對於useself而言爲true對於Windows NT身份驗證登錄無效。

[@locallogin =] 'locallogin的'

是對本地服務器上的登錄。 localloginsysname,默認爲NULL。 NULL指定此條目適用於連接到rmtsrvname的所有本地登錄名。如果不爲NULL,則locallogin可以是SQL Server登錄名或Windows NT用戶。 Windows NT用戶必須已被授予對SQL Server的訪問權限,或者直接授予對Windows Server組成員的訪問權限。

[@rmtuser =] '歸爲rmtuser'

是用於連接到rmtsrvname的數據類型當useself是假的用戶名。 rmtusersysname,缺省值爲NULL。

[@rmtpassword =] 'rmtpassword'

是與歸爲rmtuser相關聯的密碼。 rmtpasswordsysname,默認值爲NULL。 返回代碼值

0 (success) or 1 (failure) 

備註

當到本地服務器的用戶登錄並執行訪問鏈接服務器上的表的分佈式查詢時,本地服務器必須登錄鏈接服務器代表用戶訪問該表。使用sp_addlinkedsrvlogin指定本地服務器用於登錄到鏈接服務器的登錄憑證。

在本地服務器和遠程登錄鏈接服務器上的所有的登錄之間的默認映射被自動通過執行的sp_addlinkedserver創建。默認映射指出,當代表登錄連接到鏈接服務器時,SQL Server使用本地登錄的用戶憑據(相當於對鏈接服務器執行的sp_addlinkedsrvlogin的@useself設置爲true)。使用sp_addlinkedsrvlogin只能更改默認映射或爲特定本地登錄添加新映射。要刪除默認映射或任何其他映射,請使用sp_droplinkedsrvlogin

而不必使用sp_addlinkedsrvlogin創建預定登錄映射,SQL Server可以自動使用用戶的Windows NT安全憑據(Windows NT的用戶名和密碼)發出查詢連接到鏈接服務器時,所有這些條件存在:

  • 用戶使用Windows身份驗證模式連接到SQL Server。
  • 安全帳戶委託可在客戶端上發送,併發送 服務器。
  • 該提供程序支持Windows身份驗證模式(例如,在Windows NT上運行的SQL 服務器)。

認證已通過使用由本地SQL Server上執行sp_addlinkedsrvlogin定義的映射鏈接服務器執行後,在所述遠程數據庫中的各個對象的權限由鏈接服務器,而不是本地確定服務器。

sp_addlinkedsrvlogin不能從用戶定義的事務中執行。 權限

只有系統管理員和securityadmin固定服務器角色成員才能執行sp_addlinkedsrvlogin

Troubleshooting

source