目录

身份认证和授权

身份认证

启用身份认证

使用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

 

 

 

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