概述
角色(或策略)聚合了多个权限,并可包含其他角色,从而实现层级化、模块化访问控制。合理设计和使用角色可以实现基于角色的访问控制(RBAC),简化权限管理,提升系统安全性。
嬴图支持使用GQL和UQL管理数据库中的角色。
命名规范
数据库中的角色名必须唯一,并符合以下规则:
- 2~64个字符
- 以字母开头(A–Z或a–z)
- 可以包含字母,数字(0–9),下划线(
_
)
使用GQL
显示角色
列出数据库中所有定义的角色:
SHOW ROLE
创建角色
创建名为Tester
的角色:
CREATE ROLE Tester
重命名角色
将角色Tester
重命名为sales
:
ALTER ROLE Tester RENAME TO sales
授予角色
您可为角色授予权限和角色,且不会覆盖该角色已有权限和角色。
系统权限
授予角色Tester
系统权限SHOW_GRAPH
和ALTER_GRAPH
:
GRANT ["SHOW_GRAPH", "ALTER_GRAPH"] TO ROLE Tester
授予角色superADM
所有系统权限:
GRANT * TO ROLE superADM
图权限
授予角色Tester
对所有图的图权限READ
:
GRANT ["READ"] ON * TO ROLE Tester
授予角色Tester
对图amz
的图权限SHOW_INDEX
和SHOW_JOB
:
GRANT ["SHOW_INDEX","SHOW_JOB"] ON amz TO ROLE Tester
授予角色superADM
对所有图的图权限:
GRANT * ON * TO ROLE superADM
属性权限
授予角色Tester
对当前图中点Person
的name
和age
属性的READ
权限:
GRANT ['READ','WRITE'] ON NODE Person (name, age) TO ROLE Tester
授予角色sales
对当前图中所有边属性的DENY
权限:
GRANT ["DENY"] ON EDGE * * TO ROLE sales
角色
授予角色Tester
一个manager
角色:
GRANT ROLE manager TO ROLE Tester
从角色中撤销
您可从角色中撤销权限和角色。
系统权限
撤销角色Tester
的系统权限SHOW_POLICY
和ALTER_GRAPH
:
REVOKE ["SHOW_POLICY", "ALTER_GRAPH"] FROM ROLE Tester
撤销角色sales
的所有系统权限:
REVOKE * FROM ROLE sales
图权限
撤销角色Tester
对图amz
的READ
和UPDATE
权限:
REVOKE ["READ", "UPDATE"] ON amz FROM ROLE Tester
撤销角色sales
对所有图的图权限:
REVOKE * ON * FROM ROLE sales
属性权限
撤销角色Tester
对当前图中点Person
的name
和age
属性的READ
和WRITE
权限:
REVOKE ['READ','WRITE'] ON NODE Person (name, age) FROM ROLE Tester
撤销角色sales
对当前图中所有边属性的DENY
权限:
REVOKE ["DENY"] ON EDGE * * FROM ROLE sales
角色
撤销角色Tester
中的角色manager
:
REVOKE ROLE manager FROM ROLE Tester
删除角色
删除角色Tester
:
DROP ROLE Tester
使用UQL
显示角色(策略)
列出数据库中所有定义的角色(策略):
show().policy()
获取指定角色(策略)信息,如角色(策略)manager
:
show().policy("manager")
创建角色(策略)
您可在创建角色(策略)的同时为其分配权限和其他角色(策略):
create().policy("<name>").params({
system_privileges: ["<systemPriv>", "<systemPriv>", ...],
// Set <graph> as * to specify all graphs
graph_privileges: {
"<graph>": ["<graphPriv>", "<graphPriv>", ...],
"<graph>": ["<graphPriv>", "<graphPriv>", ...],
...
},
// Set <graph>/<schema>/<property> as * to specify all graphs/schemas/properties
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>"],...]
}
},
policies: ["<policy>", "<policy>", ...]
})
创建名为superADM
的角色(策略),并授予其所有图权限和系统权限:
create().policy("superADM").params({
graph_privileges: {"*":["READ","INSERT","UPSERT","UPDATE","DELETE","CREATE_SCHEMA","DROP_SCHEMA","ALTER_SCHEMA","SHOW_SCHEMA","RELOAD_SCHEMA","CREATE_PROPERTY","DROP_PROPERTY","ALTER_PROPERTY","SHOW_PROPERTY","CREATE_FULLTEXT","DROP_FULLTEXT","SHOW_FULLTEXT","CREATE_INDEX","DROP_INDEX","SHOW_INDEX","LTE","UFE","CLEAR_JOB","STOP_JOB","SHOW_JOB","ALGO","CREATE_PROJECT","SHOW_PROJECT","DROP_PROJECT","CREATE_HDC_GRAPH","SHOW_HDC_GRAPH","DROP_HDC_GRAPH","COMPACT_HDC_GRAPH","SHOW_VECTOR_INDEX","CREATE_VECTOR_INDEX","DROP_VECTOR_INDEX","SHOW_CONSTRAINT","CREATE_CONSTRAINT","DROP_CONSTRAINT"]},
system_privileges: ["TRUNCATE","COMPACT","CREATE_GRAPH","SHOW_GRAPH","DROP_GRAPH","ALTER_GRAPH","TOP","KILL","STAT","SHOW_POLICY","CREATE_POLICY","DROP_POLICY","ALTER_POLICY","SHOW_USER","CREATE_USER","DROP_USER","ALTER_USER","SHOW_PRIVILEGE","SHOW_META","SHOW_SHARD","ADD_SHARD","DELETE_SHARD","REPLACE_SHARD","SHOW_HDC_SERVER","ADD_HDC_SERVER","DELETE_HDC_SERVER","LICENSE_UPDATE","LICENSE_DUMP","GRANT","REVOKE","SHOW_BACKUP","CREATE_BACKUP","SHOW_VECTOR_SERVER","ADD_VECTOR_SERVER","DELETE_VECTOR_SERVER"]
})
创建角色(策略)Tester
,并为其分配:
- 系统权限:
SHOW_GRAPH
,ALTER_GRAPH
- 图权限:对所有图的
READ
权限,对图amz
和trans
的SHOW_INDEX
和SHOW_JOB
权限 - 属性权限:
- 点:对所有点属性的
read
权限 - 边:图
amz
中,对边edgx
的rank
和asset
属性的write
权限,以及对所有边的mark
属性的read
权限
- 点:对所有点属性的
- 角色(策略):
manager
create().policy("Tester").params({
system_privileges: ["SHOW_GRAPH", "ALTER_GRAPH"],
graph_privileges: {
"*": ["READ", "SHOW_SCHEMA", "SHOW_PROPERTY"],
"amz": ["SHOW_INDEX", "SHOW_JOB"],
"trans": ["SHOW_INDEX", "SHOW_JOB"]
},
property_privileges: {
"node": {
"read": [["*", "*", "*"]]
},
"edge": {
"read": [["amz", "*", "mark"]],
"write": [
["amz", "edgx", "rank"],
["amz", "edgx", "asset"]
]
}
},
policies: ["manager"]
})
授予角色(策略)
您可为角色(策略)授予权限和角色(策略),且不会覆盖该角色已有权限和角色(策略)。
grant().policy("<name>").params({
system_privileges: ["<systemPriv>", "<systemPriv>", ...],
// Set <graph> as * to specify all graphs
graph_privileges: {
"<graph>": ["<graphPriv>", "<graphPriv>", ...],
"<graph>": ["<graphPriv>", "<graphPriv>", ...],
...
},
// Set <graph>/<schema>/<property> as * to specify all graphs/schemas/properties
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>"],...]
}
},
policies: ["<policy>", "<policy>", ...]
})
为角色(策略)Tester
授予对图集Tax
的图权限CREATE_SCHEMA
和DROP_SCHEMA
,以及系统权限ADD_HDC_SERVER
:
grant().policy("Tester").params({
graph_privileges: {"Tax": ["CREATE_SCHEMA", "DROP_SCHEMA"]},
system_privileges: ["ADD_HDC_SERVER"]
})
从角色(策略)中撤销
您可从角色(策略)中撤销权限和角色。
revoke().policy("<name>").params({
system_privileges: ["<systemPriv>", "<systemPriv>", ...],
// Set <graph> as * to specify all graphs
graph_privileges: {
"<graph>": ["<graphPriv>", "<graphPriv>", ...],
"<graph>": ["<graphPriv>", "<graphPriv>", ...],
...
},
// Set <graph>/<schema>/<property> as * to specify all graphs/schemas/properties
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>"],...]
}
},
policies: ["<policy>", "<policy>", ...]
})
撤销角色(策略)Tester
中,对图Tax
的图权限CREATE_SCHEMA
和DROP_SCHEMA
,以及系统权限ADD_HDC_SERVER
:
revoke().policy("Tester").params({
graph_privileges: {"Tax": ["CREATE_SCHEMA", "DROP_SCHEMA"]},
system_privileges: ["ADD_HDC_SERVER"]
})
修改角色(策略)
您可修改角色(策略)中包含的权限和角色(策略)。请留意,只有指定的项目会被修改,其余保持不变。
alter().policy("<name>").set({
system_privileges: ["<systemPriv>", "<systemPriv>", ...],
// Set <graph> as * to specify all graphs
graph_privileges: {
"<graph>": ["<graphPriv>", "<graphPriv>", ...],
"<graph>": ["<graphPriv>", "<graphPriv>", ...],
...
},
// Set <graph>/<schema>/<property> as * to specify all graphs/schemas/properties
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>"],...]
}
},
policies: ["<policy>", "<policy>", ...]
})
仅修改角色(策略)Tester
中的图权限:
alter().policy("Tester").set({graph_privileges: {"Tax": ["UPDATE"]}})
修改角色(策略)Tester
中的图权限、属性权限和角色:
alter().policy("Tester").set({
graph_privileges: {"*": ["UPDATE", "DELETE"]},
property_privileges: {
"node": {
"write": [["miniCircle","*","*"]]
},
"edge": {
"write": [["miniCircle","*","*"]]
}
},
policies: ["sales"]
})
删除角色(策略)
删除角色(策略)Tester
:
drop().policy("Tester")