2013-03-16 59 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