虚拟化容器,大数据,DBA,中间件,监控。

MongoDB数据库的用户管理与SQL语言对比

17 12月
作者:admin|分类:DBA运维

MongoDB中用户管理

  MongoDB数据库默认是没有用户名及密码的,即无权限访问限制。为了方便数据库的管理和安全,需创建数据库用户。

1.6.1 用户的权限

  用户中权限的说明 

权限

说明

Read                

允许用户读取指定数据库

readWrite           

允许用户读写指定数据库

dbAdmin             

允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile

userAdmin           

允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户

clusterAdmin        

只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。

readAnyDatabase     

只在admin数据库中可用,赋予用户所有数据库的读权限

readWriteAnyDatabase

只在admin数据库中可用,赋予用户所有数据库的读写权限

userAdminAnyDatabase

只在admin数据库中可用,赋予用户所有数据库的userAdmin权限

dbAdminAnyDatabase  

只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。

root                

只在admin数据库中可用。超级账号,超级权限

   更多关于用户权限的说明参照:https://docs.mongodb.com/manual/core/security-built-in-roles/

用户创建语法  

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

语法说明:

user字段:用户的名字;

pwd字段:用户的密码;

cusomData字段:为任意内容,例如可以为用户全名介绍;

roles字段:指定用户的角色,可以用一个空数组给新用户设定空角色;

 

roles 字段:可以指定内置角色和用户定义的角色。

1.6.2 创建管理员用户

进入管理数据库

> use admin

创建管理用户,root权限

db.createUser(   {     user: "root",     pwd: "root",     roles: [ { role: "root", db: "admin" } ]   } )

注意:

     创建管理员角色用户的时候,必须到admin下创建。

 

     删除的时候也要到相应的库下操作。

查看创建完用户后的collections;

 > show tables;  system.users  # 用户存放位置 system.version

查看创建的管理员用户

    > show users     {         "_id" : "admin.root",         "user" : "root",         "db" : "admin",         "roles" : [             {                 "role" : "root",                 "db" : "admin"             }         ]     }

验证用户是否能用

> db.auth("root","root") 1  # 返回 1 即为成功

用户创建完成后在配置文件中开启用户验证

cat >>/application/mongodb/conf/mongod.conf<<-'EOF' security:   authorization: enabled EOF

重启服务

/etc/init.d/mongod  restart

  登陆测试,注意登陆时选择admin数据库

    注意:用户在哪个数据库下创建的,最后加上什么库。

方法一:命令行中进行登陆

[mongod@MongoDB ~]$ mongo -uroot -proot admin  MongoDB shell version: 3.2.8 connecting to: admin >

方法二:在数据库中进行登陆验证:

[mongod@MongoDB ~]$ mongo  MongoDB shell version: 3.2.8 connecting to: test > use admin switched to db admin > db.auth("root","root") 1 > show tables; system.users system.version

1.6.3 按生产需求创建应用用户

创建对某库的只读用户

   在test库创建只读用户test

use test db.createUser(   {     user: "test",     pwd: "test",     roles: [ { role: "read", db: "test" } ]   } )

   测试用户是否创建成功

db.auth("test","test") show  users;

登录test用户,并测试是否只读

show collections; db.createCollection('b')

创建某库的读写用户

  创建test1用户,权限为读写

db.createUser(   {     user: "test1",     pwd: "test1",     roles: [ { role: "readWrite", db: "test" } ]   } )

   查看并测试用户

show users; db.auth("test1","test1")

创建对多库不同权限的用户

   创建对app为读写权限,对test库为只读权限的用户

use app db.createUser(   {     user: "app",     pwd: "app", roles: [ { role: "readWrite", db: "app" },          { role: "read", db: "test" }  ]   } )

查看并测试用户

show users db.auth("app","app")

删除用户

   删除app用户:先登录到admin数据库

mongo -uroot –proot 127.0.0.1/admin

   进入app库删除app用户

use app db.dropUser("app")

1.6.4 自定义数据库

创建app数据库的管理员:先登录到admin数据库

use app db.createUser( { user: "admin", pwd: "admin", roles: [ { role: "dbAdmin", db: "app" } ] } )

创建app数据库读写权限的用户并具有clusterAdmin权限:

