# windows 版 mongo 启动安全认证

测试版本:3.4.7 ,4.0.6

# 测试是否启动安全认证

  • 打开 mongo shell :(可将 mongo 的 bin 目录配置到环境变量中的 path 中直接启动 mongo)

    C:\Users\xiaohao>mongo
    MongoDB shell version v3.4.7
    connecting to: mongodb://127.0.0.1:27017
    MongoDB server version: 3.4.7
    Server has startup warnings:
    2019-08-29T10:56:07.116+0800 I CONTROL  [initandlisten]
    2019-08-29T10:56:07.116+0800 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
    2019-08-29T10:56:07.117+0800 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
    2019-08-29T10:56:07.117+0800 I CONTROL  [initandlisten]
    >
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    • 如果未启动安全认证会出现 warnings(4.0.6 版本未启动安全认证前 shell 会显示更多的 warnings 信息)
      • WARNING: Access control is not enabled for the database.
      • Read and write access to data and configuration is unrestricted.

# 开启安全认证(二选一)

推荐使用配置文件方式,易排查,有配置记录,利于后期维护

# 首先创建管理用户

  • 首先打开 mongo shell,进入 admin 数据库,创建一个管理员用户
use admin
switched to db admin
> db.createUser(
  {
  user: "myUserAdmin",
  pwd: "passwd",
  roles: ["userAdminAnyDatabase"]
  }
)

Successfully added user: { "user" : "myUserAdmin", "roles" : [ "userAdminAnyDatabase" ] }
##登录测试
> db.auth("myUserAdmin","passwd")
1
##失败返回0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 方式一:命令方式开启

  • 管理员方式启动 cmd

  • 删除以前的 MongoDB 服务

    sc delete MongoDB
    
    1
  • 打开计算机的服务管理界面,右键停止,刷新,就会发现该服务已经没了,关闭该界面。

  • 创建带有安全认证的 MongoDB 服务

    sc create MongoDB binpath="E:\Mongo4.0\bin\mongod.exe --dbpath E:\Mongo4.0\data --logpath E:\Mongo4.0\log\mongodb.log  --logappend --service"
    
    1
    • 注意修改路径,bin 目录下的 mongod.exe,数据库目录,日志目录
  • 启动服务

    net start mongodb
    
    1

# 方式二:配置文件方式开启

  • 管理员方式启动 cmd

  • 删除以前的 MongoDB 服务

    sc delete MongoDB
    
    1
  • 打开计算机的服务管理界面,右键停止,刷新,就会发现该服务已经没了,关闭该界面

  • 在安装目录上添加配置文件

    systemLog:
        destination: file
        path: E:\Mongo4.0\log\mongodb.log
    storage:
        dbPath: E:\Mongo4.0\data
        engine: wiredTiger
        wiredTiger:
            engineConfig:
                cacheSizeGB: 5
    net:
        bindIp: 127.0.0.1
        port: 27017
    security:
        authorization: enabled
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    • 配置文件信息里子配置前面是四个空格,不能用 tab 键代替。不然报错
  • 根据配置文件启动 mongo

    E:\Mongo4.0\bin\mongod.exe --config "E:\Mongo4.0\mongod.cfg" --install
    
    1
    • 注意 bin 路径和配置文件的路径
  • 启动 mongoDB 服务

    net start mongodb
    
    1

# 安全认证测试

  • 启动安全认证之后无登录进行连接:发现无权限查看数据库

    C:\Users\xiaohao>mongo
    MongoDB shell version v3.4.7
    connecting to: mongodb://127.0.0.1:27017
    MongoDB server version: 3.4.7
    ###无权限查看数据库
    > show dbs
    2019-08-29T12:21:17.295+0800 E QUERY    [thread1] Error: listDatabases failed:{
            "ok" : 0,
            "errmsg" : "not authorized on admin to execute command { listDatabases: 1.0 }",
            "code" : 13,
            "codeName" : "Unauthorized"
    } :
    _getErrorWithCode@src/mongo/shell/utils.js:25:13
    Mongo.prototype.getDBs@src/mongo/shell/mongo.js:62:1
    shellHelper.show@src/mongo/shell/utils.js:769:19
    shellHelper@src/mongo/shell/utils.js:659:15
    @(shellhelp2):1:1
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    • 在 4.0.6 版本启动安全认证无登录查看数据库的时候不会报错,但不显示数据
  • 退出 shell 进行用户登录:

    mongo -u myUserAdmin -p passwd localhost:27017/admin
    
    1
  • 登录成功返回信息,并能进行数据的操作

    C:\Users\xiaohao>>mongo -u myUserAdmin -p passwd localhost:27017/admin
    MongoDB shell version v3.4.7
    connecting to: mongodb://localhost:27017/admin
    MongoDB server version: 3.4.7
    ###测试是否有权限查看数据库
    > show dbs
    admin        0.000GB
    local        0.000GB
    test         0.000GB
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
  • 开启安全认证之后,数据库连接工具要输入用户名和密码

# 相关 bug

# net start MongoDB 报错(服务无法启动)

C:\WINDOWS\system32>net start MongoDB
MongoDB 服务正在启动 .
MongoDB 服务无法启动。

发生服务特定错误:100
请键入 NET HELPMSG 3547 以获取更多的帮助
1
2
3
4
5
6
  • 直接进入 db 文件夹,先删除 mongod.lock 文件,然后重新启动服务即可; 要是还不行,就继续删 storage.bson 文件,然后问题就解决了~

# net start mongodb 报错(服务没有响应控制功能)

C:\WINDOWS\system32>net start mongodb
服务没有响应控制功能。

请键入 NET HELPMSG 2186 以获得更多的帮助。
1
2
3
4
  • 出现这个问题一般是路径有问题。

    1)请注意你所有的路径没有错,包括 mongod 所在路径,日志所在路径等;

    2)不要加入多余的“\”,如“D:\MongoDB\Data”这个,千万不要写成“D:\MongoDB\Data\”。

    1. 卸载重新安装服务

# net start mongodb 报错(发生系统错误 1058,无法启动服务)

C:\WINDOWS\system32>net start mongodb
发生系统错误 1058。

无法启动服务,原因可能是已被禁用或与其相关联的设备没有启动。
1
2
3
4
  • 打开计算机的服务管理界面,找到 mongodb 服务,右键停止,刷新,就会发现该服务已经没了,关闭该界面,并重新创建服务。

# 在删除服务或者启动服务时,显示指定服务已删除

C:\WINDOWS\system32>sc delete MongoDB
[SC] DeleteService 失败 1072:
指定的服务已标记为删除


C:\WINDOWS\system32>sc create MongoDB binpath="E:\MongoDB\bin\mongod.exe --dbpath E:\MongoDB\data --logpath E:\MongoDB\logs\mongodb.log  --logappend --auth --service"
[SC] DeleteService 失败 1072:
指定的服务已标记为删除
1
2
3
4
5
6
7
8
  • 关闭此电脑的服务管理界面,重新打开服务管理界面刷新服务。