mgo 连接需要授权登录的mongodb

本文介绍如何在 Golang 环境下使用 mgo 库连接需要授权的 MongoDB 数据库。从搭建测试环境开始,包括安装配置虚拟机、MongoDB 和 Go 语言环境,到创建管理员账户及配置 MongoDB 授权,最后给出使用 mgo 进行连接的示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mgo 连接需要授权登录的mongodb

使用golang mgo连接到需要授权登录的mongodb

  • 测试环境
  • mongodb设置
  • golang mgo环境
  • 用例代码

搭建测试环境

windows 7, virtualbox, ubuntu 16.04LTS
  1. 安装[virtualbox]
  2. 安装虚拟机[ubuntu]
  3. 安装golang

    sudo apt-get update
    sudo apt-get install golang
    
  4. 安装mongodb

    sudo apt-get install mongodb
    mogod --version
    

    db version v2.6.10
    2016-09-29T16:54:46.199+0800 git version: nogitversion
    2016-09-29T16:54:46.200+0800 OpenSSL version: OpenSSL 1.0.2g 1 Mar 2016

mongodb设置

上面步骤安装mongdb结束之后会自动启动

ps -aef | grep mongod

mongodb 626 1 0 01:05 ? 00:05:01 /usr/bin/mongod –config /etc/mongodb.conf

可以看到mongod使用 /etc/mongdb.conf启动

sudo vi /etc/mongodb.conf

1 # mongodb.conf
2
3 # Where to store the data.
4 dbpath=/var/lib/mongodb
5
6 #where to log
7 logpath=/var/log/mongodb/mongodb.log
8
9 logappend=true
10
11 bind_ip = 192.168.6.1
12 port = 27017
13
14 # Enable journaling, http://www.mongodb.org/display/DOCS/Journaling
15 #journal=true
16
17 # Enables periodic logging of CPU utilization and I/O wait
18 #cpu = true
19
20 # Turn on/off security. Off is currently the default
21 #noauth = true
22 auth = true

上面是我修改后的,改动了bind_ip, auth
但是改动之前,需要首先建立一个管理员账号,否则auth实际上是不起作用的

使用mongo连接本机数据库,添加管理员账号

mongo
use admin
db.addUser({user:"username",
            pwd: "yourpassword",
            roles: [ "userAdminAnyDatabase",
                     "dbAdminAnyDatabase",
                     "readWriteAnyDatabase"
                   ]
           })
quit()
sudo service mongodb stop

这样在添加了管理员账号之后,将默认方式启动的mongodb服务停止

ps -aef | grep mongodb

修改 /etc/mongodb.conf
如果bind_ip 127.0.01 只能本虚拟机访问
可以更改默认数据库文件目录,但是需要保证mongodb有权限rw
最重要的需要把auth=true

service mongodb start
mongo -u "useryouadd" --authenticationDatabase admin -p

输入刚刚设置的密码,看看是否可以连接上

golang mgo环境

sudo apt-get install golang
cd
mkdir GoTest
export GOPATH=`pwd`
go get gopkg.in/mgo.v2
echo "export GOPATH=`pwd`"

上面命令执行结束,golang,mgo都已经安装好了

用例代码

cd $GOPATH
mkdir mtest
cd mtest

mgo 提供了几个建立session的接口,我使用了DialWithInfo

package main

import (
    "fmt"
    "gopkg.in/mgo.v2"
    "gopkg.in/mgo.v2/bson"
    "time"
)

func main() {
    dialInfo := &mgo.DialInfo{
        Addrs:     []string{"192.168.6.122"},
        Direct:    false,
        Timeout:   time.Second * 1,
        Database:  "yourdatabase",
        Source:    "admin",
        Username:  "username",
        Password:  "password",
        PoolLimit: 4096, // Session.SetPoolLimit
    }
    session, err := mgo.DialWithInfo(dialInfo)
    if nil != err {
        panic(err)
    }
    defer session.Close()
}

下一步就是CRUD

未完...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值