我在Windows 7上为SQL-Server创建ODBC数据源连接时遇到问题。
问题摘要:只能为“主”数据库创建ODBC数据源连接,而不能为其他任意数据库创建。
我在网上搜索并没有找到解决方案。以下是详细信息:
使用“SQL Server配置管理器”,它说:
SQL Server(SQLEXPRESS) running我还设置了:“登录为:内置帐户 - >本地系统”。
使用“Microsoft SQL Server Management Studio”(版本10.0.1600.22)我已使用空白用户名和密码连接到数据库。然后,我创建了一个名为“Test1”的新数据库,并将创建的文件定向到驻留在:“F:\ Data \ SQL Server \ Test1.sdf”。 我继续创建了几个(普通的)表,填充了几行,并成功运行了几个查询 - 全部使用“Microsoft SQL Server Management Studio”。到目前为止一切顺利。
但是,我需要使用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”),行为是相同的:连接到默认“主”数据库时成功,尝试连接到“Test1”数据库时失败,并显示相同的错误消息在3b。上方。
Servers: PLUTO PLUTO\SQLEXPRESS我已经在网络上搜索过,并且没有找到解决方案。我们将非常感谢您的帮助。
更多信息(3-16):当我去的时候:
>sqlcmd -S pluto\sqlexpress -Q "select getdate()" 2013-03-16 10:07:04.380 (1 rows affected)所以与默认(“master”)数据库的连接工作正常。
但是当我走的时候:
>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'.
所以似乎问题在于该服务器上新数据库的用户权限/访问权限,即:“Test1”。
任何人都可以帮助如何检查/分配SQL Server上特定数据库的权限吗?
许多TIA
海伦
答案 0 :(得分:3)
你正在运行权限问题希望这会有所帮助。
<强> sp_addlinkedsrvlogin 强>
创建或更新Microsoft®SQLServer™本地实例上的登录与链接服务器上的远程登录之间的映射。 语法
sp_addlinkedsrvlogin [@rmtsrvname =]'rmtsrvname' [,[@ useself =]'useself'] [,[@ locallogin =]'locallogin'] [,[@ rmtuser =]'rmtuser'] [,[@ rmtpassword =]'rmtpassword'] 参数
[@ rmtsrvname =]'rmtsrvname'
登录映射适用的链接服务器的名称。 rmtsrvname 是 sysname ,没有默认值。
[@ useself =]'useself'
确定用于连接远程服务器的登录名。 useself是 varchar(8),默认值为TRUE。值true指定SQL Server经过身份验证的登录使用自己的凭据连接到 rmtsrvname ,并忽略 rmtuser 和 rmtpassword 参数。 false指定 rmtuser 和 rmtpassword 参数用于连接指定 locallogin 的 rmtsrvname 。如果 rmtuser 和 rmtpassword 也设置为NULL,则不使用登录名或密码连接到链接服务器。如果使用自身对于Windows NT身份验证登录无效,除非MicrosoftWindowsNT®环境支持安全帐户委派,并且提供程序支持Windows身份验证(在这种情况下,不再需要创建值为true的映射但仍然有效)。 / p>
[@ locallogin =]'locallogin'
是否在本地服务器上登录。 locallogin 是 sysname ,默认值为NULL。 NULL指定此条目适用于连接到 rmtsrvname 的所有本地登录。如果不为NULL, locallogin 可以是SQL Server登录或Windows NT用户。 Windows NT用户必须直接授予对SQL Server的访问权限,或者通过其授予访问权限的Windows NT组的成员身份。
[@ rmtuser =]'rmtuser'
当useself为false时,用于连接 rmtsrvname 的用户名是否为false。 rmtuser 是 sysname ,默认值为NULL。
[@ rmtpassword =]'rmtpassword'
密码是否与 rmtuser 相关联。 rmtpassword 是 sysname ,默认值为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用户名和密码)连接到存在所有这些条件时链接服务器:
链接服务器使用在本地SQL Server上执行 sp_addlinkedsrvlogin 定义的映射执行身份验证后,远程数据库中各个对象的权限由链接服务器确定,而不是本地服务器。
无法在用户定义的事务中执行sp_addlinkedsrvlogin 。 权限
只有 sysadmin 和 securityadmin 固定服务器角色的成员才能执行 sp_addlinkedsrvlogin 。
答案 1 :(得分:1)
事实证明,“Test1”数据库位于“紧凑”实例中。 (在我的OP中看到“sdf”数据库文件扩展名时可能会注意到这一点)。
所以这就是ODBC连接没有看到它的原因。 (SQL Server Compact版没有ODBC管道。)