gpt4 book ai didi

sql-server - Delphi 7 - 由于 SQL "must change password"标志,ADOConnection 无法连接

转载 作者:行者123 更新时间:2023-12-03 15:12:52 24 4
gpt4 key购买 nike

我在 Delphi 7 应用程序的特定情况下遇到了问题。

我有 ADOConnection,它使用一些用户名连接到我的 MS SQL 服务器并通过 - SQL 身份验证。问题是 MS SQL 登录是使用“用户下次登录时必须更改密码”标志创建的,这使得 ADO 连接无法连接,并出现错误消息“18488 - 用户 '%.*ls' 登录失败。原因:密码必须更改帐户。”

通常,在 MS SQL Management Studio 中会显示更改密码提示,用户可以输入新密码。问题是我应该怎么做才能在我的应用程序中强制该用户更改密码?我能够捕获错误号并提示更改登录信息,但是接下来该怎么办呢?连接字符串中没有标志可用于将密码/重置更改为新密码(如旧密码和新密码)。那我该怎么办?

有人可以帮忙吗?

最佳答案

当您捕获 18488 错误时,您需要显示自己的“更改密码”对话框,并通过以下方式使用连接字符串属性 “旧密码”/“密码” SQL Native Client 作为您的提供程序(即 Provider=SQLNCLI10SQLNCLI.1)。

这是我用来测试这个的一个小代码:

procedure TForm1.Button1Click(Sender: TObject);
begin
// 12345 is the "old password"
ADOConnection1.ConnectionString := 'Provider=SQLOLEDB.1;Password=12345;User ID=test;Initial Catalog=test;Data Source=127.0.0.1;Persist Security Info=True;';
try
ADOConnection1.Open;
except
if Assigned(ADOConnection1.Errors) and (ADOConnection1.Errors.Count > 0) and
(ADOConnection1.Errors.Item[0].NativeError = 18488) then
begin
// show your "change password" dialog... new password is 67890
ADOConnection1.ConnectionString := 'Provider=SQLNCLI10.1;Old Password=12345;Password=67890;User ID=test;Initial Catalog=test;Data Source=127.0.0.1;Persist Security Info=True;';
ADOConnection1.Open; // this will login and change the password

// OPTIONAL (unless you use SQLNCLI10.1 anyway)
// you may close the connection and re-open with your original provider and new password
ADOConnection1.Close;
ADOConnection1.ConnectionString := 'Provider=SQLOLEDB.1;Password=67890;User ID=test;Initial Catalog=test;Data Source=127.0.0.1;Persist Security Info=True;';
ADOConnection1.Open;
end
else
raise;
end;
ShowMessage('Login OK');
end;

我的答案是基于这些阅读:

当您强制密码过期并在 SQL Server 上使用“用户必须在下次登录时更改密码”选项时,这是从客户端更改密码的官方方法。

<小时/>

如果在用户计算机上安装 SQL Server Native Client 是一个问题,我可以想到更多选项:

  1. 创建一个网络服务(在您的服务器上),负责更改用户密码(提供旧/新密码)并将状态返回给您的客户端。
  2. 以“ super 用户”身份连接(例如 sa),并更改用户/登录密码。这意味着您需要在客户端计算机上保存该用户名/密码(恕我直言,从安全角度来看,这是个坏主意,但可能可行)。 - 未测试
  3. 不要创建带有“用户下次登录时必须更改密码”的 SQL 登录。这是我最喜欢的解决方案。

关于sql-server - Delphi 7 - 由于 SQL "must change password"标志,ADOConnection 无法连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25120662/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com