身份验证:
方法一:
mongo --port 27017 --authenticationDatabase "admin" -u "myUserAdmin" -p
方法二:
mongo --port 27017
use admin;
db.auth('root','mima123456')
或者:
use admin;
db.auth('root', passwordPrompt())
查看某个库中的用户:
use test_db1;
show users; # 等价于: db.getUsers()
查看所有用户:
use admin;
show users;
查看所有用户:
use admin;
db.system.users.find();
查看指定用户:
db.getUser("root");
查看指定用户证书、权限、限制条件:
db.getUser("root", {
showCredentials: true,
showPrivileges: true,
showAuthenticationRestrictions: true
} )
创建用户语法:
{
user: "<name>", -- 用户名
pwd: passwordPrompt(), -- 提示输入密码,也可以直接写密码
customData: { <any information> }, -- 可选,可用于存储与此特定用户关联的任何数据。 例如,这可以是用户的全名或员工ID。
roles: [
{ role: "<role>", db: "<database>" } | "<role>",
...
], -- 授予用户的角色。 可以指定一个空数组[]来创建没有角色的用户
authenticationRestrictions: [
{
clientSource: ["<IP>" | "<CIDR range>", ...],
serverAddress: ["<IP>" | "<CIDR range>", ...]
},
...
], -- 可选,服务器对创建的用户强制执行的身份验证限制,指定允许用户连接到服务器或服务器可以接受用户的IP地址和CIDR(无类别域间路由)范围的列表
mechanisms: [ "<SCRAM-SHA-1|SCRAM-SHA-256>", ... ], --可选,指定特定的SCRAM机制或用于创建SCRAM用户凭据的机制
passwordDigestor: "<server|client>" --可选,指服务器还是客户端提取密码。
}
Built-In Roles(内置角色):
1. 数据库用户角色:read、readWrite;
2. 数据库管理角色:dbAdmin、dbOwner、userAdmin;
3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
4. 备份恢复角色:backup、restore;
5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
6. 超级用户角色:root
// 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
7. 内部角色:__system
read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root:只在admin数据库中可用。超级账号,超级权限
创建用户范例1:
use admin;
db.createUser({user:"dba",pwd:"mima123456",roles:[{role:"root",db:"admin"}]})
创建用户范例2:
use admin;
db.createUser(
{
user: "dba",
pwd: passwordPrompt(),
roles: [ { role: "readWrite", db: "test" },
{ role: "read", db: "reporting" } ]
}
)
创建用户范例3:
use admin;
db.createUser(
{
user:'dba',
pwd:passwordPrompt(),
roles:[{role:'root',db:'admin'}],
customData:{name:'运维账号'},
authenticationRestrictions: [ {
clientSource: ["10.21.53.213"],
serverAddress: ["10.21.53.213"]
} ]
}
)
修改用户密码
db.changeUserPassword('user','pwd')
授权role给指定用户:
db.grantRolesToUser('user123',['readWrite',{role:'read',db:'test'}])
移除指定用户的role:
db.revokeRolesFromUser('user123',[{role:'read',db:'test'},'readWrite'])
删除用户:
db.dropUser('accountAdmin01')
删除当前库所有用户:
db.dropAllUsers({w: "majority", wtimeout: 5000})
更新指定用户语法:
db.updateUser(
"<username>",
{
customData : { <any information> },
roles : [
{ role: "<role>", db: "<database>" } | "<role>",
...
],
pwd: passwordPrompt(), // Or "<cleartext password>"
authenticationRestrictions: [
{
clientSource: ["<IP>" | "<CIDR range>", ...],
serverAddress: ["<IP>", | "<CIDR range>", ...]
},
...
],
mechanisms: [ "<SCRAM-SHA-1|SCRAM-SHA-256>", ... ],
passwordDigestor: "<server|client>"
},
writeConcern: { <write concern> }
)
更新指定用户范例:
db.updateUser(
'user123',
{
pwd:passwordPrompt(),
roles:['read'],
customData:{name:'运维账号'},
authenticationRestrictions: [ {
clientSource: ["192.168.163.134"],
serverAddress: ["192.168.163.134"]
} ]
}
)