# windows 版 mongo 启动安全认证

1)如何验证已经开启了安全验证 2)如何开启安全验证 3)开启失败的原因可能有哪些,如何排查和解决

版本:3.4.7

# 测试是否启动安全认证

  • 打开 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
      • 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

# 命令方式

  • mongdb 服务以安全认证的方式开启

    • 管理员方式启动 cmd

    • 删除以前的 MongoDB 服务

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

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

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

      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
  • 退出 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
    recommender  0.191GB
    test         0.000GB
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
  • 开启安全认证之后,数据库连接工具要输入用户名和密码

# 相关 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. 卸载重新安装服务

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

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
  • 关闭此电脑的服务管理界面,重新打开服务管理界面刷新服务。

# 4.0.6 版本差别

  • 4.0.6 版本未启动安全认证前 shell 会显示更多的 warnings 信息

  • 在 4.0.6 版本启动安全认证无登录查看数据库的时候不会报错,但不显示

    C:\Users\xiaohao>mongo
    MongoDB shell version v4.0.6
    connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb
    Implicit session: session { "id" : UUID("10108eaa-3c56-4fbf-949d-fe45ce13d9bd") }
    MongoDB server version: 4.0.6
    ###无登录用户查询数据库不会报错,但不会显示数据库
    > show dbs
    > exit
    bye
    
    ###进行用户登录
    C:\Users\xiaohao>mongo -u myUserAdmin -p passwd localhost:27017/admin
    MongoDB shell version v4.0.6
    connecting to: mongodb://localhost:27017/admin?gssapiServiceName=mongodb
    Implicit session: session { "id" : UUID("83298974-c4ab-40bf-9343-03cf91c02652") }
    MongoDB server version: 4.0.6
    ###登录用户查询数据库会显示相关数据
    > show dbs
    admin   0.000GB
    config  0.000GB
    local   0.000GB
    >
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22