Delphi 通过提供凭据进行程序登录
考虑windows用户A(具有管理权限)和B(受限访问权限)。 也是位于服务器上的数据文件夹,只有用户a有权访问该文件夹 我面临的挑战是通过用户B登录windows,并通过我的Delphi应用程序尝试通过编程方式提供用户A的凭据来访问数据文件夹Delphi 通过提供凭据进行程序登录,delphi,delphi-2010,delphi-6,Delphi,Delphi 2010,Delphi 6,考虑windows用户A(具有管理权限)和B(受限访问权限)。 也是位于服务器上的数据文件夹,只有用户a有权访问该文件夹 我面临的挑战是通过用户B登录windows,并通过我的Delphi应用程序尝试通过编程方式提供用户A的凭据来访问数据文件夹 是否有允许我实现此目标的API函数?您可以使用和函数模拟已登录的用户访问数据文件夹 试试这个样品 {$APPTYPE CONSOLE} uses Windows, SysUtils; function ConnectAs(const lpsz
是否有允许我实现此目标的API函数?您可以使用和函数模拟已登录的用户访问数据文件夹 试试这个样品
{$APPTYPE CONSOLE}
uses
Windows,
SysUtils;
function ConnectAs(const lpszUsername, lpszPassword: string): Boolean;
var
hToken : THandle;
begin
Result := LogonUser(PChar(lpszUsername), nil, PChar(lpszPassword), LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, hToken);
if Result then
Result := ImpersonateLoggedOnUser(hToken)
else
RaiseLastOSError;
end;
begin
try
ConnectAs('Admin','Password');
//do something here
//terminates the impersonation
RevertToSelf;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
readln;
end.
那么,用户B正在运行应用程序,但应用程序需要访问只有用户a才能访问的资源?可能有一种方法可以在代码中模拟权限,但我认为更好的做法是使用单独的服务,该服务使用提升的权限(特定的服务帐户)运行,而该服务实际上是访问相关资源的服务。然后应用程序将访问该服务以获取所需的内容。我需要数据文件夹只能通过我的应用程序访问。在后台运行服务将始终授予对该文件夹的访问权限。@Khatchig通过COM使用特定用户,您的应用程序将模拟该用户并使用用户权限访问windows文件夹。我不是说这是最好的解决方案,但它会起作用。你需要做的唯一一件事就是授予该文件夹中的应用程序用户权限。+1很好的解决方案,它适用于所有windows版本?唯一的问题是知道用户和密码,因为它可以由操作系统管理员更改这些功能是在XP+1中引入的;模仿是解决这类问题的方法。在开始模拟过程之前,只需向用户询问目标用户名/密码。