Tim*_*ver 7 c# sql passwords db2 ibm-midrange
我有一个C#.NET应用程序,必须能够更改IBM System i(iSeries/AS400)计算机上的用户密码.我目前正在使用以下代码使用IBM专有的cwbx.dll执行此操作.
using cwbx;
public void ChangePassword(string system, string user, string currentPassword, string newPassword)
{
AS400System as400 = new AS400System();
as400.Define(system);
try
{
as400.ChangePassword(user, currentPassword, newPassword);
}
finally
{
as400.Disconnect(cwbcoServiceEnum.cwbcoServiceAll);
}
}
Run Code Online (Sandbox Code Playgroud)
这很好用,但迫使我(以及应用程序的所有用户)对cwbx.dll采取专有依赖.我想消除这种依赖.
有没有办法使用类似于MS SQL Server alter login
机制的SQL更改密码?
我知道我可以使用IBM.Data.DB2.iSeries .NET数据提供程序通过使用以下代码从SQL 集成DB2通用数据库for iSeries与iSeries与Microsoft ADO .NET调用程序来实现此目的.
/// <summary>
/// Call a program directly on the iSeries with parameters
/// </summary>
public string CallPgm(string cmdtext)
{
string rc = " ";
// Construct a string which contains the call to QCMDEXC.
// Because QCMDEXC uses single quote characters, we must
// delimit single quote characters in the command text
// with an extra single quote.
string pgmParm = "CALL QSYS/QCMDEXC('"
+ cmdtext.Replace("'", "''")
+ "', "
+ cmdtext.Length.ToString("0000000000.00000")
+ ")";
// Create a command to execute the program or command.
iDB2Command cmd = new iDB2Command(pgmParm, _connection);
try
{
cmd.ExecuteNonQuery();
}
catch (iDB2Exception ex)
{
rc = ex.Message;
}
// Dispose the command since we're done with it.
cmd.Dispose();
// Return the success or failure of the call.
return rc;
}
Run Code Online (Sandbox Code Playgroud)
这种技术的问题是我必须先有一个连接才能尝试更改密码.不幸的是,如果用户的密码已过期,则无法连接到数据库(iDB2CommErrorException
),因此无法更改其密码.
有没有办法在没有cwbx.dll的情况下实现这个目标?
要从 .NET 应用程序以编程方式更改 IBM i(又名 System i/iSeries/AS400)上的过期密码,而不依赖于本地安装的IBM i Access for Windows(对于 cwbx.dll),请考虑以下选项之一。
以编程方式建立与 IBM i 的 Telnet 连接,并传输模仿执行更改密码操作所需的用户输入的字符序列。*请注意,如果没有进一步配置,这是不安全的。
IBM Toolbox for Java 包含一个 OS/400 或 i5/OS Java 类,可在 Java 程序中使用该类来更改密码。该类的 Java 帮助可在 iSeries 信息中心和以下 Web 站点中找到:http://publib.boulder.ibm.com/pubs/html/as400/v5r1/ic2924/index.htm
以下示例演示如何使用IBM Toolbox for Java对过期密码执行更改密码操作。这可以从 C# 程序调用System.Diagnostics.Process.Start("java ChangeIBMiPassword hostname username oldpw newpw");
(假设有适当的类路径)。另请注意,可以通过IKVM.NET 库直接从 .NET 使用 Java API 。
import com.ibm.as400.access.AS400;
public class ChangeIBMiPassword {
public static void main(String[] args) {
if (args.length < 4)
System.exit(-1);
String host = args[0];
String user = args[1];
String oldpw = args[2];
String newpw = args[3];
AS400 sys = new AS400(host, user);
try {
sys.changePassword(oldpw, newpw);
} catch (Exception e) {
e.printStackTrace();
System.exit(-1);
}
}
}
Run Code Online (Sandbox Code Playgroud)
编写在 IBM i 上运行的安全 Web 服务。该网络服务将接受用户名、当前密码和新密码的参数。当用户调用此Web服务时,它将代表调用程序执行更改密码操作。
编写不在 IBM i 上运行的安全 Web 服务。该网络服务将接受用户名、当前密码和新密码的参数。当用户调用此 Web 服务时,它将使用 cwbx 库代表调用程序执行更改密码操作。这并没有完全消除对 cwbx.dll 的依赖,但它将其降低到单个系统。
http://www-01.ibm.com/support/docview.wss?uid=nas10043a8b0e0544f1386256ba100659bcd
归档时间: |
|
查看次数: |
2960 次 |
最近记录: |