用户权限及验证

总览

TigerGraph平台提供了一系列强大的身份验证功能,帮助数据库管理人员轻松管理用户权限以及对GSS操作进行验证:

  • 创建和管理多个TigerGraph用户账户。

  • 基于不同的图,为每一个用户分配适用于该图的特定身份,每个身份对应一组权限。

  • 可以使用Oauth 2.0方式进行用户验证。

  • 权限控制的设计框架预留了未来的扩展空间,未来的版本会添加更多的基于安全策略和用户账户的验证功能。

账户与密码

TigerGraph的用户账户存在的前提是TigerGraph平台已经存在,它与操作系统的账户是不同的。一个新安装会自动生成一个初始用户,默认用户名和密码都是tigergraph。该账户拥有一切管理权限,可于创建其他账户并给其他账户分配权限(详见身份和权限。也就是说,这个初始的tigergraph账号其实就是超级用户。

如果启用了用户验证(详见用户验证功能的启用与使用方法),则TigerGraph只有在收到有效的用户名密码、以及对应用户名拥有相关权限的前提下,才会执行该用户提交的操作请求。

TigerGraph接受两种用户验证方法:

  1. 用户名+密码

  2. 令牌(token):令牌为一个内含有效期的32字节的字符串,可用于REST++验证。

用户验证功能的启用与使用方法

用户验证功能在刚刚安装完TigerGraph后,默认是关闭的。安装程序会创建一个gsql超级用户,用户名和密码都是tigergraph。无论任何情况,只要超级用户的用户名和密码都是tigergraph,系统就不会执行用户验证,这样设计的初衷是为了便于在没有安全顾虑的情况下(例如用户演示环境或培训环境),更加容易地完成安装和配置步骤。在早期没有多身份和多图模式的TigerGraph版本中,我们就这么设计了。

由于有两种方法可以用来访问TigerGraph数据库(GSQL shell方式及REST++方式),所以我们需要针对这两种方法,配置不同的参数来同时启用两种方法的用户验证功能。

  1. 配置GSQL的方法:修改tigergraph用户的密码,使之不同于tigergraph。

  2. 配置Oauth 2的方法(用于REST++):使用gadmin工具配置RESTPP.Authentication参数。具体的配置方法详见下文。

有关于这两种配置方法的细节详见下文。

GSQL访问方法的配置

对于GSQL访问方式,启用用户验证功能的步骤为:修改tigergraph用户的密码。详见下文中的“修改密码”部分。

在单用户模式下,运行GSQL命令或命令文件,并提供用户名和密码。“-u”参数表示用户名,“-p”参数表示密码。假设没有提供密码,则系统随后会提示操作人员输入密码,这意味着在这种情况下的配置方式一定是交互模式。如果连用户名(-u)都没有提供,则系统会默认该请求来自tigergraph用户名,随后也会提示操作人员输入密码(假定我们已经启用了GSQL验证)。注意,如果未提供用户名,且用户验证处于关闭状态,则系统默认不会验证用户,而全部执行所有输入的请求。这在之前的所有版本也均为如此,我们称之为无保护的管理员模式(unprotected administrative mode)。

在GSQL的交互模式中运行上述命令时,只需要省略command部分,因为在shell中操作人员无须重复提交用户名和密码。下面的例子演示了两个用户各自通过自己的密码登录shell。这种情况下,操作人员也不需要指定图名。

{% code-tabs %} {% code-tabs-item title="例:进入交互模式" %}

REST++访问模式的用户验证

我们的REST++服务器使用OAuth 2.0方式的用户验证:每个用户可以创建一个或多个密文(secret,即一个由伪随机算法生成的唯一的字符串)。每条密文关联一个用户账户以及该账户在特定图上所拥有的权限。任何人都能够使用该密文,并通过引入一个特殊的REST端点而生成一个令牌(token)。随后,令牌便用于通过其他的REST端点来控制TigerGraph数据库指令。根据OAuth 2.0协议,每个令牌都有一个生命周期。默认的生命周期为一个月。

每条REST++请求都会在它的HTTP头部(header)中包含一个验证令牌。REST++服务器会在HTTP头中读取该令牌,若令牌失效,则REST++会拒绝该请求并提示验证错误。

启用REST++验证功能 下面的命令可用于启用REST++令牌验证功能:

创建令牌 操作人员必须在创建令牌之前先创建一条密文。密文是贼GSQL中生成的(详见‘创建密文’部分);GET /requesttoken端点用于创建令牌。

  • 密文 (必须提供): 用户的密文

  • 有效期(可选): 令牌的有效期,单位为秒。默认为一个月,折合约260万秒.

使用令牌

当启用了REST++验证后,我们必须在每个HTTP请求的头部都附上令牌。如果需要使用curl工具重写REST++请求,则需要用到以下语法:

身份和权限

TigerGraph平台预设定了六种不同的身份:超级用户(superuser)、管理员(admin)、开发者(designer)、查询编写者(querywriter)、查询阅读者(queryreader)和观察者(observer)。每种不同身份有一组不同的权限。权限大小自上而下继承,位于最顶端的是超级用户。简单而言,分配逻辑如下:

  • 观察者(以前的版本叫公共账号,即public)允许登录数据库,并在指定的图中读取数据库纲目和其他目录的细节,也可以自行修改自己的密码。

  • 查询阅读者除了拥有观察者的权限之外,还能在指定的图上运行已有的加载作业和查询。

  • 查询编写者除了拥有查询阅读者的权限之外,还能在指定的图上创建查询,以及执行一些数据处理命令。

  • 开发者(之前的版本叫架构师,即architect)除了拥有查询编写者的权限之外,还可以在指定的图上修改数据库纲目,以及创建加载作业。

  • 管理员除了拥有开发者的所有权限之外,还能够在指定的图上创建和删除用户,并为他们分配或回收权限。这意味着管理员可以对其他用户的权限进行管理。

  • 超级用户自动获得所有的图的管理员权限,同时可以创建全局点类和边类。它还能够创建新的图,或删除整个数据库。

下面的表格详细记录了每种身份拥有的权限。除了超级用户之外,其他人的权限范围都局限在特定的图之内。在某些情况下,一条命令的输出可能会因为账号权限等级的不同而有所变化。下文中会详细介绍账户管理的命令。有关图的定义、加载、查询和命令编辑的详情,请参与GSQL语法参考。

= 新引入的操作

= 在1.2版本前,管理员和开发者可以执行该操作.

创建和管理用户

在TigerGraph的安装过程中,系统会自动创建一个叫做tigergraph的超级用户。该超级用户拥有一切操作权限,包括建立和删除其他用户,和为其他用户分配权限等。该超级用户还可以用来创建其他超级用户,创建出来的其他超级用户也拥有一切权限。

本章节中的绝大多数命令都只能由超级用户或管理员运行。唯一的例外是SHOW USER,任何用户都能用它查看自己的身份信息。

创建用户

需要权限: 超级用户,管理员 新建一个用户。过程中GSQL会询问用户名和密码。

删除用户

需要权限: 超级用户,管理员 删除列出的用户。

查看用户信息

需要权限: 任何类型的账户

显示对应账号的用户名,身份,密文和令牌。非管理员非超级用户的账号只能看到自己的相关信息。管理员/超级用户则能够看到所有人的信息。

修改密码

管理员/超级用户新建一个用户后,需要为其配置一个初始密码。随后,该用户可自行修改其密码。

此外,管理员/超级用户也能修改他人的密码。例如,通过ALT PASSWORD hermione为用户名为hermione的账号修改密码。

分配/回收权限

权限要求: 超级用户,管理员 分配(或回收)身份权限,也叫做添加(或删除)身份权限

下面的示例中,我们为两个用户分别分配了查询阅读者权限,然后从其中一人身上收回该权限。随后再一次为两人分配查询编写者权限。

创建和管理代理用户组

代理用户组(Proxy Group)用于LDAP远程验证。 对于代理用户组的新建、详述和删除操作都需要用到超级用户或管理员用户权限。

创建用户组

需要权限:管理员、超级用户 创建一个代理用户组,组内成员的某条属性均满足条件attributename=value。

当用户组建立后,可以对该组分配(或移除)身份。如下所示:

显示组信息

需要权限:管理员、超级用户 输出用户组的详细信息。

删除组

需要权限:管理员、超级用户. 删除指定的组。 组内成员会失去代理关联关系,但其他方面不影响。

管理账号

当启用用户验证时,TigerGraph将在任何操作中强制用户提供用户名和密码,以便辨明该用户权限。

TigerGraph有提供两中账号验证方式:

  1. 用户名+密码

  2. 令牌验证:即一个32字节的字符串,可用于REST++请求。 令牌自创建之日起三个月有效。

下面的命令用于创建和管理密码,密文和令牌。

密文操作:创建、显示、删除

该命令用于创建和管理用户密文(secret)。密文是一个唯一的字符串,在特定环境中可作为用户账户验证身份。每次执行CREAT SECRET命令时都会生成一个全新的密文。因此在删除密文时,用户必须指定具体指定要删除的密文。下面的例子中包括如何用密码登录GSQL shell,创建两条密文(每个图一条),及删除其中的一条密文的操作。

令牌操作:创建、显示、删除、刷新 (不建议使用)

这组命令用于创建和管理用户令牌。用户令牌是一个唯一的字符串,用于在REST++请求中进行身份验证。事实上,令牌验证是REST++唯一支持的验证方式。用户必须在创建令牌前先生成密文。每个令牌都有生命周期和失效时间。默认的生命周期是三个月。然而,这三个月的起始日期是可以被不断刷新的。我们通过REFRESH TOKEN命令可将起始日期刷到当下时间,从而延长令牌的有效期。

下面一组命令演示了如何:登录GSQL,创建密文,用其创建令牌,用另一条密文创建另一个令牌,然后删除其中一个令牌。