use app db.createUser( { user: "app04", pwd: "app04", roles: [ { role: "readWrite", db: "app" }, { role: "clusterAdmin", db: "admin" } ] } )

1.7 SQL与MongoDB语言对比

SQL语言与CRUD语言对照 

SQL Schema Statements

MongoDB Schema Statements

CREATE TABLE users (

id MEDIUMINT NOT NULL

AUTO_INCREMENT,

user_id Varchar(30),

age Number,

status char(1),

PRIMARY KEY (id)

)

Implicitly created on first insert() operation. The primary

key _idis automatically added if _id field is not specified.

db.users.insert( {

user_id: "abc123",

age: 55,

status: "A"

} )

However, you can also explicitly create a collection:

db.createCollection("users")

ALTER TABLE users

ADD join_date DATETIME

在Collection 没有数据构概念。然而在 document,可以通$set

update操作添加列到文档中。

db.users.update(

{ },

{ $set: { join_date: new Date() } },

{ multi: true }

)

ALTER TABLE users

DROP COLUMN join_date

在Collection 没有数据构概念。然而在 document,可以通$unset

在update操作从文档中除列。

db.users.update(

{ },

{ $unset: { join_date: "" } },

{ multi: true }

)

CREATE INDEX idx_user_id_asc

ON users(user_id)

db.users.createIndex( { user_id: 1 } )

CREATE INDEX

idx_user_id_asc_age_desc

ON users(user_id, age DESC)

db.users.createIndex( { user_id: 1, age: -1 } )

DROP TABLE users

db.users.drop()

插入/删除/更新 语句对比

SQL  Statements

MongoDB  Statements

INSERT INTO

users(user_id,

age

status)

VALUES ("bcd001",

45,

"A")

db.users.insert(

{ user_id: "bcd001", age:

45, status: "A" }

)

DELETE FROM users

WHERE status = "D"

db.users.remove( { status: "D" } )

DELETE FROM users

db.users.remove({})

UPDATE users

SET status = "C"

WHERE age > 25

db.users.update(

{ age: { $gt: 25 } },

{ $set: { status: "C" } },

{ multi: true }

)

UPDATE users

SET age = age + 3

WHERE status = "A"

db.users.update(

{ status: "A" } ,

{ $inc: { age: 3 } },

{ multi: true }

)

查询类操作对比 

SQL SELECT Statements

MongoDB find() Statements

SELECT *

FROM users

db.users.find()

SELECT id,

user_id,

status

FROM users

db.users.find(

{ },

{ user_id: 1, status: 1, _id: 0 }

)

SELECT user_id, status

FROM users

db.users.find(

{ },

{ user_id: 1, status: 1 }

)

SELECT *

FROM users

WHERE status = "A"

db.users.find(

{ status: "A" }

)

SELECT user_id, status

FROM users

WHERE status = "A"

db.users.find(

{ status: "A" },

{ user_id: 1, status: 1, _id: 0 }

)

1.8 错误解决

  在登陆数据库的时候,发现会由描述文件相关的报错。
[mongod@MongoDB mongodb]$ mongo MongoDB shell version: 3.2.8 connecting to: test Server has startup warnings:  2018-01-03T11:08:55.526+0800 I CONTROL  [initandlisten]  2018-01-03T11:08:55.526+0800 I CONTROL  [initandlisten] ** WARNING: soft rlimits too low. rlimits set to 19193 processes, 65535 files. Number of processes should be at least 32767.5 : 0.5 times number of files.

解决办法:

cat >> /etc/security/limits.conf <<EOF mongod   soft     nofile     32767.5 mongod   soft     nproc      32767.5 EOF

   修改后,重启服务器,即可解决该问题。

1.9 参考文献

[1]  https://docs.mongodb.com/manual/introduction/

[2]  http://www.mongoing.com/docs/introduction.html

[3]  https://zh.wikipedia.org/

[4]  https://docs.mongodb.com/manual/core/security-built-in-roles/

 

作者:惨绿少年
出处:http://clsn.io


浏览567 评论0
返回
目录
返回
首页
Centos7 Linux 安装 ArcGIS Enterprise10.8教程 庐山真面目之八微服务架构 NetCore 基于 Dockerfile 文件部署