认证和授权
1. 至少创建一个admin用户
当创建一个admin用户后,InfluxDB才能开启认证。
2. 在配置文件中,认证默认是不开启的
将[http]
区域的配置auth-enabled
设为true
,可以开启认证:
3. 重启进程
现在InfluxDB会核对每个请求中的用户信息,只会处理已有用户而认证通过的请求。
HTTP API中的认证
有两个HTTP API进行验证的方式。
如果使用基本身份验证和URL查询参数进行身份验证,则以查询参数中指定的用户优先。下面的示例中的查询假定用户是admin用户。
用中所描述的基本身份验证
这是提供用户的首选方法。例:
curl -G http://localhost:8086/query -u todd:influxdb4ever --data-urlencode "q=SHOW DATABASES"
在URL的参数或是请求体里面提供认证
设置u
和p
参数, 例:
curl -G "http://localhost:8086/query?u=todd&p=influxdb4ever" --data-urlencode "q=SHOW DATABASES"
认证在请求体中的例子:
curl -G http://localhost:8086/query --data-urlencode "u=todd" --data-urlencode "p=influxdb4ever" --data-urlencode "q=SHOW DATABASES"
CLI中的认证
在CLI中有三种认证方式。
设置INFLUX_USERNAME
和INFLUX_PASSWORD
环境变量
例如:
export INFLUX_USERNAME todd
echo $INFLUX_USERNAME $INFLUX_PASSWORD
todd influxdb4ever
influx
Connected to http://localhost:8086 version 1.3.x
InfluxDB shell 1.3.x
开启CLI时设置username
和password
例如:
influx -username todd -password influxdb4ever
Connected to http://localhost:8086 version 1.3.x
InfluxDB shell 1.3.x
开启CLI后使用auth <username> <password>
influx
Connected to http://localhost:8086 version 1.3.x
InfluxDB shell 1.3.x
> auth
username: todd
password:
>
当开启认证之后,授权也就开启了。默认情况下,所有的用户都有所有的权限。
admin用户
admin用户有所有数据库的读写权限,这些所有的权限包括如下:
数据库管理:
CREATE DATABASE
,DROP DATABASE
- ,
DROP MEASUREMENT
CREATE RETENTION POLICY
,ALTER RETENTION POLICY
, 和DROP RETENTION POLICY
CREATE CONTINUOUS QUERY
和DROP CONTINUOUS QUERY
用户管理:
admin用户管理:
CREATE USER
,GRANT ALL PRIVILEGES
,REVOKE ALL PRIVILEGES
,和SHOW USERS
非admin用户管理:
CREATE USER
,GRANT [READ,WRITE,ALL]
,REVOKE [READ,WRITE,ALL]
,和SHOW GRANTS
一般admin用户管理:
SET PASSWORD
和DROP USER
非admin用户
非admin用户对于每个数据库,有如下三个权限:
READ
WRITE
ALL
(包括READ
和WRITE
)
READ
,WRITE
和ALL
控制到每个数据库每个用户上。一个新的非admin用户对任何数据库都没有权限,除非被admin用户指定一个数据库权限。非admin用户可以在他们有READ
或/和WRITE
权限的机器上运行SHOW
命令。
admin用户管理
当开启HTTP认证之后,在你操作系统之前,InfluxDB要求你至少创建一个admin用户。
CREATE USER admin WITH PASSWORD '<password>' WITH ALL PRIVILEGES
CREATE
另一个admin用户
CREATE USER <username> WITH PASSWORD '<password>' WITH ALL PRIVILEGES
CLI例子:
> CREATE USER paul WITH PASSWORD 'timeseries4days' WITH ALL PRIVILEGES
>
给一个存在的用户GRANT
权限
GRANT ALL PRIVILEGES TO <username>
CLI例子:
> GRANT ALL PRIVILEGES TO "todd"
>
给一个admin用户REVOKE
权限
REVOKE ALL PRIVILEGES FROM <username>
> REVOKE ALL PRIVILEGES FROM "todd"
>
SHOW
所有存在的用户以及其admin状态
CLI例子:
> SHOW USERS
user admin
todd false
paul true
hermione false
dobby false
非admin用户管理
一个非admin用户:
CREATE USER <username> WITH PASSWORD '<password>'
CLI例子:
> 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'
>
GRANT READ, WRITE
或者ALL
数据库权限给一个存在的用户
GRANT [READ,WRITE,ALL] ON <database_name> TO <username>
CLI例子: 给用户todd``GRANT
数据库NOAA_water_database
的READ
的权限:
给用户todd``GRANT
数据库NOAA_water_database
的ALL
的权限:
> GRANT ALL ON "NOAA_water_database" TO "todd"
>
REVOKE READ, WRITE
或者ALL
数据库权限给一个存在的用户
REVOKE [READ,WRITE,ALL] ON <database_name> FROM <username>
CLI例子: 给用户todd``REVOKE
数据库NOAA_water_database
的ALL
的权限:
> REVOKE ALL ON "NOAA_water_database" FROM "todd"
>
给用户todd``REVOKE
数据库NOAA_water_database
的WRITE
的权限:
> REVOKE WRITE ON "NOAA_water_database" FROM "todd"
>
SHOW
一个用户的数据库权限
SHOW GRANTS FOR <user_name>
CLI例子:
> SHOW GRANTS FOR "todd"
database privilege
NOAA_water_database WRITE
another_database_name READ
yet_another_database_name ALL PRIVILEGES
普通admin和非admin用户管理
重新设置一个用户的密码
SET PASSWORD FOR <username> = '<password>'
CLI例子:
> SET PASSWORD FOR "todd" = 'influxdb4ever'
>
> **Note:** The password [string]($Query_language-influxdb-v1.3-query_language-spec-#strings) must be wrapped in single quotes.
DROP
一个用户
CLI例子:
> DROP USER "todd"
>
没有认证或者是带有不正确认证信息的请求发到InfluxDB,将会返回一个HTTP 401 Unauthorized
的错误。
没有授权的用户的请求发到InfluxDB,将会返回一个HTTP 403 Forbidden
的错误。