- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 Delphi 7 应用程序的特定情况下遇到了问题。
我有 ADOConnection,它使用一些用户名连接到我的 MS SQL 服务器并通过 - SQL 身份验证。问题是 MS SQL 登录是使用“用户下次登录时必须更改密码”标志创建的,这使得 ADO 连接无法连接,并出现错误消息“18488 - 用户 '%.*ls' 登录失败。原因:密码必须更改帐户。”
通常,在 MS SQL Management Studio 中会显示更改密码提示,用户可以输入新密码。问题是我应该怎么做才能在我的应用程序中强制该用户更改密码?我能够捕获错误号并提示更改登录信息,但是接下来该怎么办呢?连接字符串中没有标志可用于将密码/重置更改为新密码(如旧密码和新密码)。那我该怎么办?
有人可以帮忙吗?
最佳答案
当您捕获 18488 错误时,您需要显示自己的“更改密码”对话框,并通过以下方式使用连接字符串属性 “旧密码”
/“密码”
SQL Native Client
作为您的提供程序(即 Provider=SQLNCLI10
或 SQLNCLI.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 是一个问题,我可以想到更多选项:
sa
),并更改用户/登录密码。这意味着您需要在客户端计算机上保存该用户名/密码(恕我直言,从安全角度来看,这是个坏主意,但可能可行)。 - 未测试关于sql-server - Delphi 7 - 由于 SQL "must change password"标志,ADOConnection 无法连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25120662/
我刚刚决定解决 MSSQL 数据库服务器重新启动时的“连接”问题,并且连接永远断开。 到目前为止,唯一的解决方案是重新启动程序,但在距离很远的服务器上并不总是那么容易(并且必须首先检测到问题)。 **
我有以下代码引发 EConvertError -“无法将 TAdoConnection 分配给 TAdoConnection” var wTmpADOConn : TADOConnec
这个问题已经有答案了: ADO Connection Timeout problem (2 个回答) 已关闭 6 年前。 我有一个控制服务器连接的功能。如果 ado 在 5 秒内无法连接,则应该给出错
我正在使用TIdHTTPServer创建一个简单的Indy网络服务器。几乎所有请求服务器都需要与数据库通信(通过TAdoConnection)。看到数据库连接在资源方面有点昂贵,我想创建一个池机制来重
我正在尝试打开一个 ADOConnection 组件。数据库为 MDB 格式。我使用 JET 访问它。 每当我在代码中使用 AdoConnection.Open 时,都会弹出窗口并询问用户 ID 和密
Delphi XE3,Win7教授 我需要写入 DBASE 3(旧格式)文件,以便为类似 DOS 的应用程序(Clipper?)导出数据。好吧,我想:MS DBASE 驱动程序可以做到这一点。 但我对
我需要通过 TADOConnection 连接到 Excel 表,但我不知道要在 ConnectionString 属性中写入什么内容。对于 Excel 版本 8,我使用 Jet,对于 12,我使用
如果我执行类似的查询 Update Table Set aField = 1 Where tablePk = 1 我可以从AdoConneciton的ExecuteComplete事件中获取受影响的记
我的一些 MS SQL 存储过程使用“print”命令生成消息。在我的 Delphi 2007 应用程序中,它使用 TADOConnection 连接到 MS SQL,如何查看这些“打印”命令的输出?
我在 Delphi 7 应用程序的特定情况下遇到了问题。 我有 ADOConnection,它使用一些用户名连接到我的 MS SQL 服务器并通过 - SQL 身份验证。问题是 MS SQL 登录是使
我是一名优秀的程序员,十分优秀!