关于mongodb的权限

所谓权限,就是开启认证,从而确定一个用户是否能访问某一个库,因此和用户是分不开的。默认情况下,mongodb是没开启认证的,也没有用户。这样肯定是不安全的,因此我们要开启认证,同时还要配置用户。

用户

mongodb的用户有一下几个特点:

  1. 用户是分角色的,有内置角色,也可以自定义角色
  2. 用户是和库绑定的,登录认证的时候也要在对应的库中认证
  3. 一般需要先创建管理员账号,然后再开启服务端认证

常见内置角色说明

  1. 数据库用户角色(Database User Roles)

    read :授权用户只读数据的权限,允许用户读取指定的数据库

    readWrite: 授权用户“读/写”数据的权限,允许用户“读/写”指定的数据库

  2. 数据库管理角色(Database Admininstration Roles)

    dbAdmin:在当前的数据库中执行管理操作,如索引的创建、删除、统计、查看等
    dbOwner:在当前的数据库中执行任意操作,增、删、改、查等
    userAdmin:在当前的数据库中管理用户,创建、删除和管理用户。

  3. 备份和还原角色(Backup and Restoration Roles)

    backup:备份角色
    restore:还原角色

  4. 可跨库角色(All-Database Roles)

    readAnyDatabase:授权在所有的数据库上读取数据的权限,只在admin 中可用
    readWriteAnyDatabase:授权在所有的数据库上读写数据的权限,只在admin 中可用
    userAdminAnyDatabase:授权在所有的数据库上管理用户的权限,只在admin中可用
    dbAdminAnyDatabase: 授权管理所有数据库的权限,只在admin 中可用

  5. 集群管理角色(Cluster Administration Roles)

    clusterAdmin:授权管理集群的最高权限,只在admin中可用
    clusterManager:授权管理和监控集群的权限
    clusterMonoitor:授权监控集群的权限,对监控工具具有readonly的权限
    hostManager:管理server

  6. 超级角色(super master Roles)

    root :超级账户和权限,只在admin中可用

创建用户

# 第二个参数是可选的
db.createUser(user, writeConcern)

第一个参数user的格式是这样的:

{
  user: "<name>",
  // Or  "<cleartext password>"
  pwd: passwordPrompt(),
  customData: { <any information> },
  roles: [
    { role: "<role>", db: "<database>" } | "<role>",
  ],
  authenticationRestrictions: [
     {
       clientSource: ["<IP>" | "<CIDR range>",],
       serverAddress: ["<IP>" | "<CIDR range>",]
     },
  ],
  mechanisms: [ "<SCRAM-SHA-1|SCRAM-SHA-256>",],
  passwordDigestor: "<server|client>"
}

常见的配置项有:

user:用户的名字(字符串类型)
pwd:用户的密码(字符串类型)
roles:用户的角色(数组类型)

使用案例1:

# 切换到xxx数据库
use xxx;
# 创建一个用户,账号为ss,密码为:123456,角色为:xxx库的readWrite
db.createUser({
		user:"ss",
		pwd: "123456",
		roles:["readWrite"]
});

使用案例2:

# 切换到yyy库
use yyy;
# 创建一个用户,账号为zs,密码为:654321,角色有多个,分别是:
# 1. yyy库中的readWrite角色
# 2. xxx库中的read角色
db.createUser({
    user : "zs",
    pwd : "654321",
    roles : [
    		# 这里虽然绑定的事xxx库,但是验证的时候也要在yyy库中进行
        { role : "read", db : "xxx" },
        "readWrite"
    ]
})

开启验证

方法1:使用配置文件
# 在配置文件中加入这段配置
auth=true

修改完配置后别忘了重启服务端

方法2:启动时候加入--auth
mongod --dbpath=/usr/local/mongodb/data/ --logpath=/usr/local/mongodb/logs/mongodb.log --logappend --port=27017 --fork --auth

执行验证

方法1:在数据库内验证
# 使用客户端连接到服务端
mongo

执行验证

# 切换到对应的数据库
use xxx
# 使用账号和密码验证(返回值1表示通过,0表示未通过验证)
db.auth('ss','123456');

