概述
权限(Privilege)是嬴图数据库用户身份验证管理的最小单位,分命令权限和属性权限两类。
命令权限允许用户执行相应的UQL命令,可根据命令的作用域分为:
- 图集权限 (Graph Privilege):指用户有权使用与某个图集的schema、属性、加速索引、元数据、路径、算法和后台任务相关的UQL命令,分配权限时需指定具体的图集.
- 系统权限 (System Privilege):指用户有权使用与当前嬴图数据库的权限、策略、用户、图集、实时进程相关的UQL命令。
关于所有的命令权限及其对应的UQL命令,请参考权限分类。
属性权限允许(或拒绝)用户读(属性过滤、返回属性值)、写(增、删、改)相应的自定义属性。分配权限时需指定图集和schema,共分为三种:
- READ:指用户有权读某个自定义属性;
- WRITE:指用户有权读、写某个自定义属性;
- DENY:指用户无权读、写某个自定义属性。
DENY的优先级高于READ和WRITE。当针对一个自定义属性的DENY和READ(或WRITE)同时存在时,最终效果为DENY。
查看权限
返回的表名:_privilege
返回的表头:graphPrivileges|systemPrivileges(图集权限、系统权限)
// 查看系统支持的命令权限信息
show().privilege()
追加权限
追加属性权限
// 为指定用户或策略追加点、边属性权限
grant().privilege(["READ" | "WRITE" | "DENY"]).on(
"<graph>",
<@schema?>,
"<property?>"
).<user|policy>("<name>")
// 为指定用户或策略追加点属性权限
grant().node_privilege(["READ" | "WRITE" | "DENY"]).on(
"<graph>",
<@schema?>,
"<property?>"
).<user|policy>("<name>")
// 为指定用户或策略追加边属性权限
grant().edge_privilege(["READ" | "WRITE" | "DENY"]).on(
"<graph>",
<@schema?>,
"<property?>"
).<user|policy>("<name>")
本例追加策略sales对图集supplychain的点属性@product.price的READ权限:
grant().node_privilege(["READ"]).on(
"supplychain",
@product,
"price"
).policy("sales")
本例追加用户admin002对所有图集所有属性的WRITE权限:
grant().privilege(["WRITE"]).on(
"*",
@*,
"*"
).user("admin002")
上例中的参数on()也可以简写为on("*")。
追加系统权限
// 为指定用户或策略追加系统权限
grant().system().privilege(<[]system_privileges>).<user|policy>("<name>")
本例追加用户admin002的系统权限TOP和KILL:
grant().system().privilege(["TOP","KILL"]).user("admin002")
追加多种权限
// 为指定用户追加多种权限及策略
grant().user("<username>").params({
graph_privileges: <{}graph_privileges?>,
system_privileges: <[]system_privileges?>,
property_privileges: <{}property_privileges?>,
policies: <[]policies?>
})
其中的数据格式为:
// <{}graph_privileges>
{
"<graph1>":["<graph_privilege>", "<graph_privilege>", ...],
"<graph2>":["<graph_privilege>", "<graph_privilege>", ...],
...
}
// <{}property_privileges>
{
"node": {
"read": [
["<graph>", "<@schema?>", "<property?>"],
["<graph>", "<@schema?>", "<property?>"],
...
],
"write": [
["<graph>", "<@schema?>", "<property?>"],
["<graph>", "<@schema?>", "<property?>"],
...
],
"deny": [
["<graph>", "<@schema?>", "<property?>"],
["<graph>", "<@schema?>", "<property?>"],
...
],
},
"edge": {
"read": [
["<graph>", "<@schema?>", "<property?>"],
["<graph>", "<@schema?>", "<property?>"],
...
],
"write": [
["<graph>", "<@schema?>", "<property?>"],
["<graph>", "<@schema?>", "<property?>"],
...
],
"deny": [
["<graph>", "<@schema?>", "<property?>"],
["<graph>", "<@schema?>", "<property?>"],
...
],
}
}
本例给用户user02追加所有图集的UPDATE权限、系统权限STAT、所有图集所有属性的WRTIE权限以及策略management:
grant().user("user02").params({
graph_privileges: {"*": ["UPDATE"]},
system_privileges: ["STAT"],
property_privileges: {
"node": {
"write": [["*", "*", "*"]]
},
"edge": {
"write": [["*", "*", "*"]]
}
},
policies: ["management"]
})
撤回权限
撤回属性权限
// 从指定用户或策撤回加点、边属性权限
revoke().privilege(["READ" | "WRITE" | "DENY"]).on(
"<graph>",
<@schema?>,
"<property?>"
).<user|policy>("<name>")
// 从指定用户或策略撤回点属性权限
revoke().node_privilege(["READ" | "WRITE" | "DENY"]).on(
"<graph>",
<@schema?>,
"<property?>"
).<user|policy>("<name>")
// 从指定用户或策略撤回边属性权限
revoke().edge_privilege(["READ" | "WRITE" | "DENY"]).on(
"<graph>",
<@schema?>,
"<property?>"
).<user|policy>("<name>")
本例撤回策略sales对图集supplychain的点属性@product.price的READ权限:
revoke().node_privilege(["READ"]).on(
"supplychain",
@product,
"price"
).policy("sales")
本例撤回用户admin002对所有图集所有属性的WRITE权限:
revoke().privilege(["WRITE"]).on(
"*",
@*,
"*"
).user("admin002")
上例中的参数on()也可以简写为on("*")。
撤回系统权限
// 从指定用户或策略撤回系统权限
revoke().system().privilege(<[]system_privileges>).<user|policy>("<name>")
本例撤回用户admin002的系统权限TOP和KILL:
revoke().system().privilege(["TOP","KILL"]).user("admin002")
撤回多种权限
// 从指定用户撤回多种权限及策略
revoke().user("<username>").params({
graph_privileges: <{}graph_privileges?>,
system_privileges: <[]system_privileges?>,
property_privileges: <{}property_privileges?>,
policies: <[]policies?>
})
其中<{}graph_privileges>和<{}property_privileges>的数据格式同追加多种权限。
本例撤回用户user02所有图集的UPDATE权限、系统权限STAT、所有图集所有属性的WRTIE权限以及策略management:
revoke().user("user02").params({
graph_privileges: {"*": ["UPDATE"]},
system_privileges: ["STAT"],
property_privileges: {
"node": {
"write": [["*", "*", "*"]]
},
"edge": {
"write": [["*", "*", "*"]]
}
},
policies: ["management"]
})
权限分类
用户管理权限
| 名称 | 作用域 | 合法命令 |
|---|---|---|
| SHOW_PRIVILEGE | system | show().privilege() |
| SHOW_POLICY | system | show().policy() |
| CREATE_POLICY | system | create().policy() |
| ALTER_POLICY | system | alter().policy() |
| DROP_POLICY | system | drop().policy() |
| SHOW_USER | system | show().user() |
| CREATE_USER | system | create().user() |
| ALTER_USER | system | alter().user() |
| DROP_USER | system | drop().user() |
| GRANT | system | grant() |
| REVOKE | system | revoke() |
注:命令show().self()无需授权即可被任何用户合法使用。
图建模管理权限
| 名称 | 作用域 | 合法命令 |
|---|---|---|
| STAT | system | stats() |
| SHOW_GRAPH | system | show().graph() |
| CREATE_GRAPH | system | create().graph() |
| ALTER_GRAPH | system | alter().graph() |
| DROP_GRAPH | system | drop().graph() |
| MOUNT_GRAPH | system | mount() |
| UNMOUNT_GRAPH | system | unmount() |
| SHOW_SCHEMA | graph | show().schema(), show().node_schema(), show().edge_schema() |
| CREATE_SCHEMA | graph | create().node_schema(), create().edge_schema() |
| ALTER_SCHEMA | graph | alter().node_schema(), alter().edge_schema() |
| DROP_SCHEMA | graph | drop().node_schema(), drop().edge_schema() |
| SHOW_PROPERTY | graph | show().property(), show().node_property(), show().edge_property() |
| CREATE_PROPERTY | graph | create().node_property(), create().edge_property() |
| ALTER_PROPERTY | graph | alter().node_property(), alter().edge_property() |
| DROP_PROPERTY | graph | drop().node_property(), drop().edge_property() |
| SHOW_FULLTEXT | graph | show().fulltext(), show().node_fulltext(), show().edge_fulltext() |
| CREATE_FULLTEXT | graph | create().node_fulltext(), create().edge_fulltext() |
| DROP_FULLTEXT | graph | drop().node_fulltext(), drop().edge_fulltext() |
| SHOW_INDEX | graph | show().index(), show().node_index(), show().edge_index() |
| CREATE_INDEX | graph | create().node_index(), create().edge_index() |
| DROP_INDEX | graph | drop().node_index(), drop().edge_index() |
| LTE | graph | LTE() |
| UFE | graph | UFE() |
| TRUNCATE | system | truncate() |
| COMPACT | system | compact() |
图数据管理权限
| 名称 | 作用域 | 合法命令 |
|---|---|---|
| INSERT | graph | insert(), insert().overwrite() |
| UPSERT | graph | upsert() |
| UPDATE | graph | update() |
| DELETE | graph | delete() |
| DELETE_NODE | graph | delete().nodes() |
| DELETE_EDGE | graph | delete().edges() |
| TEMPLATE | graph | n(), e(), re(), le(), nf(), graph() |
| KHOP | graph | khop() |
| AB | graph | ab() |
| SPREAD | graph | spread() |
| AUTONET | graph | autonet() |
| FIND | graph | find() |
| FIND_NODE | graph | find().nodes() |
| FIND_EDGE | graph | find().edges() |
高级权限
| 名称 | 作用域 | 合法命令 |
|---|---|---|
| ALGO | graph | algo() |
| SHOW_ALGO | graph | show().algo() |
| SHOW_TASK | graph | show().task() |
| CLEAR_TASK | graph | clear() |
| STOP_TASK | graph | stop() |
| SHOW_BACKUP | graph | db.backup.show() |
| CREATE_BACKUP | graph | db.backup.create() |
| RESTORE_BACKUP | graph | db.backup.restore() |
| TOP | system | top() |
| KILL | system | kill() |
| SHOW_TRIGGER | graph | show().trigger(), show().node_trigger(), show().edge_trigger() |
| CREATE_TRIGGER | graph | create().node_trigger(), create().edge_trigger() |
| DROP_TRIGGER | graph | drop().node_trigger(), drop().edge_trigger() |