7

IBM System i (iSeries / AS400) マシンでユーザー パスワードを変更できる必要がある C#.NET アプリケーションがあります。現在、次のコードを使用して、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);
    }
}

これは十分に機能しますが、私 (およびアプリケーションのすべてのユーザー) はcwbx.dllに独自の依存関係を持たなければなりません。この依存関係を解消したいと考えています。

MS SQL Server のalter loginメカニズムと同様に、SQL を使用してパスワードを変更する方法はありますか?

IBM.Data.DB2.iSeries .NET データ プロバイダーを使用して、 DB2 Universal Universal Database for iSeries と for iSeries と Microsoft ADO .NET の統合の次のコードを使用して SQL からプログラムを呼び出すことにより、これを実現できることを私は知っています。

/// <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;
}

この手法の問題点は、パスワードを変更しようとする前に既存の接続が必要なことです。残念ながら、ユーザーのパスワードの有効期限が切れている場合、ユーザーはデータベース ( iDB2CommErrorException) に接続できず、その結果、パスワードを変更できません。

cwbx.dll なしでこれを達成する方法はありますか?

4

2 に答える 2

4

IBM i Access for Windows (cwbx.dll 用)のローカル インストールに依存せずに、.NET アプリケーションから IBM i (別名 System i / iSeries / AS400) の有効期限が切れたパスワードをプログラムで変更するには、次のいずれかのオプションを検討してください。 .

  • IBM i への Telnet 接続をプログラムで確立し、パスワード変更操作を実行するために必要なユーザー入力を模倣する一連の文字を送信します。*これは、さらに構成しないと安全ではないことに注意してください。

  • IBM Toolbox for Java には、パスワードを変更するために Java プログラムで使用できる OS/400 または i5/OS Java クラスが含まれています。このクラスの Java ヘルプは、次の Web サイトの iSeries Information Center で入手できます

    次の例は、 IBM Toolbox for Javaを使用して期限切れのパスワードに対してパスワード変更操作を実行する方法を示しています。System.Diagnostics.Process.Start("java ChangeIBMiPassword hostname username oldpw newpw");これは、 (適切なクラスパスを想定して)を使用して C# プログラムから呼び出すことができます。また、 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);
        }
    }
}
  • IBM i 上で実行されるセキュアな Web サービスを作成します。この Web サービスは、ユーザー名、現在のパスワード、および新しいパスワードのパラメーターを受け入れます。ユーザーがこの Web サービスを呼び出すと、呼び出し元のプログラムに代わってパスワードの変更操作が実行されます。

  • IBM i 上で実行されないセキュアな Web サービスを作成します。この Web サービスは、ユーザー名、現在のパスワード、および新しいパスワードのパラメーターを受け入れます。ユーザーがこの Web サービスを呼び出すと、cwbx ライブラリーを使用して、呼び出しプログラムに代わってパスワードの変更操作を実行します。これにより、cwbx.dll への依存が完全になくなるわけではありませんが、単一のシステムにまで低下します。

http://www-01.ibm.com/support/docview.wss?uid=nas10043a8b0e0544f1386256ba100659bcd

于 2013-04-03T15:42:12.827 に答える
0

CHGUSRPRF を呼び出すストアード・プロシージャーまたは関数を作成します。十分に高い権限の下で実行する必要がありますが (その結果、システムがさらなるリスクにさらされます)、SQL とのやり取りは簡単になります。非常に疑わしい考えのようです。

于 2014-04-06T14:47:06.333 に答える