注意:一次连接尽量只验证一个用户,也就是说尽量不要多次使用db.auth(),否则有可能出现:too many users are authenticated 错误,遇到这个错误的话,退出重新连接即可。

方法2:连接的时候验证
mongo -u zs -p 654321 --authenticationDatabase yyy

上面的参数解释:

-u: 用户名
-p: 密码
--authenticationDatabase:在哪个数据库中验证(就是用户创建的那个数据库)
# 其它的参数还有,比如:--port

附一:创建管理员

一般情况下,我们用一些普通的用户就可以完成很多操作,但是,很多时候,为了我们可以更方便的管理数据库,我们会创建一个管理账号,比如创建个 root 角色的用户:

use admin;
db.createUser({
		user:"smart",
		pwd: "123456",
		roles:["root"]
});

附二:管理权限的其它操作

查看当前库下的所有用户

use xxx
# 查看当前库的所有用户
show users

修改当前库下的某个用户的信息

# 成功后无返回值
db.updateUser('zs', {pwd: '666666'});

修改当前库下的某个用户的密码

# 成功后无返回值
db.changeUserPassword('zs', '888888');

删除当前库下的某个用户

# 成功后返回true
db.dropUser('zs')

查看系统中的所有用户

# 要在admin库下操作
use admin
db.system.users.find()
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Spring中配置MongoDB权限,可以通过以下几个步骤实现: 1. 配置MongoDB连接属性: 在Spring的配置文件(如application.properties或application.yml)中,设置MongoDB的连接属性,包括主机名、端口号、数据库名称等。示例如下: ```properties spring.data.mongodb.host=localhost spring.data.mongodb.port=27017 spring.data.mongodb.database=mydatabase ``` 2. 配置MongoDB的认证信息: 如果MongoDB启用了认证,你需要在配置文件中提供用户名和密码。示例如下: ```properties spring.data.mongodb.authentication-database=admin spring.data.mongodb.username=myusername spring.data.mongodb.password=mypassword ``` 这里的`authentication-database`属性指定了认证所使用的数据库,通常是`admin`。 3. 配置MongoDB权限MongoDB权限配置可以通过在数据库中创建用户并为其分配角色来实现。可以使用Mongo shell或其他管理工具来执行以下操作: a. 连接到MongoDB服务器: ``` mongo --host localhost --port 27017 -u adminusername -p adminpassword --authenticationDatabase admin ``` b. 创建用户并分配角色: ``` use mydatabase db.createUser( { user: "myuser", pwd: "mypassword", roles: [ { role: "readWrite", db: "mydatabase" } ] } ) ``` 这里创建了一个名为`myuser`的用户,并为其分配了`readWrite`角色,该角色对`mydatabase`数据库具有读写权限。 4. 使用配置的权限: 在应用程序中使用MongoDB时,可以使用Spring Data MongoDB提供的功能来连接数据库,并使用在步骤3中创建的用户进行权限验证。示例代码如下: ```java @Configuration @EnableMongoRepositories(basePackages = "com.example.repository") public class MongoConfig extends AbstractMongoClientConfiguration { @Value("${spring.data.mongodb.host}") private String host; @Value("${spring.data.mongodb.port}") private int port; @Value("${spring.data.mongodb.database}") private String database; @Value("${spring.data.mongodb.username}") private String username; @Value("${spring.data.mongodb.password}") private String password; @Override protected String getDatabaseName() { return database; } @Override public MongoClient mongoClient() { MongoCredential credential = MongoCredential.createCredential(username, database, password.toCharArray()); return new MongoClient(new ServerAddress(host, port), credential, MongoClientOptions.builder().build()); } } ``` 这里的`MongoConfig`类继承了`AbstractMongoClientConfiguration`类,配置了MongoDB的连接和认证信息。通过`@EnableMongoRepositories`注解启用Spring Data MongoDB的功能,并指定了存储库的包路径。 这样,你就可以使用Spring连接到MongoDB,并在配置的权限下进行操作了。请根据实际情况修改配置文件和代码中的参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值