2013-03-16 5 views
3

У меня есть проблемы при создании соединения с источником данных ODBC в для SQL-сервера на Windows 7.MS SQL-Server: не может ODBC-подключение в Windows 7?

Резюме Проблемы: подключение источника данных ODBC может быть создано для базы данных «мастера», а не для дополнительных, произвольной базы данных.

Я googled вокруг сети и не нашел решения. Вот подробности:

  1. У меня есть MS SQL Server, установленный в 64-разрядной системе Windows 7. Подробности: Издание SQLEXPRESS, версия: 10.1.2531.0, сборка: 2007.100.2531.0, Идентификатор экземпляра: 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 Data Source Administrator» (\% sysdir% \ SysWOW64 \ odbcad32.exe версия 6.1.7600.16385) (64 бит), я пытаюсь создать интерфейс источника данных. Вот мои впечатления: (я называю dsn: «SYS_DB»):

3a. При переходе «System DNS» -> Add-> «SQL Native Client 10.0»; (для водителя); Сервер: PLUTO \ SQLEXPRESS; «С интегрированной проверкой подлинности Windows»; (все остальные опции: по умолчанию), когда я нажимаю: «Test Data Source», он говорит:

... ... Address PLUTO\SQLEXPRESS' was used to establish the connection. 
... TESTS COMPLETED SUCCESSFULLY!
(PLUTO - это имя компьютера).

3b. Проблема в том, что мне нужно подключиться к базе данных «Test1», а не к базе данных «master» по умолчанию.

Итак, в третьем окне в окне «Администратор источника данных 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. При попытке установить драйвер: «System DNS» -> Add-> «SQL Server»; (вместо «SQL Native Client 10.0», как в пункте 3а выше), поведение идентично: успех при подключении к базе данных «master» по умолчанию и отказ при попытке подключиться к базе данных «Test1» с тем же сообщением об ошибке, что и в 3b. выше.

  1. Примечания: когда я иду: «Sqlcmd -L», он говорит:
    Servers: 
    PLUTO 
    PLUTO\SQLEXPRESS
    Я гугл по всей сети и не нашел решение. Ваша помощь будет оценена по достоинству.

Многие ТИА - Хелен

Дополнительная информация (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'. 

Таким образом, кажется, что проблема с пользовательскими привилегиями/правами доступа к новой базе данных на этом сервере, а именно: «Test1».

Может ли кто-нибудь помочь в том, как проверять/назначать разрешения для конкретной базы данных на SQL Server?

Многие ТИА

Helen

+0

см. [Это] (http://support.dataaccess.com/Forums/entry.php?126-I-Cannot-Connect-To-An-ODBC-Database) и [это] (http: // support.microsoft.com/kb/942976). Я думаю, ваша проблема незначительна. – omid

+0

@omid: это не вопрос 32 бит против 64 бит. Потому что: 1. Менеджер ODBC, который я использую, - 64 бит; 2. Как я упоминал в пункте 3a моего OP, проверка соединения ODBC Manager отлично работает, когда я подключаюсь к «основной» базе данных dsn (он говорит: «ИСПЫТАНИЯ ЗАВЕРШЕНЫ УСПЕШНО!»). Проблема возникает при попытке подключиться к другой базе данных («Test1») на том же SQL-сервере. –

ответ

1

Оказывается, что база данных "Test1" был в "компактном", например. (Это можно было заметить, увидев расширение файла базы данных «sdf» в моем OP).

Так вот почему связь ODBC этого не увидела. (SQL Server Compact edition не имеет ODBC-канала).

3

вы работаете над проблемами разрешения надеюсь, что это помогает.

sp_addlinkedsrvlogin

Создает или обновляет отображение между логинами на локальном экземпляре Microsoft® SQL Server ™ и удаленного входа на связанном сервере. Синтаксис

sp_addlinkedsrvlogin [@rmtsrvname =] 'rmtsrvname' [, [@useself =] 'useself'] [, [@locallogin =] 'locallogin'] [, [@rmtuser =] 'rmtuser' ] [[@rmtpassword =] 'rmtpassword'] Аргументы

[@rmtsrvname =] 'rmtsrvname'

Является ли имя связанного сервера, что отображение Логин относится. rmtsrvname is sysname, без учета по умолчанию.

[@useself =] 'useself'

Определяет имя входа, используемого для подключения к удаленному серверу. useself is varchar (8), с по умолчанию TRUE. Значение true указывает, что аутентифицированные логины SQL Server используют свои собственные учетные данные для подключения к rmtsrvname, с rmtuser и rmtpassword игнорируются. ложно указывает, что rmtuser и rmtpassword аргументы используются для подключения к rmtsrvname для указанного locallogin. Если rmtuser и rmtpassword также установлены в NULL, для подключения к связанному серверу не требуется логин или пароль. true для useself недействителен для входа в систему с аутентификацией Windows NT, если среда Microsoft Windows NT® не поддерживает делегирование учетной записи безопасности, а поставщик поддерживает проверку подлинности Windows (в этом случае создание сопоставления со значением true больше не требуется, но все еще актуально).

[@locallogin =] 'locallogin'

Является Войти на локальном сервере. locallogin is sysname, по умолчанию NULL. NULL указывает, что эта запись применяется ко всем локальным входам, которые подключаются к rmtsrvname. Если не NULL, locallogin может быть логином SQL Server или пользователем Windows NT. Пользователю Windows NT должен быть предоставлен доступ к SQL Server либо напрямую, либо через его членство в доступном для группы Windows NT доступе.

[@rmtuser =] 'rmtuser'

ли имя пользователя, используемое для подключения к rmtsrvname когда useself является ложным. rmtuser is sysname, по умолчанию NULL.

[@rmtpassword =] 'rmtpassword'

ли пароль, связанный с rmtuser. rmtpassword is 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 с использованием режима проверки подлинности Windows.
  • Дебетование учетной записи безопасности доступно на клиенте и отправляет сервер .
  • Поставщик поддерживает режим аутентификации Windows (например, SQL Сервер, работающий в Windows NT).

После того, как аутентификация выполняется с помощью связанного сервера с помощью отображений, определенных путем выполнения sp_addlinkedsrvlogin на локальном SQL Server, разрешения на отдельных объектах в удаленной базе данных определяются связанный сервер, а не локальным сервер.

sp_addlinkedsrvlogin не может быть выполнен из пользовательской транзакции. Права доступа

Только члены сисадмина и securityadmin фиксированных ролей сервера может выполнять sp_addlinkedsrvlogin.

Troubleshooting

source

Смежные вопросы