一、创建管理员账号
创新互联是由多位在大型网络公司、广告设计公司的优秀设计人员和策划人员组成的一个具有丰富经验的团队,其中包括网站策划、网页美工、网站程序员、网页设计师、平面广告设计师、网络营销人员及形象策划。承接:网站建设、成都网站制作、网站改版、网页设计制作、网站建设与维护、网络推广、数据库开发,以高性价比制作企业网站、行业门户平台等全方位的服务。
下面开始创建一个帐号,该账号需要有grant权限,即:账号管理的授权权限。注意一点,帐号是跟着库走的,所以在指定库里授权,必须也在指定库里验证(auth)。
> use admin switched to db admin > db.createUser( { user: "dba", pwd: "dba", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] } ) |
2.编辑MongoDB配置文件,开启验证模块
security: authorization: enabled |
3.重启mongod.
4.再次登录mongodb
#mongo > show dbs 2017-01-10T19:30:30.924+0800 E QUERY [main] Error: listDatabases failed:{ "ok" : 0, "errmsg" : "not authorized on admin to execute command { listDatabases: 1.0 }", "code" : 13, "codeName" : "Unauthorized" } |
5.会报出如上错误,这是因为开启auth模块后,需要进行验证。如果需要使用刚才创建的管理员账户,则需要到admin库下进行验证,1表示验证成功。
>use admin >db.auth('dba','dba') 1 |
6.验证成功,再次执行命令:
> show dbs admin 0.000GB local 0.000GB |
即可执行成功。
二、创建普通用户账号
userAdminAnyDatabase的角色具有在任何数据库下创建用户的权限,下面用刚刚创建的dba用户创建普通用户。
1.创建只读账号
use db1 db.createUser( { user: "test1", pwd: "test1", roles: [ { role: "read", db: "db1" } ] } ) |
2.创建读写账号
use db1 db.createUser( { user: "test2", pwd: "test2", roles: [ { role: "readWrite", db: "db1" } ] } ) |
注意:只有在当前库下创建的用户才能在当前库下进行验证,如果在admin库下创建的其他库的用户则需要在admin下进行验证。
三、创建超级管理员用户
MongoDB在V3.0版本之后内置了root 角色,也就是结合了readWriteAnyDatabase、dbAdminAnyDatabase、userAdminAnyDatabase、clusterAdmin4个角色权限,类似于ORACLE的sysdba角色,但是MongoDB的超级管理员用户名称是可以随便定义的。当然如此高权限的用户还是不建议使用。
db.createUser( { user: "dbroot", pwd: "dbroot", roles: [ { role: "root", db: "admin" } ] } ) |
四、查看用户信息
db.getUser("test1")
> db.getUser("test1") { "_id" : "admin.test1", "user" : "test1", "db" : "admin", "roles" : [ { "role" : "clusterAdmin", "db" : "admin" } ] } |
五、修改用户信息
可修改用户的如下信息:
角色、密码、customData
db.updateUser( "test1", { customData:{employeeID:"0x3039"}, roles:[ {role:"read",db:"admin"} ], pwd:"test1password" } ) |
六、修改用户密码
db.changeUserPassword("user","password")
七、删除用户
db.system.users.remove({user:"user1"});
db.dropUser("test1")
八、授权给用户
原有权限不变的情况下,授予readWrite,read admin的权限:
db.grantRolesToUser( "test1", [ "readWrite", { role: "read", db: "admin" } ] ) |
九、回收权限
回收test1用户的readWrite和read admin的权限。
db.revokeRolesFromUser( "test1", [ { role: "read", db: "admin" }, "readWrite" ] ) |