我有几个数据库,不想为每个数据库创建单独的用户帐户。MongoDB 支持使用在另一个数据库中定义的帐户来验证对数据库的访问的概念,但是很难找到语法示例。
当我终于弄清楚时,我正要发布一个问题。万一它可以帮助别人
这是 mongodb、mongoose、节点设置的语法。
从 mongo shell 在 admin 数据库中创建数据库用户
use admin
db.addUser( { user: "mydbuser", pwd: "mypassword", roles: [ ] } )
创建数据库并添加用户 - userSource 表示凭据是在 admin 数据库中定义的
use mydb
db.addUser( { user: "mydbuser", userSource: "admin" , roles: [ "readWrite" , "dbAdmin"] } )
在mongoose连接字符串中指定auth参数
var myDB = mongoose.createConnection("mongodb://mydbuser:mypassword@myipaddress:27017/mydb" ,{auth:{authdb:"admin"}});
选项 {auth:...} 指定用户帐户必须针对 admin db 进行身份验证。
类似地从 mongo shell 连接到数据库
mongo myipaddr:27017/mydb -u "mydbuser" -p "mypassword"
注意:用户“mydbuser”只有对 mydb 的读/写和管理员访问权限。您可以在此处找到有关用户权限的更多信息。该场景的更完整示例是here
这也可以通过修改 mongodb 本身的连接字符串来简化:
例如:mongodb://username:password@IP:Port/mydbname?authSource=admin因为 mongoose 支持mongodb https://docs.mongodb.com/manual/reference/connection-string/#urioption 提供的这个连接字符串。授权来源