powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / D2010 ado sql windows авторизация + пароль
7 сообщений из 7, страница 1 из 1
D2010 ado sql windows авторизация + пароль
    #39905222
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги, подскажите

Прога запускается из под одной учётной записи
Надо через Адо законнектиться к скл-серверу через другую ад-шную учетку
Имя и пароль есть

В шарпе делал как-то
...
Рейтинг: 0 / 0
D2010 ado sql windows авторизация + пароль
    #39905223
Tactical Nuclear Penguin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx
Коллеги, подскажите

Прога запускается из под одной учётной записи
Надо через Адо законнектиться к скл-серверу через другую ад-шную учетку
Имя и пароль есть

В шарпе делал как-то


может это поможет?
...
Рейтинг: 0 / 0
D2010 ado sql windows авторизация + пароль
    #39905226
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tactical Nuclear Penguin,

Спасибо, посмотрю
Вот пример, пусть подлежит
http://delphimaster.net/view/4-56971
...
Рейтинг: 0 / 0
D2010 ado sql windows авторизация + пароль
    #39905583
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробовал такой пример

пока не очень
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
var SI:_STARTUPINFOA;
PI:_PROCESS_INFORMATION;
UserName,Domain,Password,AppName: PChar;
PH: Cardinal;
PT: PHandle;
begin
  SI.cb:=sizeof(_STARTUPINFOA);
  SI.lpReserved:=nil;
  SI.lpDesktop:=nil;
  SI.lpTitle:=nil;
  SI.cbReserved2:=0;
  UserName:='Новое Имя';
  Domain:='домен';
  Password:='Новый пароль';

  if LogonUser(UserName,Domain,Password,LOGON32_LOGON_INTERACTIVE,LOGON32_PROVIDER_DEFAULT,PH) then
  begin
    if ImpersonateLoggedOnUser(PH) then ShowMessage ('ImpersonateLoggedOnUser done')
    else ShowMessage('ImpersonateLoggedOnUser Error');
  end;



  ShowMessage(GetActiveUserName); // это моя функция выдает текущего юзера - выдаёт 'Новое Имя'
  ADOConnection1.Connected := true;
  // sqltext = 'select CURRENT_USER, SYSTEM_USER' - выдаёт то имя, с которым запущено программа
  ADOQuery1.Open;

end;
...
Рейтинг: 0 / 0
D2010 ado sql windows авторизация + пароль
    #39905635
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
type
  PLogonUserThreadInfo = ^TLogonUserThreadInfo;
  TLogonUserThreadInfo = record
    Token: THandle;
    Handle: THandle;
  end;

function LogonUserThread(const AUserName, ADomain, APassword: string;
  ALogonType: Cardinal; AThreadHandle: THandle): Pointer;
var
  LLogonInfo: PLogonUserThreadInfo absolute Result;
  LLogonToken: THandle;
  LImpersonateToken: THandle;
begin
  GetMem(LLogonInfo, SizeOf(LLogonInfo^));
  try
    LLogonInfo^.Token := 0;
    if not OpenThreadToken(AThreadHandle, TOKEN_IMPERSONATE, True, LLogonInfo^.Token) and
       (GetLastError <> ERROR_NO_TOKEN)
    then
      RaiseLastOSError;
    try
      Win32Check(LogonUser(PChar(AUserName), PChar(ADomain), PChar(APassword),
        ALogonType, LOGON32_PROVIDER_DEFAULT, LLogonToken));
      try
        Win32Check(DuplicateToken(LLogonToken, SecurityImpersonation, @LImpersonateToken));
        try
          Win32Check(SetThreadToken(@AThreadHandle, LImpersonateToken));
        finally
          CloseHandle(LImpersonateToken);
        end;
      finally
        CloseHandle(LLogonToken);
      end;
    except
      CloseHandle(LLogonInfo^.Token);
      raise;
    end;
    LLogonInfo^.Handle := AThreadHandle;
  except
    if LLogonInfo^.Token <> 0 then
      CloseHandle(LLogonInfo^.Token);
    FreeMem(LLogonInfo);
    raise;
  end;
end;

procedure LogoffUserThread(AData: Pointer);
var
  LLogonInfo: PLogonUserThreadInfo absolute AData;
begin
  try
    Win32Check(SetThreadToken(@LLogonInfo^.Handle, LLogonInfo^.Token));
  finally
    if LLogonInfo^.Token <> 0 then
      CloseHandle(LLogonInfo^.Token);
    FreeMem(LLogonInfo);
  end;
end;

использование
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
var
  LPtr: Pointer;
begin
  LPtr := LogonUserThread('user', '', 'password', GetCurrentThread);
  try
    ........
  finally
    LogoffUserThread(LPtr);
  end;
end;
...
Рейтинг: 0 / 0
D2010 ado sql windows авторизация + пароль
    #39905678
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

спасибо большое
на первый взгляд работает
только добавил LOGON32_LOGON_INTERACTIVE

LPtr := LogonUserThread(UserName, Domain, password, LOGON32_LOGON_INTERACTIVE, GetCurrentThread);
...
Рейтинг: 0 / 0
D2010 ado sql windows авторизация + пароль
    #39905705
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx
только добавил LOGON32_LOGON_INTERACTIVE
Ну да. Это забыл
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / D2010 ado sql windows авторизация + пароль
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]