概述
权限是访问控制的关键机制,可用来控制用户在图数据库上的操作权限。对查询、更新或管理数据库等特定操作设置访问限制,能够加强系统安全性。可将一组权限分配给一个角色,然后将该角色分配给用户。也可将单独的权限直接分配给用户。
嬴图支持的权限类型:
- 图权限:包括操作和读取特定图的数据及其结构,管理图的索引、作业、HDC图集等操作。
- 系统权限:括管理数据库的图、进程、权限、角色、用户、服务器等操作。
- 属性权限:包括应用于特定属性的
read
、write
和deny
操作。
了解每条权限的细节,请参阅所有权限。
所有权限
图权限
权限 |
描述 | UQL |
---|---|---|
READ |
读取图中的数据 | find() , ab() , autonet() , spread() , khop() , n()...n() |
INSERT |
向图中插入点和边 | insert() |
UPSERT |
为图更新或插入点和边 | upsert() |
UPDATE |
更新图中的点和边 | update() |
DELETE |
删除图中的点和边 | delete() |
CREATE_SCHEMA |
在图中创建schema | create().node_schema() , create().edge_schema() |
DROP_SCHEMA |
删除图中的schema | drop().node_schema() , drop().edge_schema() |
ALTER_SCHEMA |
修改图中的schema | alter().node_schema() , alter().edge_schema() |
SHOW_SCHEMA |
显示图中的schema | show().schema() , show().node_schema() , show().edge_schema() |
RELOAD_SCHEMA |
重新加载图中点和边的总数 | db.schema.reload() |
CREATE_PROPERTY |
在图中创建属性 | create().node_property() , create().edge_property() |
DROP_PROPERTY |
删除图中的属性 | drop().node_property() , drop().edge_property() |
ALTER_PROPERTY |
修改图中的属性 | alter().node_property() , alter().edge_property() |
SHOW_PROPERTY |
显示图中的属性 | show().property() , show().node_property() , show().edge_property() |
CREATE_FULLTEXT |
在图中创建全文索引 | create().node_fulltext() , create().edge_fulltext() |
DROP_FULLTEXT |
删除图中的全文索引 | drop().node_fulltext() , drop().edge_fulltext() |
SHOW_FULLTEXT |
显示图中的全文索引 | show().fulltext() , show().node_fulltext() , show().edge_fulltext() |
CREATE_INDEX |
在图中创建索引 | create().node_index() , create().edge_index() |
DROP_INDEX |
删除图中的索引 | drop().node_index() , drop().edge_index() |
SHOW_INDEX |
显示图中的索引 | show().index() , show().node_index() , show().edge_index() |
LTE |
将磁盘上的属性加载到计算引擎中 | LTE().node_property() , LTE().edge_property() |
UFE |
将属性从计算引擎卸载 | UFE().node_property() , UFE().edge_property() |
CLEAR_JOB |
清除图中的作业 | clear().job() |
STOP_JOB |
结束图中的作业 | stop().job() |
SHOW_JOB |
显示图中的作业 | show().job() |
ALGO |
在图上执行算法 | algo() |
CREATE_PROJECT |
为图创建分布式投影 | create().projection() |
SHOW_PROJECT |
显示图的分布式投影 | show().projection() |
DROP_PROJECT |
删除图的分布式投影 | drop().projection() |
CREATE_HDC_GRAPH |
为图创建HDC图 | hdc.graph.create() |
SHOW_HDC_GRAPH |
显示图的HDC图 | hdc.graph.show() |
DROP_HDC_GRAPH |
删除图的HDC图 | hdc.graph.drop() |
COMPACT_HDC_GRAPH |
压缩图的HDC图 | hdc.graph.compact() |
系统权限
权限 |
描述 | UQL |
---|---|---|
TRUNCATE |
清空数据库中的图 | truncate().graph() |
COMPACT |
压缩数据库中的图 | compact().graph() |
CREATE_GRAPH |
在数据库中创建图 | create().graph() |
SHOW_GRAPH |
显示数据库中的图 | show().graph() |
DROP_GRAPH |
删除数据库中的图 | drop().graph() |
ALTER_GRAPH |
修改数据库中的图 | alter().graph() |
TOP |
显示数据库中的进程 | top() |
KILL |
结束数据库中的进程 | kill() |
STAT |
显示数据库的统计信息 | stats() |
SHOW_POLICY |
显示数据库中的策略 | show().policy() |
CREATE_POLICY |
在数据库中创建策略 | create().policy() |
DROP_POLICY |
删除数据库中的策略 | drop().policy() |
ALTER_POLICY |
修改数据库中的策略 | alter().policy() |
SHOW_USER |
显示数据库中的用户 | show().user() |
CREATE_USER |
在数据库中创建用户 | create().user() |
DROP_USER |
删除数据库中的用户 | drop().user() |
ALTER_USER |
修改数据库中的用户信息 | alter().user() |
SHOW_PRIVILEGE |
显示数据库中的权限 | show().privilege() |
SHOW_META |
显示数据库的meta服务器 | show().meta() |
SHOW_SHARD |
显示数据库的shard服务器 | show().shard() |
ADD_SHARD |
向数据库添加shard服务器 | alter().shard().add() |
DELETE_SHARD |
从数据库删除shard服务器 | alter().shard().delete() |
SHOW_HDC_SERVER |
显示数据库的HDC服务器 | show().hdc() |
ADD_HDC_SERVER |
向数据库添加HDC服务器 | alter().hdc().add() |
DELETE_HDC_SERVER |
从数据库删除HDC服务器 | alter().hdc().delete() |
LICENSE_UPDATE |
更新数据库的许可证 | license().update() |
LICENSE_DUMP |
删除数据库的许可证 | license().dump() |
属性权限
权限 |
描述 |
---|---|
read |
允许读取图中的指定属性 |
write |
同时允许读取和写入图中的指定属性 |
deny |
拒绝读取或写入图中的指定属性。deny 的优先级高于read 和write 。若同时向用户或策略分配deny 和read (或write ),则只有deny 权限生效 |
read
如果未获得对属性@user.name
的read
权限:
操作 |
示例 |
---|---|
返回属性信息 | find().nodes({@user}) as n return n{*} 查询结果将排除 name 属性find().nodes({@user}) as n return n.name 由于无权读取 name 属性,查询将报错 |
过滤属性 | find().nodes({name == "johndoe"}) as n return n 由于无权读取 name 属性,查询将报错 |
导出 | 无法导出无权读取的属性 |
write
如果未获得对属性@user.name
的write
权限:
操作 |
示例 |
---|---|
插入 | insert().into(@user).nodes({_id: "U873", name:"johndoe"}) 由于无权写入 name 属性,查询将报错insert().into(@user).nodes({_id: "U873"}) 本查询插入点 @user ,其_id 设定为U873 ,name 和其他属性设定为null |
覆盖 | insert().overwrite().into(@user).nodes({_id: "U872"}) 由于 insert().overwrite().into() 操作需要获得对目标schema的完整写入权限,查询将报错 |
插入更新 | upsert().into(@user).nodes({_id: "U873", name:"johndoe"}) 由于无权写入 name 属性,查询将报错upsert().into(@user).nodes({_id: "U873", level: "2"}) 本查询对应以下插入或更新操作:
|
更新 | update().nodes({@user._id == "U873"}).nodes({name: "johndoe"}) 由于无权写入 name 属性,查询将报错update().nodes({@user._id == "U873"}).nodes({level: "2"}) 本查询将点 U873 的level 属性更新为2 ,同时保持其他属性信息不变 |
删除 | 即使未获得写入权限,只要拥有图权限DELETE 和DROP_PROPERTY ,即可删除属性、点或边 |