MongoDB用户管理操作

    技术2022-07-10  134

    目录

    一、用户权限介绍二、创建用户2.1、创建管理员2.1.1、创建admin库2.1.2、在admin库创建用户2.1.3、查看用户2.1.4、开启用户验证2.1.5、效果验证 2.2、创建普通用户2.2.1、创建test库2.2.2、创建testfox用户2.2.3、效果验证 三、修改用户3.1、权限修改3.2、密码修改 四、删除用户

    一、用户权限介绍

    Mongodb中可以对用户进行读/写权限控制,主要有如下权限类型

    权限类型(角色)说明read赋予用户指定数据库读权限readWrite赋予用户指定数据库读写权限dbAdmin赋予用户在指定数据库中执行管理函数权限,如索引创建、删除,查看 统计或访问 system.profileuserAdmin赋予用户向 system.users 集合写入权限,可以在指定数据库里创建、删 除和管理用户clusterAdmin赋予用户所有分片和复制集相关函数的 管理权限(admin库中可用)readAnyDatabase赋予用户所有数据库的读权限(admin库中可用)readWriteAnyDatabase赋予用户所有数据库的读写权限(admin库中可用)userAdminAnyDatabase赋予用户所有数据库的 userAdmin 权限(admin库中可用)dbAdminAnyDatabase赋予用户所有数据库的 dbAdmin 权限(admin库中可用)root超级管理员(admin库中可用)

    二、创建用户

    2.1、创建管理员

    对应用户管理员,通常只赋予用户操作权限,不授权DB的读写权限,所以授userAdminAnyDatabase权限即可。 管理员账户必须在admin库下创建,而MongoDB 3.0版本后没有默认admin库,需要先手动创建一个。 启动MongoDB后,在bin目录下执行./mongo命令,进入客户端命令窗口。

    2.1.1、创建admin库

    执行use admin

    > use admin switched to db admin

    2.1.2、在admin库创建用户

    执行db.createUser()可以创建用户,下面是执行语句格式 user表示新建的用户名 pwd表示用户密码 customData表示存放一些用户相关的自定义数据(可选) roles是数组类型,表示给用户配置的权限

    db.createUser({ user: "<name>", pwd: "<cleartext password>", customData: { <any information> }, roles: [ { role: "<role>", db: "<database>" } | "<role>", ... ] });

    创建一个用户名为pandafox,密码为123456的用户管理员

    > db.createUser({user:'pandafox',pwd:'123456',roles:[{role:'userAdminAnyDatabase',db:'admin'}]}) Successfully added user: { "user" : "pandafox", "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" } ] }

    2.1.3、查看用户

    执行db.system.users.find(),可以查看到用户相关信息

    > db.system.users.find() { "_id" : "admin.pandafox", "userId" : UUID("22b25314-a601-43b1-af71-f0582f896ece"), "user" : "pandafox", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "9vErokSyPS2tGCeSnSsWzA==", "storedKey" : "vWezRfXwv/fd1vuK/tRKtBDGAWc=", "serverKey" : "4KvyD2348chlHPWehP40O+RZNQQ=" }, "SCRAM-SHA-256" : { "iterationCount" : 15000, "salt" : "rJiUl4MKauibSnNXH3md4twF1umLiNDCiH87Kg==", "storedKey" : "qVmeLILDx+D90lw3Rvx7kAdppeU65jEeJ2U919ghqvc=", "serverKey" : "FYb/OmXDZiuGUFo+avcNnv0iszncv6OHrOILLAl/h7c=" } }, "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" } ] }

    2.1.4、开启用户验证

    1)在mongodb.conf配置文件中,增加auth启动参数,并设置为true

    [root@localhost etc]# cat mongodb.conf dbpath=/usr/local/mongodb/data/db/ logpath=/usr/local/mongodb/log/mongodb.log port=27017 fork=true auth=true

    2)重启MongoDB服务

    2.1.5、效果验证

    1)切换到admin库,未登录情况执行命令,提示无权限,说明admin库已经授权用户成功

    > use admin switched to db admin > db.system.users.find() Error: error: { "ok" : 0, "errmsg" : "command find requires authentication", "code" : 13, "codeName" : "Unauthorized" }

    2)登录,使用db.auth('user','pwd'),返回1表示登录成功

    > db.auth('pandafox','123456') 1

    3)再次执行db.system.users.find()会返回对应用户信息

    2.2、创建普通用户

    普通用户需要由管理员创建并授权。所以,我们首先做的就是用管理员账户登录数据库。

    > use admin switched to db admin > db.auth('pandafox','123456') 1

    2.2.1、创建test库

    > use test switched to db test

    2.2.2、创建testfox用户

    创建testfox用户,密码为123456,拥有test库的读写权限

    > db.createUser({user:'testfox',pwd:'123456',roles:[{role:'readWrite',db:'test'}]}) Successfully added user: { "user" : "testfox", "roles" : [ { "role" : "readWrite", "db" : "test" } ] }

    2.2.3、效果验证

    1)新开一个客户端,切换到test库,并登录

    > use test switched to db test > db.auth('testfox','123456') 1

    2)可见读写是ok的

    > db.test.insert({name:'tom'}) WriteResult({ "nInserted" : 1 }) > db.test.find() { "_id" : ObjectId("5efbd7687e496edd01619a3d"), "name" : "tom" }

    3)如果不登录是无法操作的

    > db.test.insert({name:'tom'}) WriteCommandError({ "ok" : 0, "errmsg" : "command insert requires authentication", "code" : 13, "codeName" : "Unauthorized" })

    三、修改用户

    3.1、权限修改

    使用 db.updateUser()函数进行修改

    > db.updateUser("pandafox",{roles:[{"role":"userAdminAnyDatabase","db":"admin"},{"role":"dbAdminAnyDatabase","db":"admin"}]}) > show users { "_id" : "admin.pandafox", "userId" : UUID("22b25314-a601-43b1-af71-f0582f896ece"), "user" : "pandafox", "db" : "admin", "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" }, { "role" : "dbAdminAnyDatabase", "db" : "admin" } ], "mechanisms" : [ "SCRAM-SHA-1", "SCRAM-SHA-256" ] }

    3.2、密码修改

    1)使用db.updateUser()函数(有用户管理权限) 修改密码

    db.updateUser('pandafox',{'pwd':'654321'})

    断开连接,重新登录验证

    > use admin switched to db admin > db.auth('pandafox','123456') Error: Authentication failed. 0 > db.auth('pandafox','654321') 1

    2)使用db.changeUserPassword()函数(有用户管理权限) 修改密码

    > db.changeUserPassword('pandafox','123456')

    断开连接,重新登录验证

    > use admin switched to db admin > db.auth('pandafox','654321') Error: Authentication failed. 0 > db.auth('pandafox','123456') 1

    四、删除用户

    使用 db.dropUser()函数删除用户,成功则返回true

    > use test switched to db test > db.dropUser('testfox') true > show users >
    Processed: 0.010, SQL: 12