概述
权限是访问控制的关键机制,可用来控制用户在图数据库上的操作权限。对查询、更新或管理数据库等特定操作设置访问限制,能够加强系统安全性。可将一组权限分配给一个策略,然后将该策略分配给用户。也可将单独的权限直接分配给用户。
嬴图支持的权限类型:
- 图集权限:包括操作和读取特定图集数据及其结构,管理图集的索引、作业、HDC图集等操作。
- 系统权限:包括管理数据库的图集、进程、权限、策略、用户、服务器等操作。
- 属性权限:包括应用于特定属性的
read
、write
和deny
操作。
显示权限
获取数据库中的所有权限:
show().privilege()
权限信息呈现在表格_privilege
中:
graphPrivileges | systemPrivileges |
---|---|
["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"] | ["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"] |
所有权限
图集权限
权限 |
描述 | 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_VECTOR_INDEX |
在图集中创建向量索引 | create().node_vector_index().on() |
DROP_VECTOR_INDEX |
删除图集中的向量索引 | drop().node_vector_index() |
SHOW_VECTOR_INDEX |
显示图集中的向量索引 | show().node_vector_index() |
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() |
GRANT |
向策略或用户追加权限和策略 | grant().policy().params() , grant().user().params() |
REVOKE |
从策略或用户撤销权限和策略 | revoke().policy().params() , revoke().user().params() |
SHOW_META |
显示数据库的meta服务器 | show().meta() |
SHOW_SHARD |
显示数据库的shard服务器 | show().shard() |
ADD_SHARD |
向数据库添加shard服务器 | alter().shard().add() |
REPLACE_SHARD |
修改shard服务器的副本地址 | alter().shard().replace() |
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() |
SHOW_VECTOR_SERVER |
显示数据库的向量服务器 | show().vector() |
ADD_VECTOR_SERVER |
向数据库添加向量服务器 | alter().vector().add() |
DELETE_VECTOR_SERVER |
从数据库删除向量服务器 | alter().vector().delete() |
LICENSE_UPDATE |
更新数据库的许可证 | license().update() |
LICENSE_DUMP |
删除数据库的许可证 | license().dump() |
SHOW_BACKUP |
显示数据库备份 | db.backup.show() |
CREATE_BACKUP |
创建数据库备份 | db.backup.create() |
属性权限
权限 |
描述 |
---|---|
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().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 属性,查询将报错 |
删除 | 即使未获得写入权限,只要拥有图权限DELETE 和DROP_PROPERTY ,即可删除属性、点或边 |