python爬虫完整版
惨痛经历
MongoDB 作为时下最为热门的数据库,其安全验证也是必不可少的,否则一个没有验证的数据库暴露出去,任何人可随意操作,这将是非常危险的。不信请看以下各网友们的惨痛经历,你就明白了。
之所以会发生这些攻击,是因为 MongoDB 数据库其安全性并不高,且没有做好安全认证及数据备份导致的。但是反过来看,这也意味着通过几个简单的步骤,就可以轻松防止这些攻击。防止这类攻击最有效的办法就是启用身份验证、不允许远程访问或者添加 IP 访问限制。接下来我们就一起学习一下如何通过 身份验证
来进行对 MongoDB 的访问,从而解决以上问题的产生。
MongoDB 用户与权限管理
常用权限
权限 | 说明 |
---|---|
read | 允许用户读取指定数据库。 |
readWrite | 允许用户读写指定数据库。 |
userAdmin | 允许用户向 system.users 集合写入,可以在指定数据库里创建、删除和管理用户。 |
dbAdmin | 允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问 system.profile。 |
clusterAdmin | 必须在 admin 数据库中定义,赋予用户所有分片和复制集相关函数的管理权限。 |
readAnyDatabase | 必须在 admin 数据库中定义,赋予用户所有数据库的读权限。 |
readWriteAnyDatabase | 必须在 admin 数据库中定义,赋予用户所有数据库的读写权限。 |
userAdminAnyDatabase | 必须在 admin 数据库中定义,赋予用户所有数据库的 userAdmin 权限。 |
dbAdminAnyDatabase | 必须在 admin 数据库中定义,赋予用户所有数据库的 dbAdmin 权限。 |
root | 必须在 admin 数据库中定义,超级账号,超级权限。 |
创建管理用户
MongoDB 有一个用户管理机制,简单描述为管理用户组,这个组的用户是专门为管理普通用户而设的,暂且称之为管理员。
管理员通常没有数据库的读写权限,只有操作用户的权限,我们只需要赋予管理员 userAdminAnyDatabase
角色即可。另外管理员账户必须在 admin 数据库下创建。
由于用户被创建在哪个数据库下,就只能在哪个数据库登录,所以把所有的用户都创建在 admin 数据库下。这样我们切换数据库时就不需要频繁的进行登录了。
先 use admin
切换至 admin 数据库进行登录,登录后再 use 切换其他数据库进行操作即可。第二次的 use 就不需要再次登录了。MongoDB 设定 use 第二个数据库时如果登录用户权限比较高就可以直接操作第二个数据库,而不需要登录。
切换数据库
管理员需要在 admin
数据库下创建,所以我们需要先切换至 admin 数据库。
查看用户
通过 db.system.users.find()
函数查看 admin
数据库中的所有用户信息。
创建用户
在 MongoDB 中可以使用 db.createUser({用户信息})
函数创建用户。
db.createUser({
user: "<name>",
pwd: "<cleartext password>",
customData: {
<any information> },
roles: [
{
role: "<role>", db: "<database>" } | "<role>",
...
]
});
user
:用户名pwd
:密码customData
:存放用户相关的自定义数据,该属性也可忽略roles
:数组类型,配置用户的权限
db.createUser({
user: "<name>",