当前位置: 首页 > 知识库问答 >
问题:

在IBM System i(又名iSeries/AS400)上有没有一种使用SQL更改用户密码的方法?

法玮
2023-03-14

我有一个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);
    }
}

这工作得很好,但迫使我(和应用程序的所有用户)对cwbx.dll采取专有依赖关系。我想消除这种依赖。

是否有任何方法可以使用类似于MS SQL Server的alter login机制的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有什么方法可以实现这一点吗?

共有1个答案

陈松
2023-03-14

若要以编程方式从.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 Information Center(以下网站)中获得:http://publib.boulder.ibm.com/pubs/html/as400/v5r1/ic2924/index.htm

    下面的示例演示如何使用IBM Toolbox for Java对过期密码执行更改密码操作。这可以使用system.diagnostics.process.start(“java ChangeIBMiPassword hostname username oldpw newpw”);(假设有适当的类路径)从C#程序调用。还要注意,可以直接从.NET使用Java API和IKVM.NET库。

    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的依赖,但却将其降低到单个系统

  •  类似资料:
    • 寻找最佳实践以获得随时间变化的数据增量。 没有可用的时间戳,无法编程时间戳! 问题:我不确定触发器是否是可行的方法,因为触发器会带来大量的开销。 在考虑开销和性能的情况下,有谁能为DB2增量提供最佳实践建议吗?

    • 本文向大家介绍mongodb 修改用户密码 2种方法,包括了mongodb 修改用户密码 2种方法的使用技巧和注意事项,需要的朋友参考一下 1,错误做法,直接更新表 2,正确做法,利用db.addUser 有人会问,这个不是添加用户的方法吗。不错这是添加用户的方法,但是如果用户名相同,密码不同的话,就会更新密码。 3,正确做法,利用db.changeUserPassword  

    • 我正在使用IBM i(通常称为AS/400服务器)。 我是400我试过了 我得到 线程“main”java.lang.NoClassDefFoundError中出现异常:hello.application 注是包,是主类。Jar文件的区域设置在 我做错了?

    • 我使用git扩展。我希望密码和用户名存储在缓存中,所以我使用了:git-credential-winstore。它工作得很好,直到我不得不改变我的电脑(win7)的密码,它要求我再次插入密码。我输入了错误的密码,它存储在缓存中,我不能更改它。我试图卸载git,但没有用。我从删除了。user\myUser中的gitconfig文件的行: 结果是,每次密码和用户名时我都必须再次插入。当我再次运行时:g

    • 我正在使用com.jcraft.jsch.jsch创建一个SFTP连接。 我的SSH密钥被设置为可以直接SSH到服务器,而不需要用户名或密码。 我的公钥在中的authorized_key文件中 我在本地计算机上的SSH密钥在 此外,我在此目录中还有一个配置文件和一个文件。 为了进行双重检查,我确保中的公钥在远程服务器的文件中。 我正在开发一个创建文件的GUI程序。有了这个文件,我希望能够将它存储在