Я пытаюсь запустить ycsb на моем экземпляре mongodb (работает в облаке). На стороне mongodb я создал двух пользователей с двумя очень широкими полномочиями:
> show users
{
"_id" : "admin.admin",
"user" : "admin",
"db" : "admin",
"roles" : [
{
"role" : "clusterAdmin",
"db" : "admin"
},
{
"role" : "dbAdminAnyDatabase",
"db" : "admin"
},
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
}
],
"userId" : UUID("99509f21-0ca3-4e3d-b585-dd7455128fa2"),
"mechanisms" : [
"SCRAM-SHA-256"
]
}
{
"_id" : "admin.ycsb",
"user" : "ycsb",
"db" : "admin",
"roles" : [
{
"role" : "clusterAdmin",
"db" : "admin"
},
{
"role" : "dbAdminAnyDatabase",
"db" : "admin"
},
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
}
],
"userId" : UUID("96b184ee-759c-4de8-82f5-93ff62b59f23"),
"mechanisms" : [
"SCRAM-SHA-256"
]
}
Затем я просто пытаюсь запустить следующую команду для загрузки рабочей нагрузки:
$ bin/ycsb.sh load mongodb -s -P workloads/workloada -p recordcount=500000 -threads 16 -p mongodb.url="mongodb://admin:<password>@<ip>:27017/admin?w=1" -p mongodb.auth="true"
В этом случае появляется ошибка:
com.mongodb.MongoCommandException: Command failed with error 13 (Unauthorized): 'not authorized on ycsb to execute command { insert: "usertable", ordered: true, writeConcern: { w: 1 }, $db: "ycsb", $clusterTime: { clusterTime: Timestamp(1626190349, 1), signature: { hash: BinData(0, 42C9FF75F94BA394E2EE114DE31ED49002602D1E), keyId: 6983987685132075011 } }, lsid: { id: UUID("f5d018fb-f89b-4b9f-ae65-6edf04b87536") } }' on server <ip>:27017. The full response is { "operationTime" : { "$timestamp" : { "t" : 1626190349, "i" : 1 } }, "ok" : 0.0, "errmsg" : "not authorized on ycsb to execute command { insert: \"usertable\", ordered: true, writeConcern: { w: 1 }, $db: \"ycsb\", $clusterTime: { clusterTime: Timestamp(1626190349, 1), signature: { hash: BinData(0, 42C9FF75F94BA394E2EE114DE31ED49002602D1E), keyId: 6983987685132075011 } }, lsid: { id: UUID(\"f5d018fb-f89b-4b9f-ae65-6edf04b87536\") } }", "code" : 13, "codeName" : "Unauthorized", "$clusterTime" : { "clusterTime" : { "$timestamp" : { "t" : 1626190349, "i" : 1 } }, "signature" : { "hash" : { "$binary" : "Qsn/dflLo5Ti7hFN4x7UkAJgLR4=", "$type" : "00" }, "keyId" : { "$numberLong" : "6983987685132075011" } } } }
Интересно, что он жалуется на пользователя ycsb, однако я предоставил администратора во всех возможных местах. Если я изменю URL-адрес на "mongodb://admin:<password>@<ip>:27017/aaaa?w=1"
, я получу сообщение об ошибке, относящееся к пользователю aaaa
, но это никогда не сработает для администратора. По этой причине я создал нового пользователя ycsb
, но команды:
$ bin/ycsb.sh load mongodb -s -P workloads/workloada -p recordcount=500000 -threads 16 -p mongodb.url="mongodb://admin:<password>@<ip>:27017/ycsb?w=1" -p mongodb.auth="true"
or
$ bin/ycsb.sh load mongodb -s -P workloads/workloada -p recordcount=500000 -threads 16 -p mongodb.url="mongodb://ycsb:<password>@<ip>:27017/ycsb?w=1" -p mongodb.auth="true"
завершиться с той же ошибкой, что и выше.