概述
权限(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() |