-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathContraintes.sql
More file actions
151 lines (124 loc) · 4.32 KB
/
Contraintes.sql
File metadata and controls
151 lines (124 loc) · 4.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
-- CREATION DES CONTRAINTES
-- Pour la table Vulnerabilite :
-- Plage de Score CVSS (0.0 à 10.0)
ALTER TABLE Vulnerabilite DROP CONSTRAINT chk_cvss_score;
ALTER TABLE Vulnerabilite
ADD CONSTRAINT chk_cvss_score CHECK (Score_CVSS BETWEEN 0 AND 10);
-- Cohérence des dates :
ALTER TABLE Vulnerabilite DROP CONSTRAINT chk_vuln_date;
ALTER TABLE Vulnerabilite
ADD CONSTRAINT chk_vuln_date CHECK (Date_PUB < Date_MAJ);
-- Domaine des valeurs de Gravite :
ALTER TABLE Vulnerabilite DROP CONSTRAINT chk_gravite_domaine;
ALTER TABLE Vulnerabilite
ADD CONSTRAINT chk_gravite_domaine CHECK (Gravite IN ('FAIBLE', 'MOYENNE', 'ELEVEE', 'CRITIQUE'));
-- Format de CVE (CVE-AAAA-NNNN) :
ALTER TABLE Vulnerabilite DROP CONSTRAINT chk_cve_format;
ALTER TABLE Vulnerabilite
ADD CONSTRAINT chk_cve_format CHECK (REGEXP_LIKE(CVE_Id, '^CVE-\d{4}-\d{4,10}$'));
-- Plage de Score CVSS (0.0 à 10.0):
-- Triggers
CREATE OR REPLACE TRIGGER trg_update_gravite
BEFORE INSERT OR UPDATE OF Score_CVSS ON Vulnerabilite
FOR EACH ROW
BEGIN
IF :NEW.Score_CVSS IS NOT NULL THEN
IF :NEW.Score_CVSS >= 9.0 THEN
:NEW.Gravite := 'CRITIQUE';
ELSIF :NEW.Score_CVSS >= 7.0 THEN
:NEW.Gravite := 'ELEVEE';
ELSIF :NEW.Score_CVSS >= 4.0 THEN
:NEW.Gravite := 'MOYENNE';
ELSE
:NEW.Gravite := 'FAIBLE';
END IF;
END IF;
END;
/
-- Pour la table Auteur :
-- Unicité du nom
ALTER TABLE Auteur DROP CONSTRAINT uk_auteur_nom;
ALTER TABLE Auteur
ADD CONSTRAINT uk_auteur_nom UNIQUE (Nom);
-- Unicité de l'email :
ALTER TABLE Auteur DROP CONSTRAINT uk_auteur_email;
ALTER TABLE Auteur
ADD CONSTRAINT uk_auteur_email UNIQUE (Email);
-- Format de l'email :
ALTER TABLE Auteur DROP CONSTRAINT chk_auteur_email_format;
ALTER TABLE Auteur
ADD CONSTRAINT chk_auteur_email_format CHECK (REGEXP_LIKE(Email, '^\S+@\S+\.\S+$'));
-- suppression auteur:
-- Triggers
CREATE OR REPLACE TRIGGER trg_delete_auteur
BEFORE DELETE ON Auteur
FOR EACH ROW
BEGIN
IF :OLD.Nb_exploits > 0 THEN
RAISE_APPLICATION_ERROR(-20001, 'supression impossible, pressence de publication');
END IF;
END;
/
-- Pour la table Exploit :
-- Ensemble des Tags :
ALTER TABLE Exploit DROP CONSTRAINT chk_exploit_tag;
ALTER TABLE Exploit
ADD CONSTRAINT chk_exploit_tag CHECK (Tag IN ('remote', 'local', 'dos', 'webapp', 'privilege escalation',
'rce', 'sqli', 'xss', 'clientside', 'kernel', 'network',
'clientside', 'overflow', 'hardware', 'bypass', 'bruteforce',
'fuzzing', 'iot', 'browser', 'mobile', 'data leakage'));
-- Coerence des date
ALTER TABLE Exploit DROP CONSTRAINT chk_exploit_date;
ALTER TABLE Exploit
ADD CONSTRAINT chk_exploit_date CHECK (Date_pub < Date_MAJ);
-- Coerence des date avec celle des vulnerabilite:
-- Triggers
CREATE OR REPLACE TRIGGER chk_exploit_date_vul
BEFORE INSERT OR UPDATE OF Date_pub ON Exploit
FOR EACH ROW
DECLARE
v_date DATE;
BEGIN
SELECT date_pub INTO v_date FROM Vulnerabilite WHERE CVE_Id = :NEW.CVE_Id;
IF :NEW.date_pub < v_date THEN
RAISE_APPLICATION_ERROR(-20002, 'date de publication incompatible');
END IF;
END;
/
-- Contrainte de format pour PoC (format URL) :
-- Triggers
CREATE OR REPLACE TRIGGER trg_update_poc
BEFORE INSERT OR UPDATE OF PoC ON Exploit
FOR EACH ROW
BEGIN
:NEW.date_MAJ := CURRENT_DATE;
END;
/
-- Pour la table Fournisseur :
-- Format de l'URL du site web (doit commencer par http:// ou https://) :
ALTER TABLE Fournisseur DROP CONSTRAINT chk_url_fournisseur_format;
ALTER TABLE Fournisseur
ADD CONSTRAINT chk_url_fournisseur_format CHECK (REGEXP_LIKE(Siteweb, 'http[s]?:\/\/[^\s]*'));
-- Nombre d'employés doit être un entier positif :
ALTER TABLE Fournisseur DROP CONSTRAINT chk_nb_employe_fournisseur;
ALTER TABLE Fournisseur
ADD CONSTRAINT chk_nb_employe_fournisseur CHECK (Nb_employer > 0);
-- Pour la table Version_P
-- Format de version
--ALTER TABLE Version_P DROP CONSTRAINT chk_version_format;
--ALTER TABLE Version_P
--ADD CONSTRAINT chk_version_format CHECK (REGEXP_LIKE(Version, '^[A-Za-z0-9\.\-]+$'));
-- Coerence des date avec celle des Produit:
-- Triggers
CREATE OR REPLACE TRIGGER chk_V_produit_date
BEFORE INSERT OR UPDATE OF Date_pub ON Version_P
FOR EACH ROW
DECLARE
v_date DATE;
BEGIN
SELECT date_pub INTO v_date FROM Produit WHERE Id_produit = :NEW.Id_produit;
IF :NEW.date_pub < v_date THEN
RAISE_APPLICATION_ERROR(-20002, 'date de publication incompatible');
END IF;
END;
/