COM+ безопасность
От: Vovaman  
Дата: 08.04.04 12:51
Оценка:
Проблема:

Клиент --> COM+ компонент --> SQL Server

Все трое на разных машинах. На всех машинах — W2k.
Клиент = скрипт.vbs, вызывающий метод COM+, который коннектится через ADO к SQL-серверу.
СOM+ приложение работает под аккаунтом, который Trusted for delegation.
Право на доступ к базе у пользователя, запускающего скрипт, точно есть.
Уровень аутентификации COM+ приложения — Packet Privacy, уровень олицетворения — Delegate.
SQL-сервер работает со встроенной в Windows безопасностью.

Необходимо:
коннект к SQL-серверу должен происходить с контекстом безопасности клиента.

Однако такого не происходит, вываливается ошибка (при коннекте к SQL-серверу из COM+ rjvgjytynf):
Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'.

Что мне надо писать в методе компонента, делающего коннект к базе ????

Что написано сейчас:
1) клиент (примерно) :

Dim oDL, oCon, sClasses, oTest, sConn

Set oDL = CreateObject ("DataLinks")
Set oCon = oDL.PromptNew

' вызываем компонент
Set oTest = CreateObject ("COMPComps2.COMPTest")
sConn = oCon.ConnectionString
' должны получить строку из базы от компонента
sClasses = oTest.GetClasses (sConn)

MsgBox sClasses, vbExclamation

2) метод GetClasses кокласса COMPComps2.COMPTest (примерно):

STDMETHODIMP CCOMPTest::GetClasses(BSTR strConnectStr, BSTR* pClasses)
{
// TODO: Add your implementation code here
try
{
::CoImpersonateClient ();

// коннектимся к базе со строкой strConnectStr и берем оттуда к-нибудь данные

::RevertToSelfEx ();
}
catch (_com_error &e)
{
// тут пуляем клиенту ошибку
} // try

return S_OK;
}
Re: COM+ безопасность
От: Tom Россия http://www.RSDN.ru
Дата: 08.04.04 14:01
Оценка:
На клиенте установить Default Impersonation Level в Delegate
Народная мудрось
всем все никому ничего(с).
Re[2]: COM+ безопасность
От: Vovaman  
Дата: 08.04.04 14:13
Оценка:
Здравствуйте, Tom, Вы писали:

Tom>На клиенте установить Default Impersonation Level в Delegate


Уже
Re: COM+ безопасность
От: Ведмедь Россия  
Дата: 09.04.04 07:09
Оценка:
Здравствуйте, Vovaman, Вы писали:

V>Проблема:


V>Клиент --> COM+ компонент --> SQL Server


V>Все трое на разных машинах. На всех машинах — W2k.

V>Клиент = скрипт.vbs, вызывающий метод COM+, который коннектится через ADO к SQL-серверу.
V>СOM+ приложение работает под аккаунтом, который Trusted for delegation.
V>Право на доступ к базе у пользователя, запускающего скрипт, точно есть.
V>Уровень аутентификации COM+ приложения — Packet Privacy, уровень олицетворения — Delegate.
V>SQL-сервер работает со встроенной в Windows безопасностью.

Во первых здесь должно хватить Impersonate
А для Delegate надо еще знать настройки домена.
Да пребудет с тобой Великий Джа
Re[2]: COM+ безопасность
От: Vovaman  
Дата: 09.04.04 08:54
Оценка:
Здравствуйте, Ведмедь, Вы писали:

В>Здравствуйте, Vovaman, Вы писали:


V>>Проблема:


V>>Клиент --> COM+ компонент --> SQL Server


V>>Все трое на разных машинах. На всех машинах — W2k.

V>>Клиент = скрипт.vbs, вызывающий метод COM+, который коннектится через ADO к SQL-серверу.
V>>СOM+ приложение работает под аккаунтом, который Trusted for delegation.
V>>Право на доступ к базе у пользователя, запускающего скрипт, точно есть.
V>>Уровень аутентификации COM+ приложения — Packet Privacy, уровень олицетворения — Delegate.
V>>SQL-сервер работает со встроенной в Windows безопасностью.

В>Во первых здесь должно хватить Impersonate

В>А для Delegate надо еще знать настройки домена.

1) Какие настройки домена влияют на Delegate?
2) Impersonate хватило бы только тогда, когда SQL-сервер работает с COM+ компонентом на одной машине
Re[3]: COM+ безопасность
От: Ведмедь Россия  
Дата: 09.04.04 09:43
Оценка:
Здравствуйте, Vovaman, Вы писали:


В>>Во первых здесь должно хватить Impersonate

В>>А для Delegate надо еще знать настройки домена.

V>1) Какие настройки домена влияют на Delegate?


Домен должен быть 2000 и выше, включен Керберос, а не NTLM. Остальное не знаю.

V>2) Impersonate хватило бы только тогда, когда SQL-сервер работает с COM+ компонентом на одной машине


Если получится все, то можешь описать, что именно ты настраивал?
Да пребудет с тобой Великий Джа
Re[4]: COM+ безопасность
От: Vovaman  
Дата: 09.04.04 11:31
Оценка:
Здравствуйте, Ведмедь, Вы писали:

В>Здравствуйте, Vovaman, Вы писали:



В>>>Во первых здесь должно хватить Impersonate

В>>>А для Delegate надо еще знать настройки домена.

V>>1) Какие настройки домена влияют на Delegate?


В>Домен должен быть 2000 и выше, включен Керберос, а не NTLM. Остальное не знаю.


V>>2) Impersonate хватило бы только тогда, когда SQL-сервер работает с COM+ компонентом на одной машине


В>Если получится все, то можешь описать, что именно ты настраивал?


Домен 2000, Kerberos включен, но чего-то не хватает.
Попробовал, когда SQL-сервер на той же машине, что и COM+ компонент — все в порядке, коннект к SQL-серверу приходит под аккаунтом клиента, хоть компонент работает под другим аккаунтом — все как надо.
Но если SQL на другой машине — контекст не передается.
Тут, похоже, два возможных решения:
1) либо недонастроил включение Kerberos'а (хотя все галки выставлял, как в статье MSDN написано)
2) либо надо вызвать в компоненте что-то типа CoSetProxyBlanket перед коннектом к базе.

Я когда журнал сообщений смотрел на машине, где компонент крутится, то последовательность была такая:
а) нормальный логон клиента на машину компонента, где крутится компонент (пакет проверки — керберос)
б) неверный логон аккаунта, под которым работает компонент на ту же машину и пакет проверки уже — Negotiate


Если получится, опишу.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.