gpt4 book ai didi

java - 启用身份验证时使用 mongo java 驱动程序复制数据库操作

转载 作者:行者123 更新时间:2023-12-01 12:46:06 27 4
gpt4 key购买 nike

我需要使用 mongo java 驱动程序执行 copydb 操作。这是我的代码来做到这一点

String nonce = mongo.getDB("admin").command(new BasicDBObject("copydbgetnonce","1")).get("nonce").toString();
String username = "admin";
String password = "password";
String key = md5(nonce + username + md5(username + ":mongo:" + password));

DBObject copyOp = new BasicDBObject("copydb", "1").
append("fromdb" , "db1").
append("todb" , "db2").
append("username" , username).
append("nonce" , nonce).
append("key" , key);

mongo.getDB("admin").command(copyOp);

当服务器上禁用身份验证时,它可以正常工作。身份验证失败,结果未经授权。

{ "serverUsed" : "localhost/127.0.0.1:27017" , "ok" : 0.0 , "errmsg" : "unauthorized"}

我可以保证密码和用户名是正确的。请指出正确的方向。

PS 我的 mongod 实例是 tokumx 1.5

谢谢。

最佳答案

这对你有用吗?

final DBObject cmd = new BasicDBObject( );
cmd.put( "copydb", "1" );
cmd.put( "slaveOk", true );
cmd.put( "fromdb", "db1" );
cmd.put( "todb", "db2" );
cmd.put( "fromhost", "fromHost" );

BasicDBObject nonceCmd = new BasicDBObject( );
nonceCmd.put( "copydbgetnonce", 1 );
nonceCmd.put( "fromhost", "fromHost" );
final CommandResult nonceResult = mongo.getDB( "admin" ).command( nonceCmd );
final String nonce = nonceResult.getString( "nonce" );
final byte[ ] innerHex =( getUserName( ) + ":mongo:" + String.valueOf( getPassword( ) ) ).getBytes( );
final byte[ ] outerHex = ( nonce + getUserName( ) + Util.hexMD5( innerHex ) ).getBytes( );

cmd.put( "username", getUserName( ) );
cmd.put( "nonce", nonce );
cmd.put( "key", Util.hexMD5( outerHex ) );

final CommandResult res = mongo.getDB( "admin" ).command( cmd );
if ( !res.ok( ) )
{
throw res.getException( ) ;
}

关于java - 启用身份验证时使用 mongo java 驱动程序复制数据库操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24691062/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com