开启认证,配置文件添加
security:
authorization: enabled
[root@localhost include]# mongo
MongoDB shell version v4.0.0
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 4.0.0
> use admin #进入admin数据库
switched to db admin
db.createUser({ user: 'root', pwd: 'hellowin', roles: [ { role: 'root', db: 'admin' } , 'readWriteAnyDatabase'] })
注意:root角色 只在admin数据库中可用。超级账号,超级权限
登录认证
> use admin
switched to db admin
> db.auth("root","hellowin")
如果要新建数据库就直接使用use,比如新建数据库 use mhsj
use mhsj
创建用户并授权,给某个用户授权一定要进入对应的数据库,新建的数据库root用户也没有权限的,需要在新建用户和授权
db.createUser({user: "smws",pwd: "hellowin",roles: [ { role: "dbOwner", db: "mhsj" } ] })
也可以再创建如上的root用户
db.createUser({user: "root",pwd: "hellowin",roles: [ { role: "dbOwner", db: "smws" } ] })
授权
> db.grantRolesToUser("smws", [ { role:"dbOwner", db:"mhsj"} ]) ;
#授权smws用户为数据库mhsj的管理员 ,smws这里为用户 mhsj为之前创建的数据库,通过(use mhsj)创建
> db.mhsj.insert({"name":"aaa"}) 测试插入一条记录
WriteResult({ "nInserted" : 1 })
mongo -u "smws" -p "hellowin" --authenticationDatabase "mhsj"
show dbs
删除用户
use admin
db.system.users.remove({user:"root"})
其他:
输入命令:show collections 查看集合
URI 形式的访问
生产中常用 URI 形式对数据库进行连接
mongodb://your.db.ip.address:27017/db
添加用户名密码验证
mongodb://simpleUser:simplePass@your.db.ip.address:27017/db
1 mongo shell 添加用户:
>> use admin;
>> db.createUser({
user:'username',
pwd:'pwd',
roles:[{role:'readWrite',db:'dbname'}]
})
role:{'read','readWrite',.....}
2,python连接mongodb:
首先安装pymongo库:pip install pymongo
代码:
from pymongo import MongoClient()
连接方式:
1)默认client = MongoClient()
2) 通过host+port的方式:client = MongoClient(host,port)
3) 通过uri的方式:client = MongoClient(uri)
uri的格式:
uri = 'mongodb://' + user + ':' + pwd + '@' + server + ':' + port +'/'+ db_name
获取数据库名
db = client.getdatabase(db_name)
写入数据:
db.collect_name.insert_by(data)
查询数据:
db.collect_name.find(filter)
角色授权分两种,一种是直接在当前库中创建用户并授予相关权限。如admin库中创建admin用户。另一种情况是
将在admin中创建的用户授予操作其他库的权限,相关授权命令如下:
授予角色:
db.grantRolesToUser("userName", [ { role:"", db: ""} ])
取消角色:
db.grantRolesToUser("userName", [ { role:"", db:""} ])
下面我们在admin库中执行以下命令:
db.grantRolesToUser("admin", [ { role:"dbOwner", db:"test"} ]) ;
如下注释一定要多看!
##admin 指的是用户名 test 指的要授权的数据库
read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root:只在admin数据库中可用。超级账号,超级权限