influxdb认证和授权

目录

身份认证和授权

身份认证

启用身份认证

使用http api方式提交身份认证

1.在url中提供认证参数

2.在request body中提供

使用命令行指令的方式提交身份认证

1.引入环境变量:INFLUX_USERNAME 和INFLUX_PASSWORD

2.在启动服务的时候给出用户名和密码

 3.在服务启动后,执行

验证telegraf对inflxdb的请求

授权

admin

1.admin拥有读写(read, write)所有数据库权限

2.对数据库的管理

3.对用户的管理

非管理员用户

admin管理

非管理员用户管理

 对管理员和非管理员的通用管理

身份认证和授权的http错误码


身份认证和授权

不应依赖身份验证和授权来阻止访问并保护数据免受恶意攻击者的攻击.

身份认证

只有启用了authentication仅仅在使用http请求的时候起作用。

在influxdb.conf里面默认是禁用了身份认证的。

启用身份认证

设置http模块的auth-enabled=true即可,设置完成之后重启服务。

[http]
  enabled = true
  bind-address = ":8086"
  auth-enabled = true # 启用身份认证
  log-enabled = true
  write-tracing = false
  pprof-enabled = false
  https-enabled = true
  https-certificate = "/etc/ssl/influxdb.pem"

使用http api方式提交身份认证

u: 用户名

p:密码

1.在url中提供认证参数

curl -G "http://localhost:8086/query?u=todd&p=influxdb4ever" --data-urlencode "q=SHOW DATABASES"

2.在request body中提供

curl -G http://localhost:8086/query --data-urlencode "u=todd" --data-urlencode "p=influxdb4ever" --data-urlencode "q=SHOW DATABASES"

使用命令行指令的方式提交身份认证

1.引入环境变量:INFLUX_USERNAME 和INFLUX_PASSWORD

export INFLUX_USERNAME=todd
export INFLUX_PASSWORD=influxdb4ever
echo $INFLUX_USERNAME $INFLUX_PASSWORD
todd influxdb4ever

influx
Connected to http://localhost:8086 version 1.4.x
InfluxDB shell 1.4.x

2.在启动服务的时候给出用户名和密码

influx -username todd -password influxdb4ever
Connected to http://localhost:8086 version 1.4.x
InfluxDB shell 1.4.x

 3.在服务启动后,执行

auth <username> <password>

influx
Connected to http://localhost:8086 version 1.4.x
InfluxDB shell 1.4.x
> auth
username: todd
password:
>

验证telegraf对inflxdb的请求

除了上述给出用户名密码,还需要额外的步骤。

/etc/telegraf/telegraf.conf配置文件里面,取消对username, password的注释。即启用username, password。

>
    ###############################################################################
    #                            OUTPUT PLUGINS                                   #
    ###############################################################################
>
    [...]
>
    ## Write timeout (for the InfluxDB client), formatted as a string.
    ## If not provided, will default to 5s. 0s means no timeout (not recommended).
    timeout = "5s"
    username = "telegraf" #?
    password = "metricsmetricsmetricsmetrics" #?
>
    [...]

授权

只有在启用了身份认证后才会强制执行授权。默认是禁用身份认证的,所有用户都有所有权限。

admin

1.admin拥有读写(read, write)所有数据库权限

2.对数据库的管理

// 创建/删除数据库
create/drop database

// 创建/更改/删除保留策略
carete/alter/drop retention policy

// 创建/删除连续查询
create/drop continuous query

3.对用户的管理

# 对admin用户的管理
// 创建用户
create user
// 授予/回收所有权限
grant/revoke all privileges
// 查询所有用户
show users

# 对非管理员用户的管理
// 创建用户
create user
// 授予/回收权限
grant/revoke read/write/all privileges
// 查询所有用户
show users


# 通用用户管理
// 设置密码
set password
// 删除用户
drop user

非管理员用户

可以拥有read/write/all(包含read和write)3种权限之一。

admin管理

当启用http授权后,influxdb会要求你在连入系统之前至少创建一个admin用户。

CREATE USER admin WITH PASSWORD '<password>' WITH ALL PRIVILEGES

创建其他的管理员

CREATE USER <username> WITH PASSWORD '<password>' WITH ALL PRIVILEGES

创建用户的指令是幂等的,如果其中任何值有变化都会返回一个用户已存在的错误信息。

