【发布时间】:2018-06-13 23:30:37
【问题描述】:
我正在尝试编写一个脚本来为使用 Powershell(Server2016 附带的任何版本)的客户部署 mongodb。我可以作为服务安装并让它正常运行,但我还想添加身份验证。具体来说,我想添加一个管理员用户和数据库用户。
最初我用这个 powershell 函数创建了 mongod 服务:
function createMongoService([string] $mongoDbConfigPath, [string] $serviceName, [string] $storePath, [string] $authCmd)
{
$mongodexe = "$mongoInstallPath\bin\mongod.exe"
Write-Host "Activating Mongod as a service '$serviceName'"
"auth cmd = $authCmd"
& $mongodexe --config "$mongoDbConfigPath" --install --serviceName "$serviceName" --serviceDisplayName "Storfirst MongoDB" --port 27710 --dbpath "$storePath\db" $authCmd
if ($LASTEXITCODE -ne 0)
{
throw "Failed to start service"
}
}
在初始情况下,$authCmd 是 ""。查看日志,我可以确认该服务是在没有身份验证的情况下启动的。
2018-06-13T16:00:26.600-0700 我控制 [initandlisten] ** 警告: 没有为数据库启用访问控制。 2018-06-13T16:00:26.600-0700 我控制 [initandlisten] **
对数据和配置的读写访问不受限制。
那我去用这个函数创建mongo用户:
function createAdminUser( [string] $mongoInstallPath, [string] $mongoAdminName, [string] $mongoAdminPass)
{
Write-Host "Creating admin user"
$createAdminCmd = `
"db.createUser( `
{ `
user: `"$mongoAdminName`",
pwd: `"$mongoAdminPass`",
roles: [ { role: `"userAdminAnyDatabase`", db: `"admin`" } ] `
} `
);"
"$createAdminCmd"
& "$mongoInstallPath\bin\mongo.exe" admin --port 27710 --eval "$createAdminCmd"
if ($LASTEXITCODE -ne 0)
{
throw "Failed to create admin user"
}
}
但这失败了,屏幕上打印了以下错误(mongodb 日志中没有记录任何关于它的内容)。 mongoAdminName 在此运行中等于管理员,但如果我使用其他名称,它会给我与等效管理员名称相同的结果。
MongoDB shell 版本 v3.4.15-49-g4ef027f98d 连接到: mongodb://127.0.0.1:27710/admin MongoDB服务器版本: 3.4.15-49-g4ef027f98d 2018-06-13T16:10:00.125-0700 E QUERY [thread1] ReferenceError: 未定义管理员:@(shell 评估):1:17
即使我在 powershell 中手动输入预期的命令,也会发生这种情况。 我使用类似的命令在我们的自定义 mongodb docker 容器上创建用户并且对此没有任何问题,但在这种情况下我需要一个非容器解决方案。
计划是,一旦我创建了管理员用户,重新执行 createMongoService,这次使用 authCmd 等于“--auth”,然后使用管理员用户创建具有标准身份验证实践的数据库用户。 我的问题是“这里发生了什么?!?”和“我该如何解决这个问题?”
【问题讨论】:
标签: mongodb powershell mongo-shell