本节介绍用于控制数据库、图和数据权限的方法。
权限
showPrivilege()
获取全部系统权限和图集权限。
参数
- 无
返回值
List<Privilege>
:获取的权限列表。
// Retrieves all running processes in the database
List<Privilege> privileges = driver.showPrivilege();
String graphPrivilegeNames = privileges.stream()
.filter(p -> p.getLevel() == PrivilegeLevel.GRAPH_LEVEL)
.map(Privilege::getName)
.collect(Collectors.joining(", "));
System.out.println("Graph privileges: " + graphPrivilegeNames);
String systemPrivilegeNames = privileges.stream()
.filter(p -> p.getLevel() == PrivilegeLevel.SYSTEM_LEVEL)
.map(Privilege::getName)
.collect(Collectors.joining(", "));
System.out.println("System privileges: " + systemPrivilegeNames);
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
策略(角色)
showPolicy()
获取数据库中的全部策略。
参数
config: RequestConfig
(可选):请求配置。
返回值
List<Policy>
:获取的策略列表。
// Retrieves all policies
List<Policy> policies = driver.showPolicy();
for (Policy policy : policies) {
System.out.println(policy.getName());
}
manager
Tester
sales
superADM
getPolicy()
获取数据库中一个指定的策略。
参数
policyName: String
:策略名称。config: RequestConfig
(可选):请求配置。
返回值
Policy
:获取的策略。
// Retrieves the policy 'Tester'
Policy policy = driver.getPolicy("Tester");
System.out.println("Graph privileges: " + policy.getGraphPrivileges());
System.out.println("System privileges: " + policy.getSystemPrivileges());
System.out.println("Property privileges:");
System.out.println("- Node (Read): " + policy.getPropertyPrivileges().getNode().getRead());
System.out.println("- Node (Write): " + policy.getPropertyPrivileges().getNode().getWrite());
System.out.println("- Node (Deny): " + policy.getPropertyPrivileges().getNode().getDeny());
System.out.println("- Edge (Read): " + policy.getPropertyPrivileges().getEdge().getRead());
System.out.println("- Edge (Write): " + policy.getPropertyPrivileges().getEdge().getWrite());
System.out.println("- Edge (Deny): " + policy.getPropertyPrivileges().getEdge().getDeny());
System.out.println("Policies: " + policy.getPolicies());
Graph privileges: {amz=[ALGO, DROP_FULLTEXT, INSERT, DELETE, UPSERT], StoryGraph=[UPDATE, READ]}
System privileges: [TRUNCATE, KILL, TOP]
Property privileges:
- Node (Read): [[*, *, *]]
- Node (Write): []
- Node (Deny): []
- Edge (Read): []
- Edge (Write): [[amz, *, *], [alimama, *, *]]
- Edge (Deny): [[miniCircle, review, value, timestamp]]
Policies: [manager, sales]
createPolicy()
在数据库中创建一个策略。
参数
policy: Policy
:待创建的策略;name
属性必填,systemPrivileges
、graphPrivileges
、propertyPrivilege
和policies
选填。config: RequestConfig
(可选):请求配置。
返回值
Response
:请求结果。
// Creates a new policy 'operator'
Policy policy = new Policy();
// Set the name of the policy
policy.setName("operator");
// Set system privileges for the policy
policy.setSystemPrivileges(Lists.newArrayList("SHOW_GRAPH","TRUNCATE"));
// Create and set graph privileges for the policy
Map<String,List<String>> graphPrivileges = new HashMap<>();
graphPrivileges.put("lcc", Lists.newArrayList("UPDATE","INSERT","DELETE","UPSERT"));
policy.setGraphPrivileges(graphPrivileges);
// Create and set property privileges for the policy
PropertyPrivilege propertyPrivilege = new PropertyPrivilege();
PropertyPrivilegeElement node = new PropertyPrivilegeElement();
node.setRead(Lists.newArrayList(
Lists.newArrayList("miniCircle", "account", "*"),
Lists.newArrayList("miniCircle", "movie", "name")));
node.setWrite(Lists.newArrayList(
Collections.singleton(Lists.newArrayList("lcc", "*", "*"))));
PropertyPrivilegeElement edge = new PropertyPrivilegeElement();
edge.setRead(Lists.newArrayList(
Collections.singleton(Lists.newArrayList("*", "*", "*"))));
edge.setDeny(Lists.newArrayList(
Collections.singleton(Lists.newArrayList("miniCircle", "*", "*"))));
propertyPrivilege.setNode(node);
propertyPrivilege.setEdge(edge);
policy.setGraphPrivileges(graphPrivileges);
// Set policies for the policy
policy.setPolicies(Lists.newArrayList("manager", "sales"));
Response response = driver.createPolicy(policy);
System.out.println(response.getStatus().getCode());
SUCCESS
alterPolicy()
修改一个策略中包含的权限和策略。请留意,只有指定的属性会被修改,其余保持不变。
参数
policy: Policy
:用于设置新的systemPrivileges
、graphPrivileges
、propertyPrivilege
和policies
的Policy
对象,通过name
属性指定策略。config: RequestConfig
(可选):请求配置。
返回值
Response
:请求结果。
// Alters the policy 'operator'
Policy policy = new Policy();
policy.setName("operator");
policy.setSystemPrivileges(Lists.newArrayList("CREATE_GRAPH","SHOW_GRAPH","SHOW_GRAPH","TRUNCATE"));
policy.setPolicies(Lists.newArrayList("manager"));
Response response = driver.alterPolicy(policy);
System.out.println(response.getStatus().getCode());
SUCCESS
dropPolicy()
删除数据库中一个指定的策略。
参数
policyName: str
:策略名称。config: RequestConfig
(可选):请求配置。
返回值
Response
:请求结果。
// Drops the policy 'operator'
Response response = driver.dropPolicy("operator");
System.out.println(response.getStatus().getCode());
SUCCESS
用户
showUser()
获取全部数据库用户。
参数
config: RequestConfig
(可选):请求配置。
返回值
List<User>
:获取的用户列表。
// Retrieves all database users
List<User> users = driver.showUser();
for (User user : users) {
System.out.println(user.getUsername());
}
johndoe
root
admin
getUser()
获取一个指定的数据库用户。
参数
username: String
:用户名。config: RequestConfig
(可选):请求配置。
返回值
User
:获取的用户。
// Retrieves the database user 'johndoe'
User user = driver.getUser("johndoe");
System.out.println("CreatedTime: " + user.getCreatedTime());
System.out.println("Graph privileges: " + user.getGraphPrivileges());
System.out.println("System privileges: " + user.getSystemPrivileges());
System.out.println("Property privileges:");
System.out.println("- Node (Read): " + user.getPropertyPrivileges().getNode().getRead());
System.out.println("- Node (Write): " + user.getPropertyPrivileges().getNode().getWrite());
System.out.println("- Node (Deny): " + user.getPropertyPrivileges().getNode().getDeny());
System.out.println("- Edge (Read): " + user.getPropertyPrivileges().getEdge().getRead());
System.out.println("- Edge (Write): " + user.getPropertyPrivileges().getEdge().getWrite());
System.out.println("- Edge (Deny): " + user.getPropertyPrivileges().getEdge().getDeny());
System.out.println("Policies: " + user.getPolicies());
CreatedTime: Wed Apr 02 11:08:38 CST 2025
Graph privileges: {amz=[ALGO, INSERT, DELETE, UPSERT], StoryGraph=[UPDATE, READ]}
System privileges: [TRUNCATE, KILL, TOP]
Property privileges:
- Node (Read): [[*, *, *]]
- Node (Write): []
- Node (Deny): []
- Edge (Read): []
- Edge (Write): [[amz, *, *], [alimama, *, *]]
- Edge (Deny): []
Policies: [sales, manager]
createUser()
创建一个数据库用户。
参数
user:User
:待创建的用户;username
和password
属性必填,systemPrivileges
、graphPrivileges
、propertyPrivilege
和policies
选填。config: RequestConfig
(可选):请求配置。
返回值
Response
:请求结果。
// Creates a new user 'user01'
User user = new User();
// Set the username and password of the user
user.setUsername("user01");
user.setPassword("U7MRDBFXd2Ab");
// Set system privileges for the user
user.setSystemPrivileges(Lists.newArrayList("SHOW_GRAPH","TRUNCATE"));
// Create and set graph privileges for the user
Map<String,List<String>> graphPrivileges = new HashMap<>();
graphPrivileges.put("lcc", Lists.newArrayList("UPDATE","INSERT","DELETE","UPSERT"));
user.setGraphPrivileges(graphPrivileges);
// Create and set property privileges for the user
PropertyPrivilege propertyPrivilege = new PropertyPrivilege();
PropertyPrivilegeElement node = new PropertyPrivilegeElement();
node.setRead(Lists.newArrayList(
Lists.newArrayList("miniCircle", "account", "*"),
Lists.newArrayList("miniCircle", "movie", "name")));
node.setWrite(Lists.newArrayList(
Collections.singleton(Lists.newArrayList("lcc", "*", "*"))));
PropertyPrivilegeElement edge = new PropertyPrivilegeElement();
edge.setRead(Lists.newArrayList(
Collections.singleton(Lists.newArrayList("*", "*", "*"))));
edge.setDeny(Lists.newArrayList(
Collections.singleton(Lists.newArrayList("miniCircle", "*", "*"))));
propertyPrivilege.setNode(node);
propertyPrivilege.setEdge(edge);
user.setGraphPrivileges(graphPrivileges);
// Set policies for the user
user.setPolicies(Lists.newArrayList("manager", "sales"));
Response response = driver.createUser(user);
System.out.println(response.getStatus().getCode());
SUCCESS
alterUser()
修改一个用户的密码、权限和策略。请留意,只有指定的属性会被修改,其余保持不变。
参数
user: User
:用于设置新的password
、systemPrivileges
、graphPrivileges
、propertyPrivilege
和policies
的User
对象,通过username
属性指定用户。config: RequestConfig
(可选):请求配置。
// Alters the user 'user01'
User user = new User();
user.setUsername("user01");
user.setSystemPrivileges(Lists.newArrayList("CREATE_GRAPH","SHOW_GRAPH","SHOW_GRAPH","TRUNCATE"));
user.setPolicies(Lists.newArrayList("manager"));
Response response = driver.alterUser(user);
System.out.println(response.getStatus().getCode());
SUCCESS
dropUser()
删除一个指定的数据库用户。
参数
username: String
: 用户名。config: RequestConfig
(可选):请求配置。
返回值
Response
:请求结果。
// Drops the user 'user01'
Response response = driver.dropUser("user01");
System.out.println(response.getStatus().getCode());
SUCCESS
完整示例
package com.ultipa.www.sdk.api;
import com.google.common.collect.Lists;
import com.ultipa.sdk.UltipaDriver;
import com.ultipa.sdk.connect.conf.UltipaConfig;
import com.ultipa.sdk.operate.entity.*;
import com.ultipa.sdk.operate.response.Response;
import java.util.*;
public class Main {
public static void main(String[] args) {
UltipaConfig ultipaConfig = UltipaConfig.config()
// URI example: .hosts(Lists.newArrayList("d3026ac361964633986849ec43b84877s.eu-south-1.cloud.ultipa.com:8443"))
.hosts(Lists.newArrayList("192.168.1.85:60061","192.168.1.88:60061","192.168.1.87:60061"))
.username("<username>")
.password("<password>");
UltipaDriver driver = null;
try {
driver = new UltipaDriver(ultipaConfig);
// Creates a new policy 'operator'
Policy policy = new Policy();
// Set the name of the policy
policy.setName("operator");
// Set system privileges for the policy
policy.setSystemPrivileges(Lists.newArrayList("SHOW_GRAPH","TRUNCATE"));
// Create and set graph privileges for the policy
Map<String,List<String>> graphPrivileges = new HashMap<>();
graphPrivileges.put("lcc", Lists.newArrayList("UPDATE","INSERT","DELETE","UPSERT"));
policy.setGraphPrivileges(graphPrivileges);
// Create and set property privileges for the policy
PropertyPrivilege propertyPrivilege = new PropertyPrivilege();
PropertyPrivilegeElement node = new PropertyPrivilegeElement();
node.setRead(Lists.newArrayList(
Lists.newArrayList("miniCircle", "account", "*"),
Lists.newArrayList("miniCircle", "movie", "name")));
node.setWrite(Lists.newArrayList(
Collections.singleton(Lists.newArrayList("lcc", "*", "*"))));
PropertyPrivilegeElement edge = new PropertyPrivilegeElement();
edge.setRead(Lists.newArrayList(
Collections.singleton(Lists.newArrayList("*", "*", "*"))));
edge.setDeny(Lists.newArrayList(
Collections.singleton(Lists.newArrayList("miniCircle", "*", "*"))));
propertyPrivilege.setNode(node);
propertyPrivilege.setEdge(edge);
policy.setGraphPrivileges(graphPrivileges);
// Set policies for the policy
policy.setPolicies(Lists.newArrayList("manager", "sales"));
Response response = driver.createPolicy(policy);
System.out.println(response.getStatus().getCode());
} catch (InterruptedException e) {
throw new RuntimeException(e);
} finally {
if (driver != null) {
driver.close();
}
}
}
}