MongoDB启用身份验证

MongoDB支持各类认证机制,如下启用独立 mongod 实例的访问控制,并使用默认身份验证机制。mongodb

用户管理员
启用访问控制后,请确保在 admin 数据库中拥有 userAdmin 或 userAdminAnyDatabase 角色的用户。该用户能够管理用户和角色,例如:建立用户,授予或撤销用户角色,以及建立或修改定义角色。 能够在启用访问控制以前或以后建立用户。若是在建立任何用户以前启用访问控制,MongoDB会提示本地主机异常,容许在管理数据库中建立用户管理员。建立后,必须做为用户管理员进行身份验证,以根据须要建立其余用户。shell

如下过程首先将用户管理员添加到运行无访问控制的 MongoDB 实例,而后启用访问控制。数据库

  1. 建立用户管理员
    在管理数据库中,添加具备 userAdminAnyDatabase 角色的用户。如下在 admin 数据库中建立用户justin:

注意:建立用户的数据库(在此示例中为admin)是用户的身份验证数据库。用户将对该数据库进行身份验证,但用户能够在其余数据库中担任角色; 即用户的认证数据库不限制用户的权限。app

[root@localhost bin]# pwd
/opt/mongodb-3.4.6/bin
[root@localhost bin]# ./mongo --port 9981
MongoDB shell version v3.4.6
connecting to: mongodb://127.0.0.1:9981/
MongoDB server version: 3.4.6
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
    http://docs.mongodb.org/
Questions? Try the support group
    http://groups.google.com/group/mongodb-user
Server has startup warnings: 
2017-12-20T00:45:44.490+0800 I CONTROL  [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.
2017-12-20T00:45:44.490+0800 I CONTROL  [initandlisten] 
> use admin
switched to db admin
> db.createUser(               #回车
... {                                    #回车,下同
... user:"justin",
... pwd:"51cto",
... roles:[{role:"userAdminAnyDatabase",db:"admin"}]
... }
... )
Successfully added user: {
    "user" : "justin",
    "roles" : [
        {
            "role" : "userAdminAnyDatabase",
            "db" : "admin"
        }
    ]
}
> exit
bye
[root@localhost bin]#

MongoDB启用身份验证

  1. 修改mongodb配置文件,启用认证
    [root@localhost bin]# cat ../conf/mongodb.conf 
    bind_ip = 0.0.0.0
    port = 9981
    fork = true
    dbpath = /opt/mongodb-3.4.6/data
    pidfilepath = /var/run/mongod.pid
    logpath = /opt/mongodb-3.4.6/logs/mongod.log
    logappend = true
    auth = true
    [root@localhost bin]# systemctl restart mongodb.service
    [root@localhost bin]#
3. 以用户管理员身份进行链接和验证
在链接期间进行身份验证,使用-u <username>,-p <password>和--authenticationDatabase <database>
链接后验证,切换到身份验证数据库(在这种状况下为admin),并使用db.auth(<username>,<pwd>)方法进行身份验证

[root@localhost bin]# ./mongo --port 9981 -u "justin" -p "51cto" --authenticationDatabase "admin"
MongoDB shell version v3.4.6
connecting to: mongodb://127.0.0.1:9981/
MongoDB server version: 3.4.6ide

exit
bye
[root@localhost bin]# ./mongo --port 9981
MongoDB shell version v3.4.6
connecting to: mongodb://127.0.0.1:9981/
MongoDB server version: 3.4.6
use admin
switched to db admin
db.auth("justin","51cto")
1
exit
bye
[root@localhost bin]# this

4. 根据须要建立其余用户
当管理员用户进行身份验证经过以后,可以使用db.createUser()建立其余用户。能够为用户分配任何内置角色或用户定义的角色。

myUserAdmin用户只具备管理用户和角色的权限。若是使用myUserAdmin尝试执行任何其余操做,例如从ywbz数据库中的foo集合读取数据,MongoDB将返回错误。google

如下操做将用户 csdp添加到在ywbz数据库中并给予ywbz数据库的readWrite角色以及在reporting数据库中读取角色。rest

注意:建立用户的数据库(在本示例中为ywbz)是该用户的身份验证数据库。虽然用户将对该数据库进行身份验证,但用户能够在其余数据库中担任角色; 即用户的认证数据库不会限制用户的权限。code

[root@localhost bin]# ./mongo --port 9981 -u "justin" -p "51cto" --authenticationDatabase "admin"
MongoDB shell version v3.4.6
connecting to: mongodb://127.0.0.1:9981/
MongoDB server version: 3.4.6
> use ywbz
switched to db ywbz
> db.createUser(
... {
... user:"csdp",
... pwd:"51cto",
... roles:[{role:"readWrite",db:"ywbz"},      #用户csdp在数据库ywbz中执行读写操做权限
... {role:"read",db:"reporting"}]                 #用户csdp在数据库reporting中有读操做权限
... }
... )
Successfully added user: {
    "user" : "csdp",
    "roles" : [
        {
            "role" : "readWrite",
            "db" : "ywbz"
        },
        {
            "role" : "read",
            "db" : "reporting"
        }
    ]
}
> exit
bye
[root@localhost bin]#

MongoDB启用身份验证

相关文章
相关标签/搜索