我有一个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有什么方法可以实现这一点吗?
若要以编程方式从.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程序。有了这个文件,我希望能够将它存储在