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

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

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

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

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


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

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

пока не очень
Код: 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
19.12.2019, 15:38
    #39905635
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
D2010 ado sql windows авторизация + пароль
Код: 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
19.12.2019, 16:21
    #39905678
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
D2010 ado sql windows авторизация + пароль
_Vasilisk_,

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

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


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