认证和授权

    1. 至少创建一个admin用户

    当创建一个admin用户后,InfluxDB才能开启认证。

    2. 在配置文件中,认证默认是不开启的

    [http]区域的配置auth-enabled设为true,可以开启认证:

    3. 重启进程

    现在InfluxDB会核对每个请求中的用户信息,只会处理已有用户而认证通过的请求。

    HTTP API中的认证

    有两个HTTP API进行验证的方式。

    如果使用基本身份验证和URL查询参数进行身份验证,则以查询参数中指定的用户优先。下面的示例中的查询假定用户是admin用户。

    用中所描述的基本身份验证

    这是提供用户的首选方法。例:

    1. curl -G http://localhost:8086/query -u todd:influxdb4ever --data-urlencode "q=SHOW DATABASES"
    在URL的参数或是请求体里面提供认证

    设置up参数, 例:

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

    认证在请求体中的例子:

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

    CLI中的认证

    在CLI中有三种认证方式。

    设置INFLUX_USERNAMEINFLUX_PASSWORD环境变量

    例如:

    1. export INFLUX_USERNAME todd
    2. echo $INFLUX_USERNAME $INFLUX_PASSWORD
    3. todd influxdb4ever
    4. influx
    5. Connected to http://localhost:8086 version 1.3.x
    6. InfluxDB shell 1.3.x
    开启CLI时设置usernamepassword

    例如:

    1. influx -username todd -password influxdb4ever
    2. Connected to http://localhost:8086 version 1.3.x
    3. InfluxDB shell 1.3.x
    开启CLI后使用auth <username> <password>
    1. influx
    2. Connected to http://localhost:8086 version 1.3.x
    3. InfluxDB shell 1.3.x
    4. > auth
    5. username: todd
    6. password:
    7. >

    当开启认证之后,授权也就开启了。默认情况下,所有的用户都有所有的权限。

    admin用户

    admin用户有所有数据库的读写权限,这些所有的权限包括如下:

    数据库管理:

    • CREATE DATABASE, DROP DATABASE
    • , DROP MEASUREMENT
    • CREATE RETENTION POLICY,ALTER RETENTION POLICY, 和 DROP RETENTION POLICY
    • CREATE CONTINUOUS QUERYDROP 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 PASSWORDDROP USER

    非admin用户

    非admin用户对于每个数据库,有如下三个权限:

    • READ
    • WRITE
    • ALL(包括READWRITE

    READ,WRITEALL控制到每个数据库每个用户上。一个新的非admin用户对任何数据库都没有权限,除非被admin用户指定一个数据库权限。非admin用户可以在他们有READ或/和WRITE权限的机器上运行SHOW命令。

    admin用户管理

    当开启HTTP认证之后,在你操作系统之前,InfluxDB要求你至少创建一个admin用户。

    1. CREATE USER admin WITH PASSWORD '<password>' WITH ALL PRIVILEGES
    CREATE另一个admin用户
    1. CREATE USER <username> WITH PASSWORD '<password>' WITH ALL PRIVILEGES

    CLI例子:

    1. > CREATE USER paul WITH PASSWORD 'timeseries4days' WITH ALL PRIVILEGES
    2. >
    给一个存在的用户GRANT权限
    1. GRANT ALL PRIVILEGES TO <username>

    CLI例子:

    1. > GRANT ALL PRIVILEGES TO "todd"
    2. >
    给一个admin用户REVOKE权限
    1. REVOKE ALL PRIVILEGES FROM <username>
    1. > REVOKE ALL PRIVILEGES FROM "todd"
    2. >
    SHOW所有存在的用户以及其admin状态

      CLI例子:

      1. > SHOW USERS
      2. user admin
      3. todd false
      4. paul true
      5. hermione false
      6. dobby false

      非admin用户管理

      一个非admin用户:
      1. CREATE USER <username> WITH PASSWORD '<password>'

      CLI例子:

      1. > CREATE USER todd WITH PASSWORD 'influxdb41yf3'
      2. > CREATE USER alice WITH PASSWORD 'wonder\'land'
      3. > CREATE USER "rachel_smith" WITH PASSWORD 'asdf1234!'
      4. > CREATE USER "monitoring-robot" WITH PASSWORD 'XXXXX'
      5. > CREATE USER "$savyadmin" WITH PASSWORD 'm3tr1cL0v3r'
      6. >
      GRANT READ, WRITE或者ALL数据库权限给一个存在的用户
      1. GRANT [READ,WRITE,ALL] ON <database_name> TO <username>

      CLI例子: 给用户todd``GRANT数据库NOAA_water_databaseREAD的权限:

      给用户todd``GRANT数据库NOAA_water_databaseALL的权限:

      1. > GRANT ALL ON "NOAA_water_database" TO "todd"
      2. >
      REVOKE READ, WRITE或者ALL 数据库权限给一个存在的用户
      1. REVOKE [READ,WRITE,ALL] ON <database_name> FROM <username>

      CLI例子: 给用户todd``REVOKE数据库NOAA_water_databaseALL的权限:

      1. > REVOKE ALL ON "NOAA_water_database" FROM "todd"
      2. >

      给用户todd``REVOKE数据库NOAA_water_databaseWRITE的权限:

      1. > REVOKE WRITE ON "NOAA_water_database" FROM "todd"
      2. >
      SHOW一个用户的数据库权限
      1. SHOW GRANTS FOR <user_name>

      CLI例子:

      1. > SHOW GRANTS FOR "todd"
      2. database privilege
      3. NOAA_water_database WRITE
      4. another_database_name READ
      5. yet_another_database_name ALL PRIVILEGES

      普通admin和非admin用户管理

      重新设置一个用户的密码
      1. SET PASSWORD FOR <username> = '<password>'

      CLI例子:

      1. > SET PASSWORD FOR "todd" = 'influxdb4ever'
      2. >
      1. > **Note:** The password [string]($Query_language-influxdb-v1.3-query_language-spec-#strings) must be wrapped in single quotes.
      DROP一个用户

      CLI例子:

      1. > DROP USER "todd"
      2. >

      没有认证或者是带有不正确认证信息的请求发到InfluxDB,将会返回一个HTTP 401 Unauthorized的错误。

      没有授权的用户的请求发到InfluxDB,将会返回一个HTTP 403 Forbidden的错误。