> CREATE USER todd WITH PASSWORD '123456' WITH ALL PRIVILEGES
> CREATE USER todd WITH PASSWORD '123456' WITH ALL PRIVILEGES
> CREATE USER todd WITH PASSWORD '123' WITH ALL PRIVILEGES
ERR: user already exists
> CREATE USER todd WITH PASSWORD '123456'
ERR: user already exists
> CREATE USER todd WITH PASSWORD '123456' WITH ALL PRIVILEGES
>

给指定的用户授权

GRANT ALL PRIVILEGES TO <username>

回收指定用户的权限

REVOKE ALL PRIVILEGES FROM "todd"

查看已存在的所有用户以及各自的管理员状态(是不是管理员)

SHOW USERS

非管理员用户管理

// 创建一个非管理员用户
CREATE USER <username> WITH PASSWORD '<password>'

> CREATE USER todd WITH PASSWORD 'influxdb41yf3'
> CREATE USER alice WITH PASSWORD 'wonder\'land'
> CREATE USER "rachel_smith" WITH PASSWORD 'asdf1234!'
> CREATE USER "monitoring-robot" WITH PASSWORD 'XXXXX'
> CREATE USER "$savyadmin" WITH PASSWORD 'm3tr1cL0v3r'


1. 如果[用户名称]以数字开头,或者是influxdb关键字,或者包含了一些特殊字符,就必须使用双引号引起来
2. 密码,是一个字符串,必须使用单引号引起来, 在验证请求后不能包含单引号。
3. 对于包含单引号或换行符的密码,在创建密码和提交身份验证的时候需要使用反斜杠转义

在某个数据库上对某个用户授予读/写/读写权限(三选一)

GRANT [READ,WRITE,ALL] ON <database_name> TO <username>

GRANT READ ON "NOAA_water_database" TO "todd"

在某个数据库上回收某个用户的读/写/读写权限

REVOKE [READ,WRITE,ALL] ON <database_name> FROM <username>

REVOKE ALL ON "NOAA_water_database" FROM "todd"

如果一个用户拥有读写权限(ALL),回收了write后还剩read,反之亦然。

查看某个用户在哪些数据库有哪些权限

SHOW GRANTS FOR <user_name>

> SHOW GRANTS FOR "todd"
database		            privilege
NOAA_water_database	        WRITE
another_database_name	      READ
yet_another_database_name   ALL PRIVILEGES
one_more_database_name      NO PRIVILEGES

 对管理员和非管理员的通用管理

设置密码

SET PASSWORD FOR <username> = '<password>'

删除用户

DROP USER <username>

身份认证和授权的http错误码

HTTP 401 Unauthorized

如果启用了身份认证,请求里没有认证或者认证不正确,会返回401

HTTP 403 Forbidden

对于未授权的用户,返回403

 

 

 

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
InfluxDB和MQTT都是在物联网领域内使用到的重要技术。 InfluxDB是一种开源的时序数据库,主要用于存储和查询时间序列数据。它的设计目标是专为处理大量时间序列数据而优化的,适用于各种实时分析和监控场景。InfluxDB采用分布式结构,可以实现高可用性和可扩展性,可以水平扩展来满足大规模数据存储的需求。它提供了灵活的查询语言和API,可以方便地进行数据的查询、分析和可视化。另外,InfluxDB还支持数据的复制和备份,以提供数据的冗余和安全性。 MQTT(Message Queuing Telemetry Transport)是一种轻量级的、基于发布/订阅模式的消息传输协议。它被广泛应用于物联网设备之间的通信,以及与云服务之间的通信。MQTT具有低带宽、低功耗和低延迟的特点,适用于网络资源有限的物联网环境。它采用简单的消息发布和订阅机制,设备可以通过发布消息将数据发送到特定的主题(Topic),其他设备则可以通过订阅该主题来接收数据。MQTT的设计使得设备之间的通信更加易于实现和扩展,同时也降低了网络负载和功耗。 InfluxDB和MQTT可以结合使用,共同构建完整的物联网解决方案。物联网设备可以将数据通过MQTT协议发送到InfluxDB数据库进行存储和分析。同时,InfluxDB可以提供高效的数据查询和可视化功能,帮助用户实时监控和分析设备数据。通过结合使用InfluxDB和MQTT,用户可以快速构建基于时间序列数据库的物联网应用,并获得更好的实时数据处理和可视化能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值