概述
权限是访问控制的关键机制,可用来控制用户在图数据库上的操作权限。对查询、更新或管理数据库等特定操作设置访问限制,能够加强系统安全性。可将一组权限分配给一个策略,然后将该策略分配给用户。也可将单独的权限直接分配给用户。
嬴图支持的权限类型:
- 图集权限:包括操作和读取特定图集数据及其结构,管理图集的索引、作业、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,即可删除属性、点或边 |