Les privilèges sont le contenu de base de l'authentification des utilisateurs. Les privilèges sont catégorisés en Privilèges de Commande et Privilèges de Propriété.
Privilèges de Commande permettent aux utilisateurs d'exécuter des commandes UQL particulières. Selon la portée de la commande UQL, elles sont divisées en :
- Privilège de Graph :
- Permet aux utilisateurs d'exécuter des UQLs liés au schema, property, index, metadata, path, algorithme et task backend d'un GraphSet spécifique
- Le nom du GraphSet doit être désigné lors de l'octroi des privilèges de graph
- Privilège de Système :
- Permet aux utilisateurs d'exécuter des UQLs liés au privilège, policy, user, GraphSet et process UQL d'une base de données Ultipa Graph
Référez-vous au Tableau des Privilèges à la fin de cet article pour tous les privilèges de commande et leurs commandes UQL correspondantes.
Privilèges de Propriété permettent ou refusent aux utilisateurs de lire (interroger et retourner) et d'écrire (insérer, mettre à jour et supprimer) des propriétés personnalisées particulières. GraphSet et schema doivent être désignés :
- READ : Permet aux utilisateurs de lire des propriétés personnalisées particulières
- WRITE:Permet aux utilisateurs de lire et d'écrire des propriétés personnalisées particulières
- DENY:Ne permet PAS aux utilisateurs de lire ou écrire des propriétés personnalisées particulières
DENY a une priorité supérieure à READ et WRITE. Si un utilisateur ou une policy est accordé avec DENY et READ (ou WRITE) en même temps, l'effetif est DENY.
Afficher le Privilège
Nom de la table retournée : _privilege
En-tête de la table retournée : graphPrivileges
| systemPrivileges
(graph privileges, system privileges)
Syntaxe :
// Pour lister tous les privilèges de commande pris en charge par le système Ultipa
show().privilege()
Accorder le Privilège
Accorder un Privilège de Propriété
Syntaxe :
// Pour accorder des privilèges de propriété de node et edge à un utilisateur/policy
grante().privilege(["READ" | "WRITE" | "DENY"]).on(
"<graph>",
<@schema?>,
"<property?>"
).<user|policy>("<name>")
// Pour accorder des privilèges de propriété de node à un utilisateur/policy
grante().node_privilege(["READ" | "WRITE" | "DENY"]).on(
"<graph>",
<@schema?>,
"<property?>"
).<user|policy>("<name>")
// Pour accorder des privilèges de propriété de edge à un utilisateur/policy
grante().edge_privilege(["READ" | "WRITE" | "DENY"]).on(
"<graph>",
<@schema?>,
"<property?>"
).<user|policy>("<name>")
Exemple : Accorder READ de la propriété @product.price de GraphSet supplychain à la policy sales
grante().node_privilege(["READ"]).on(
"supplychain",
@product,
"price"
).policy("sales")
Exemple : Accorder WRITE de toutes les propriétés de tous les GraphSets à l'utilisateur admin002
grante().privilege(["WRITE"]).on(
"*",
@*,
"*"
).user("admin002")
Analyse : Le paramètre on()
dans cet exemple peut être raccourci comme on("*")
Accorder un Privilège de Système
Syntaxe:
// Pour accorder des privilèges système à un utilisateur/policy
grante().system().privilege(<[]system_privileges>).<user|policy>("<name>")
Exemple : Accorder les privilèges système TOP et KILL à l'utilisateur admin002
grante().system().privilege(["TOP","KILL"]).user("admin002")
Accorder un Privilège Multi-type
Syntaxe:
// Pour accorder des privilèges de différents types à un utilisateur/policy
grante().user("<username>").params({
graph_privileges: <{}graph_privileges?>,
system_privileges: <[]system_privileges?>,
property_privileges: <{}property_privileges?>,
policies: <[]policies?>
})
Où les structures de données sont :
// <{}graph_privileges>
{
"<graph1>":["<graph_privilege>", "<graph_privilege>", ...],
"<graph2>":["<graph_privilege>", "<graph_privilege>", ...],
...
}
// <{}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?>"],
...
],
}
}
Exemple : Accorder UPDATE de tous les GraphSets, le privilège système STAT, WRITE de toutes les propriétés de tous les GraphSets, et la policy management à l'utilisateur Ultipa
grante().user("Ultipa").params({
graph_privileges: {"*": ["UPDATE"]},
system_privileges: ["STAT"],
property_privileges: {
"node": {
"write": [["*", "*", "*"]]
},
"edge": {
"write": [["*", "*", "*"]]
}
},
policies: ["management"]
})
Révoquer le Privilège
Révoquer un Privilège de Propriété
Syntaxe :
// Pour révoquer des privilèges de propriété de node et edge à un utilisateur/policy
revoke().privilege(["READ" | "WRITE" | "DENY"]).on(
"<graph>",
<@schema?>,
"<property?>"
).<user|policy>("<name>")
// Pour révoquer des privilèges de propriété de node à un utilisateur/policy
revoke().node_privilege(["READ" | "WRITE" | "DENY"]).on(
"<graph>",
<@schema?>,
"<property?>"
).<user|policy>("<name>")
// Pour révoquer des privilèges de propriété de edge à un utilisateur/policy
revoke().edge_privilege(["READ" | "WRITE" | "DENY"]).on(
"<graph>",
<@schema?>,
"<property?>"
).<user|policy>("<name>")
Exemple : Révoquer READ de la propriété @product.price de GraphSet supplychain de la policy sales
revoke().node_privilege(["READ"]).on(
"supplychain",
@product,
"price"
).policy("sales")
Exemple : Révoquer WRITE de toutes les propriétés de tous les GraphSets de l'utilisateur admin002
revoke().privilege(["WRITE"]).on(
"*",
@*,
"*"
).user("admin002")
Analyse : Le paramètre on()
dans cet exemple peut être raccourci comme on("*")
Révoquer un Privilège de Système
Syntaxe:
// Pour révoquer des privilèges système à un utilisateur/policy
revoke().system().privilege(<[]system_privileges>).<user|policy>("<name>")
Exemple : Révoquer les privilèges système TOP et KILL de l'utilisateur admin002
revoke().system().privilege(["TOP","KILL"]).user("admin002")
Révoquer un Privilège Multi-type
Syntaxe:
// Pour révoquer des privilèges de différents types d'un utilisateur/policy
revoke().user("<username>").params({
graph_privileges: <{}graph_privileges?>,
system_privileges: <[]system_privileges?>,
property_privileges: <{}property_privileges?>,
policies: <[]policies?>
})
Où les structures de données <{}graph_privileges>
et <{}property_privileges>
sont les mêmes que celles de la commande grante()
.
Exemple : Révoquer UPDATE de tous les GraphSets, le privilège système STAT, WRITE de toutes les propriétés de tous les GraphSets, et la policy management de l'utilisateur Ultipa
revoke().user("Ultipa").params({
graph_privileges: {"*": ["UPDATE"]},
system_privileges: ["STAT"],
property_privileges: {
"node": {
"write": [["*", "*", "*"]]
},
"edge": {
"write": [["*", "*", "*"]]
}
},
policies: ["management"]
})
Tableau des Privilèges
Privilèges liés aux Utilisateurs
Privilège | Niveau | Commande Légale |
---|---|---|
SHOW_PRIVILEGE | system | show().privilege() |
SHOW_POLICY | system | show().policy() |
CREATE_POLICY | system | create().policy() |
ALTER_POLICY | system | alter().policy() |
DROP_POLICY | system | drop().policy() |
SHOW_USER | system | show().user() |
CREATE_USER | system | create().user() |
ALTER_USER | system | alter().user() |
DROP_USER | system | drop().user() |
GRANT | system | grant() |
REVOKE | system | revoke() |
Note : La commande show().self()
peut être légalement utilisée par tout utilisateur sans autorisation.
Privilèges liés au Modèle Graphique
Privilège | Niveau | Commande Légale |
---|---|---|
STAT | system | stats() |
SHOW_GRAPH | system | show().graph() |
CREATE_GRAPH | system | create().graph() |
ALTER_GRAPH | system | alter().graph() |
DROP_GRAPH | system | drop().graph() |
MOUNT_GRAPH | system | mount() |
UNMOUNT_GRAPH | system | unmount() |
SHOW_SCHEMA | graph | show().schema() , show().node_schema() , show().edge_schema() |
CREATE_SCHEMA | graph | create().node_schema() , create().edge_schema() |
ALTER_SCHEMA | graph | alter().node_schema() , alter().edge_schema() |
DROP_SCHEMA | graph | drop().node_schema() , drop().edge_schema() |
SHOW_PROPERTY | graph | show().property() , show().node_property() , show().edge_property() |
CREATE_PROPERTY | graph | create().node_property() , create().edge_property() |
ALTER_PROPERTY | graph | alter().node_property() , alter().edge_property() |
DROP_PROPERTY | graph | drop().node_property() , drop().edge_property() |
SHOW_FULLTEXT | graph | show().fulltext() , show().node_fulltext() , show().edge_fulltext() |
CREATE_FULLTEXT | graph | create().node_fulltext() , create().edge_fulltext() |
DROP_FULLTEXT | graph | drop().node_fulltext() , drop().edge_fulltext() |
SHOW_INDEX | graph | show().index() , show().node_index() , show().edge_index() |
CREATE_INDEX | graph | create().node_index() , create().edge_index() |
DROP_INDEX | graph | drop().node_index() , drop().edge_index() |
LTE | graph | LTE() |
UFE | graph | UFE() |
TRUNCATE | system | truncate() |
COMPACT | system | compact() |
Privilèges liés aux Données Graphiques
Privilège | Niveau | Commande Légale |
---|---|---|
INSERT | graph | insert() , insert().overwrite() |
UPSERT | graph | upsert() |
UPDATE | graph | update() |
DELETE | graph | delete() |
DELETE_NODE | graph | delete().nodes() |
DELETE_EDGE | graph | delete().edges() |
TEMPLATE | graph | n() , e() , re() , le() , nf() , graph() |
KHOP | graph | khop() |
AB | graph | ab() |
SPREAD | graph | spread() |
AUTONET | graph | autonet() |
FIND | graph | find() |
FIND_NODE | graph | find().nodes() |
FIND_EDGE | graph | find().edges() |
Privilèges Avancés
Privilège | Niveau | Commande Légale |
---|---|---|
ALGO | graph | algo() |
SHOW_ALGO | graph | show().algo() |
SHOW_TASK | graph | show().task() |
CLEAR_TASK | graph | clear() |
STOP_TASK | graph | stop() |
SHOW_BACKUP | graph | db.backup.show() |
CREATE_BACKUP | graph | db.backup.create() |
RESTORE_BACKUP | graph | db.backup.restore() |
TOP | system | top() |
KILL | system | kill() |
SHOW_TRIGGER | graph | show().trigger() , show().node_trigger() , show().edge_trigger() |
CREATE_TRIGGER | graph | create().node_trigger() , create().edge_trigger() |
DROP_TRIGGER | graph | drop().node_trigger() , drop().edge_trigger() |