Sécurité des Bases de données et du Web
2ème Année MP – SSR-1
Chapitre 3 - Le contrôle des accès aux bases de données
I- Mécanismes de base
I.1 Utilisateur
Les accès à la base de données s’effectuent par l’intermédiaire d’utilisateurs (comptes
SGBD). Chaque utilisateur est défini par :
Un nom d’utilisateur
Un mot de passe
Un ensemble de privilèges
Un profil (sous Oracle)
I.2 Privilèges
Un privilège est un droit accordé à un utilisateur pour pouvoir exécuter certaines
commandes SQL ou d’accéder à des objets de la base de données.
Un privilège est attribué directement à un utilisateur ou à un rôle. Un rôle sera, par la
suite attribué à un ou plusieurs utilisateurs.
Nous distinguons deux niveaux de privilèges :
Privilège système : Correspond à l’autorisation d’effectuer des actions
sur la base de données ou sur certains objets particuliers (tels que la
création ou la consultation de n’importe quelle table).
Privilège objet : Concerne les autorisations d’accès à certains objets
particuliers de la base de données.
I.3 Rôle
C’est un ensemble de privilèges (système et/ou objet) pouvant être attribué à un
utilisateur ou à un autre rôle.
I.4 Profil (sous Oracle)
C’est une notion à travers laquelle il est possible de contrôler les activités d’un
utilisateur en mettant en œuvre certaines limitations quant à l’utilisation des
ressources du système.
La notion de profil permet aussi de définir les paramètres de gestion du mot de passe
utilisateur.
Le contrôle des accès aux bases de donnéespar : Samir BOUCETTA Page |1
II- Gestion des profils (sous Oracle)
CREATE PROFILE NomProfil
[SESSION_PER_USER {entier | UNLIMITED | DEFAULT }]
[CONNECT_TIME {entier | UNLIMITED | DEFAULT }]
[FAILED_LOGIN_ATTEMPTS {entier | UNLIMITED | DEFAULT }]
[PASSWORD_LIFE_TIME {entier | UNLIMITED | DEFAULT }]
[PASSWORD_LOCK_TIME {entier | UNLIMITED | DEFAULT }]
[PASSWORD_GRACE_TIME {entier | UNLIMITED | DEFAULT }] ;
Un profil utilisateur est un ensemble de limites sur les ressources de la base de
données et/ou le mot de passe utilisateur. Une fois que vous ayez attribué un profil à
un utilisateur, ce dernier ne pourra pas dépasser les limites de ressources et/ou de
mots de passe définies par le profil.
SESSIONS_PER_USER – Précise le nombre de sessions concurrentes qu’un
utilisateur peut avoir en se connectant à la base de données.
CONNECT_TIME – Spécifie le temps total maximal pour une session utilisateur, exprimé
en minutes.
FAILED_LOGIN_ATTEMPTS – Précise le nombre de tentatives de login
consécutives non fructueuses avant de bloquer l’utilisateur. La valeur par
défaut est 10 fois.
PASSWORD_LIFE_TIME – Spécifie le nombre de jours qu’un utilisateur peut utiliser le
même mot de passe pour l’authentification. La valeur par défaut est 180 jours.
PASSWORD_LOCK_TIME – Spécifie le nombre de jours le SGBD bloque un
compte utilisateur après avoir épuisé le nombre FAILED_LOGIN_ATTEMPTS. La
valeur par défaut est 1 jour.
PASSWORD_GRACE_TIME – Indique le nombre de jours de la période de grâce
pendant laquelle un avertissement est émis et le login est encore possible. La
valeur par défaut est 7 jours.
Plus de détails sur : [Link]
create-profile/
ALTER PROFILE NomProfil …
[Link]
Le contrôle des accès aux bases de donnéespar : Samir BOUCETTA Page |2
DROP PROFILE NomProfil …
[Link]
III- Gestion des rôles
III-1/ Gestion des rôles sous Oracle :
CREATE ROLE NomRole
[NOT IDENTIFIED]
[IDENTIFIED BY Mot_de_passe] ;
ALTER ROLE NomRole
[NOT IDENTIFIED]
[IDENTIFIED BY Mot_de_passe] ;
DROP ROLE NomRole ;
III-2/ Gestion des rôles sous MySQL :
CREATE ROLE [IF NOT EXISTS] role [, role ] ...
DROP ROLE NomRole ;
Le contrôle des accès aux bases de donnéespar : Samir BOUCETTA Page |3
IV- Gestion des utilisateurs
IV-1/ Gestion des utilisateurs sous Oracle :
CREATE USER UserName
IDENTIFIED BY password
[DEFAULT TABLESPACE tablespaceName]
[QUOTA {size | UNLIMITED} ON tablespace]
[PROFILE profile]
[PASSWORD EXPIRE]
[ACCOUNT {LOCK | UNLOCK}];
Plus de détails sur: [Link]
create-user/
ALTER USER NomUser
IDENTIFIED BY Mot_de_passe
[DEFAULT_TABLESPACE NomTablespace]
[PROFILE nom_profil]
[DEFAULT ROLE {role1 [, role2, …] |
ALL |
ALL EXCEPT role1 [, role2, …]|
NONE }]
[PASSWORD EXPIRE]
[ACCOUNT {LOCK | UNLOCK }] ;
Plus de détails sur: [Link]
user/
DROP USER NomUser ;
IV-2/ Gestion des utilisateurs sous MySQL :
CREATE USER [IF NOT EXISTS]
user [auth_option] [, user [auth_option]] ...
DEFAULT ROLE role [, role ] ...
[REQUIRE {NONE | tls_option [[AND] tls_option] ...}]
[WITH resource_option [resource_option] ...]
[password_option | lock_option] ...
[COMMENT 'comment_string' | ATTRIBUTE 'json_object']
Le contrôle des accès aux bases de donnéespar : Samir BOUCETTA Page |4
auth_option: {
IDENTIFIED BY 'auth_string'
| IDENTIFIED BY RANDOM PASSWORD
| IDENTIFIED WITH auth_plugin
| IDENTIFIED WITH auth_plugin BY 'auth_string'
| IDENTIFIED WITH auth_plugin BY RANDOM PASSWORD
| IDENTIFIED WITH auth_plugin AS 'auth_string'
| IDENTIFIED WITH auth_plugin [initial_auth_option]
}
auth_plugin specifie le nom d’un plugin d’authentification. Le nom du plugin peut
être une chaine de caractères entre cotes ou un nom sans cotes. Les noms des plugins
sont stockés dans la colonne plugin de la table [Link].
initial_auth_option:
{
INITIAL AUTHENTICATION IDENTIFIED BY {RANDOM PASSWORD | 'auth_string'}
| INITIAL AUTHENTICATION IDENTIFIED WITH auth_plugin AS 'auth_string'
}
resource_option: {
MAX_QUERIES_PER_HOUR count
| MAX_UPDATES_PER_HOUR count
| MAX_CONNECTIONS_PER_HOUR count
| MAX_USER_CONNECTIONS count
}
password_option: {
PASSWORD EXPIRE [DEFAULT | NEVER | INTERVAL N DAY]
| PASSWORD HISTORY {DEFAULT | N}
| PASSWORD REUSE INTERVAL {DEFAULT | N DAY}
| PASSWORD REQUIRE CURRENT [DEFAULT | OPTIONAL]
| FAILED_LOGIN_ATTEMPTS N
| PASSWORD_LOCK_TIME {N | UNBOUNDED}
}
lock_option: {
ACCOUNT LOCK
| ACCOUNT UNLOCK
}
Plus de détails sur: [Link]
Pour activer un compte utilisateur (MP_SSR), utiliser la commande :
system Mysql –u MP_SSR -p ;
Pour activer un compte utilisateur (MP_SSR) sur une base de données (Db), utiliser
la commande :
system Mysql –u MP_SSR -p Db ;
L’utilisateur doit avoir préalablement le droit d’accès à la base en question.
Le contrôle des accès aux bases de donnéespar : Samir BOUCETTA Page |5
V- Gestion des privilèges
V-1/ Gestion des privilèges sous Oracle
V-1-a/ Gestion des privilèges au niveau système
GRANT {PrivilegeSysteme | Role}
[,{PrivilegeSysteme | Role} …]
TO {NomUser | Role | PUBLIC} [,{NomUser | Role | PUBLIC}, …]
[WITH ADMIN OPTION] ;
REVOKE {PrivilegeSysteme | Role}
[,{PrivilegeSysteme | Role} …]
FROM {NomUser | Role | PUBLIC}
[,{NomUser | Role | PUBLIC}, …];
Exemple de privilèges systèmes :
ALTER ANY INDEX, ALTER ANY ROLE, ALTER ANY TABLE, ALTER
PROFILE, ALTER USER, CREATE ANY INDEX, CREATE ANY PROCEDURE,
CREATE ANY TABLE, CREATE ANY VIEW, CREATE ANY INDEX, CREATE
ROLE, CREATE USER, DELETE ANY TABLE, DROP ANY INDEX, DROP
ANY ROLE, GRANT ANY PRIVILEGE, GRANT ANY ROLE, SELECT ANY
TABLE, UPDATE ANY TABLE, …
V-1-b/ Gestion des privilèges objets
GRANT PrivilegeObjet [,PrivilegeObjet …]
ON [Schema.]Objet
TO {NomUser | Role | PUBLIC} [,{NomUser | Role | PUBLIC}, …]
[WITH GRANT OPTION] ;
Objet peut être un nom de table, de vue, de procedure, de fonction, etc.
Plus de détails sur: [Link]
administration/oracle-grant/
[Link]
Le contrôle des accès aux bases de donnéespar : Samir BOUCETTA Page |6
REVOKE { PrivilegeObjet [,PrivilegeObjet …] |
ALL PRIVILEGES } …
ON Objet
FROM {NomUser | Role | PUBLIC}
[,{NomUser | Role | PUBLIC}, …];
Exemple de privilèges objets :
SELECT [ (Col1 ; …) ]
INSERT
UPDATE [ (Col1 ; …) ]
DELETE
EXECUTE
ALTER
INDEX
ALL
Le contrôle des accès aux bases de donnéespar : Samir BOUCETTA Page |7
V-2/ Gestion des privilèges sous MySQL
V-2-a/ Les privilèges globaux
GRANT ALL ON *.* TO 'someuser'@'somehost';
GRANT SELECT, INSERT ON *.* TO 'someuser'@'somehost';
Les privilèges suivants sont des privilèges administratifs et ne peuvent être attribues
que globalement : CREATE TABLESPACE, CREATE USER, FILE, PROCESS, RELOAD, REPLICATION
CLIENT, REPLICATION SLAVE, SHOW DATABASES, SHUTDOWN, et SUPER .
Les privilèges sont stockes dans la table [Link].
V-2-b/ Les privilèges au niveau base de données
GRANT ALL ONmydb.* TO 'someuser'@'somehost';
GRANT SELECT, INSERT ON mydb.* TO 'someuser'@'somehost';
* Local, à la base de données en cours d’utilisation. Erreur, si aucune BdD
active.
*.* Global
Les privilèges suivants ne peuvent être attribues qu’au niveau de la base de
donnees : CREATE, DROP, EVENT, GRANT OPTION, LOCK TABLES, et REFERENCES
Les privilèges sont stockes dans la table [Link].
V-2-c/ Les privilèges au niveau Tables
GRANT ALL [Link] TO 'someuser'@'somehost';
GRANT SELECT, INSERT ON [Link] TO 'someuser'@'somehost';
Table Local, à la base de données en cours d’utilisation. Erreur, si aucune
BdD active.
[Link] Global
Les privilèges qui peuvent être attribues au niveau d’une table sont : ALTER, CREATE
VIEW, CREATE, DELETE, DROP, GRANT OPTION, INDEX, INSERT, REFERENCES, SELECT, SHOW
VIEW, TRIGGER, et UPDATE.
Les privilèges sont stockes dans la table Mysql.Tables_priv.
Le contrôle des accès aux bases de donnéespar : Samir BOUCETTA Page |8
V-2-d/ Les privilèges au niveau Colonne d’une table
GRANT SELECT (col1), INSERT (col1, col2) ON [Link] TO 'someuser'@'somehost';
Table Local, à la base de données en cours d’utilisation. Erreur, si aucune
BdD active.
[Link] Global
Les privilèges qui peuvent être attribues au niveau d’une colonne sont :
INSERT, REFERENCES, SELECT, and UPDATE.
Les privilèges sont stockes dans la table Mysql.Columns_priv.
Les privilèges statiques qui peuvent être attribués/révoqués par GRANT and
REVOKE
Privilège Meaning and Grantable Levels
Grant all privileges at specified access level except GRANT
ALL [PRIVILEGES] OPTION and PROXY.
ALTER Enable use of ALTER TABLE. Levels: Global, database, table.
Enable stored routines to be altered or dropped. Levels: Global,
ALTER ROUTINE database, routine.
CREATE Enable database and table creation. Levels: Global, database, table.
CREATE ROLE Enable role creation. Level: Global.
CREATE ROUTINE Enable stored routine creation. Levels: Global, database.
Enable tablespaces and log file groups to be created, altered, or
CREATE TABLESPACE dropped. Level: Global.
CREATE TEMPORARY
TABLES Enable use of CREATE TEMPORARY TABLE. Levels: Global, database.
Enable use of CREATE USER, DROP USER, RENAME USER, and REVOKE ALL
CREATE USER PRIVILEGES. Level: Global.
Enable views to be created or altered. Levels: Global, database,
CREATE VIEW table.
DELETE Enable use of DELETE. Level: Global, database, table.
Enable databases, tables, and views to be dropped. Levels: Global,
DROP database, table.
DROP ROLE Enable roles to be dropped. Level: Global.
EVENT Enable use of events for the Event Scheduler. Levels: Global,
Le contrôle des accès aux bases de donnéespar : Samir BOUCETTA Page |9
Privilège Meaning and Grantable Levels
database.
Enable the user to execute stored routines. Levels: Global,
EXECUTE database, routine.
Enable the user to cause the server to read or write files. Level:
FILE Global.
Enable privileges to be granted to or removed from other accounts.
GRANT OPTION Levels: Global, database, table, routine, proxy.
Enable indexes to be created or dropped. Levels: Global, database,
INDEX table.
INSERT Enable use of INSERT. Levels: Global, database, table, column.
Enable use of LOCK TABLES on tables for which you have
LOCK TABLES the SELECT privilege. Levels: Global, database.
Enable the user to see all processes with SHOW PROCESSLIST. Level:
PROCESS Global.
PROXY Enable user proxying. Level: From user to user.
Enable foreign key creation. Levels: Global, database, table,
REFERENCES column.
RELOAD Enable use of FLUSH operations. Level: Global.
SELECT Enable use of SELECT. Levels: Global, database, table, column.
SHOW DATABASES Enable SHOW DATABASES to show all databases. Level: Global.
SHOW VIEW Enable use of SHOW CREATE VIEW. Levels: Global, database, table.
SHUTDOWN Enable use of mysqladmin shutdown. Level: Global.
TRIGGER Enable trigger operations. Levels: Global, database, table.
UPDATE Enable use of UPDATE. Levels: Global, database, table, column.
USAGE Synonym for “no privileges”
Plus de détails sur: [Link]
[Link]
Le contrôle des accès aux bases de donnéespar : Samir BOUCETTA P a g e | 10