OPENROWSET завершается с ошибкой "Неверная спецификация авторизации"
Я пытаюсь использовать OPENROWSET
в SQL Server 2008 SP1:
SELECT *
FROM OPENROWSET(
'SQLOLEDB',
'Data Source=hydrogen;User ID=scratch;Password=scratch;',
'select * from users')
- Поставщик OLE DB:
SQLOLEDB
- Строка подключения:
Data Source=hydrogen;User ID=scratch;Password=scratch;
- Текст команды:
select * from users
Запрос не выполняется с:
Поставщик OLE DB "SQLNCLI10" для связанного сервера "(null)" вернул сообщение "Неверная спецификация авторизации".
Поставщик OLE DB "SQLNCLI10" для связанного сервера "(null)" возвратил сообщение "Недопустимый атрибут строки подключения".
Msg 7399, уровень 16, состояние 1, строка 1
Поставщик OLE DB "SQLNCLI10" для связанного сервера "(null)" сообщил об ошибке. Ошибка аутентификации.Сообщение 7303, уровень 16, состояние 1, строка 1 Невозможно инициализировать объект источника данных поставщика OLE DB "SQLNCLI10" для связанного сервера "(null)".
Примечание. Сервер и учетные данные, конечно, правильные.
Но я не использую SQLNCLI10
Недоумение вызывает то, что ошибка предполагает, что кто-то использует поставщик OLE DB SQLNCLI11 (собственный клиент SQL Server 11.0)
Поставщик OLE DB "SQLNCLI10" для связанного сервера "(null)" вернул сообщение
Это не поставщик OLEDB, который я использую.
- я не использую OLE DB Provider:
SQLNCLI10
(Собственный клиент SQL Server 11.0) - я использую поставщика OLE DB:
SQLOLEDB
(Поставщик Microsoft OLE DB для SQL Server)
Так что что-то очень не так.
Случайные попытки
Конечно, мы можем попробовать случайные вещи:
укажите провайдера в строке подключения
SELECT * FROM OPENROWSET( 'SQLOLEDB', 'Provider=SQLOLEDB;Data Source=hydrogen;User ID=scratch;Password=scratch;', 'select * from users')
попробуйте использовать
SQLNCLI10
Поставщик OLE DB:SELECT * FROM OPENROWSET( 'SQLNCLI10', 'Data Source=hydrogen;User ID=scratch;Password=scratch;', 'select * from users')
попробуйте использовать
SQLNCLI10
Поставщик OLE DB:SELECT * FROM OPENROWSET( 'SQLNCLI10', 'Data Source=hydrogen;User ID=scratch;Password=scratch;', 'select * from users')
попробуйте использовать встроенную безопасность
SELECT * FROM OPENROWSET( 'SQLOLEDB', 'Data Source=hydrogen;Integrated Security=SSPI;', 'select * from users')
В дополнение к тому, что они не работают, эти попытки не отвечают на мой вопрос:
Почему происходит сбой аутентификации?
Больше отладки
Использовать недействительного провайдера - чтобы доказать, что он игнорирует моего провайдера.
Сервер, кажется, настаивает на том, что я использую "родной клиент". Что произойдет, если я запросю недопустимого поставщика OLE DB - например asdfasf
:
SELECT *
FROM OPENROWSET(
'qqqqqq',
'Data Source=hydrogen;User ID=scratch;Password=scratch;',
'select * from users')
Msg 7403, Level 16, State 1, Line 1
The OLE DB provider "qqqqqq" has not been registered.
Ну, это имеет смысл. Так что только иногда игнорирую моего провайдера.
Используйте действительный не-SQL Server провайдер:
Что делать, если я использую действительный провайдер, который не является SQL Server:
SELECT *
FROM OPENROWSET(
'Microsoft.Jet.OLEDB.4.0',
'Data Source=hydrogen;User ID=scratch;Password=scratch;',
'select * from users')
OLE DB provider "Microsoft.Jet.OLEDB.4.0" for linked server "(null)" returned message "Could not find installable ISAM.".
Msg 7303, Level 16, State 1, Line 1
Cannot initialize the data source object of OLE DB provider "Microsoft.Jet.OLEDB.4.0" for linked server "(null)".
В этом есть смысл; Офис не установлен.
Свойства строки подключения для провайдера SQLNCLI11
Набор недвижимости DBPROPSET_DBINIT
| PropertyID | Description | Type
|------------|-------------------------|---------|
| 7 | Integrated Security | VT_BSTR |
| 9 | Password | VT_BSTR |
| 11 | Persist Security Info | VT_BOOL |
| 12 | User ID | VT_BSTR |
| 59 | Data Source | VT_BSTR |
| 60 | Window Handle | VT_I4 |
| 64 | Prompt | VT_I2 |
| 66 | Connect Timeout | VT_I4 |
| 186 | Locale Identifier | VT_I4 |
| 160 | Extended Properties | VT_BSTR |
| 200 | Asynchronous Processing | VT_I4 |
| 233 | Initial Catalog | VT_BSTR |
| 248 | OLE DB Services | VT_I4 |
| 284 | General Timeout | VT_I4 |
Набор недвижимости DBPROPSET_SQLSERVERDBINIT
| PropertyID | Description | Type |
|------------|-----------------------------------------|---------|
| 4 | Current Language | VT_BSTR |
| 5 | Network Address | VT_BSTR |
| 6 | Network Library | VT_BSTR |
| 7 | Use Procedure for Prepare | VT_I4 |
| 8 | Auto Translate | VT_BOOL |
| 9 | Packet Size | VT_I4 |
| 10 | Application Name | VT_BSTR |
| 11 | Workstation ID | VT_BSTR |
| 12 | Initial File Name | VT_BSTR |
| 13 | Use Encryption for Data | VT_BOOL |
| 14 | Replication server name connect option | VT_BSTR |
| 15 | Tag with column collation when possible | VT_BOOL |
| 16 | MARS Connection | VT_BOOL |
| 18 | Failover Partner | VT_BSTR |
| 19 | Old Password | VT_BSTR |
| 20 | DataTypeCompatibility | VT_UI2 |
| 21 | Trust Server Certificate | VT_BOOL |
| 22 | Server SPN | VT_BSTR |
| 23 | Failover Partner SPN | VT_BSTR |
| 24 | Application Intent | VT_BSTR |
Сравнение свойств OLE DB, поддерживаемых SQLOLEDB и SQLNCLI11
Набор недвижимости: DBPROPSET_DBINIT
| PropertyID | Description | Type | SQLOLEDB | SQLNCLI11 |
|------------|-------------------------|---------|-----------|------------|
| 7 | Integrated Security | VT_BSTR | Yes | Yes |
| 9 | Password | VT_BSTR | Yes | Yes |
| 11 | Persist Security Info | VT_BOOL | Yes | Yes |
| 12 | User ID | VT_BSTR | Yes | Yes |
| 59 | Data Source | VT_BSTR | Yes | Yes |
| 60 | Window Handle | VT_I4 | Yes | Yes |
| 64 | Prompt | VT_I2 | Yes | Yes |
| 66 | Connect Timeout | VT_I4 | Yes | Yes |
| 160 | Extended Properties | VT_BSTR | Yes | Yes |
| 186 | Locale Identifier | VT_I4 | Yes | Yes |
| 200 | Asynchronous Processing | VT_I4 | | Yes |
| 233 | Initial Catalog | VT_BSTR | Yes | Yes |
| 248 | OLE DB Services | VT_I4 | Yes | Yes |
| 284 | General Timeout | VT_I4 | Yes | Yes |
Набор недвижимости: DBPROPSET_SQLSERVERDBINIT
| PropertyID | Description | Type | SQLOLEDB | SQLNCLI11 |
|------------|-----------------------------------------|---------|-----------|-----------|
| 4 | Current Language | VT_BSTR | Yes | Yes |
| 5 | Network Address | VT_BSTR | Yes | Yes |
| 6 | Network Library | VT_BSTR | Yes | Yes |
| 7 | Use Procedure for Prepare | VT_I4 | Yes | Yes |
| 8 | Auto Translate | VT_BOOL | Yes | Yes |
| 9 | Packet Size | VT_I4 | Yes | Yes |
| 10 | Application Name | VT_BSTR | Yes | Yes |
| 11 | Workstation ID | VT_BSTR | Yes | Yes |
| 12 | Initial File Name | VT_BSTR | Yes | Yes |
| 13 | Use Encryption for Data | VT_BOOL | Yes | Yes |
| 14 | Replication server name connect option | VT_BSTR | Yes | Yes |
| 15 | Tag with column collation when possible | VT_BOOL | Yes | Yes |
| 16 | MARS Connection | VT_BOOL | | Yes |
| 18 | Failover Partner | VT_BSTR | | Yes |
| 19 | Old Password | VT_BSTR | | Yes |
| 20 | DataTypeCompatibility | VT_UI2 | | Yes |
| 21 | Trust Server Certificate | VT_BOOL | | Yes |
| 22 | Server SPN | VT_BSTR | | Yes |
| 23 | Failover Partner SPN | VT_BSTR | | Yes |
| 24 | Application Intent | VT_BSTR | | Yes |
1 ответ
Если вы очистите пробелы в строке подключения, она должна работать,
SELECT a.*
FROM OPENROWSET('SQLNCLI', 'Server=SQLOLEDB;Database=hydrogen;UID=scratch;PWD=scratch',
'SELECT *
FROM Users') AS a;