Vous êtes sur la page 1sur 7

Sécurité des Bases de données et du Web

2ème Année MP – SSR-1

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.

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 }] ;

Le contrôle des accès aux bases de données par : Samir BOUCETTA Page |1
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 : https://www.oracletutorial.com/oracle-administration/oracle-create-profile/

ALTER PROFILE NomProfil …


https://www.oracletutorial.com/oracle-administration/oracle-alter-profile/

DROP PROFILE NomProfil …


https://www.oracletutorial.com/oracle-administration/oracle-drop-profile/

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ées par : Samir BOUCETTA Page |2
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: https://www.oracletutorial.com/oracle-administration/oracle-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: https://www.oracletutorial.com/oracle-administration/oracle-alter-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']

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]
}

Le contrôle des accès aux bases de données par : Samir BOUCETTA Page |3
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 mysql.user.

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: https://dev.mysql.com/doc/refman/8.0/en/create-user.html

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.

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] ;

Le contrôle des accès aux bases de données par : Samir BOUCETTA Page |4
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: https://www.oracletutorial.com/oracle-administration/oracle-grant/


https://docs.oracle.com/javadb/10.8.3.0/ref/rrefsqljgrant.html

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ées par : Samir BOUCETTA Page |5
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 Mysql.user.

V-2-b/ Les privilèges au niveau base de données


GRANT ALL ON mydb.* 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 Mysql.Db.

V-2-c/ Les privilèges au niveau Tables


GRANT ALL ON mydb.mytbl TO 'someuser'@'somehost';
GRANT SELECT, INSERT ON mydb.mytbl TO 'someuser'@'somehost';

Table  Local, à la base de données en cours d’utilisation. Erreur, si aucune BdD active.
BdD.Table  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.

V-2-d/ Les privilèges au niveau Colonne d’une table

GRANT SELECT (col1), INSERT (col1, col2) ON mydb.mytbl TO 'someuser'@'somehost';

Table  Local, à la base de données en cours d’utilisation. Erreur, si aucune BdD active.
BdD.Table  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.

Le contrôle des accès aux bases de données par : Samir BOUCETTA Page |6
Les privilèges statiques qui peuvent être attribués/révoqués par GRANT and REVOKE
Privilège Meaning and Grantable Levels
ALL [PRIVILEGES] Grant all privileges at specified access level except GRANT OPTION and PROXY.
ALTER Enable use of ALTER TABLE. Levels: Global, database, table.
ALTER ROUTINE Enable stored routines to be altered or dropped. Levels: Global, 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.
CREATE TABLESPACE Enable tablespaces and log file groups to be created, altered, or 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.
CREATE VIEW Enable views to be created or altered. Levels: Global, database, table.
DELETE Enable use of DELETE. Level: Global, database, table.
DROP Enable databases, tables, and views to be dropped. Levels: Global, database, table.
DROP ROLE Enable roles to be dropped. Level: Global.
EVENT Enable use of events for the Event Scheduler. Levels: Global, database.
EXECUTE Enable the user to execute stored routines. Levels: Global, database, routine.
FILE Enable the user to cause the server to read or write files. Level: Global.
Enable privileges to be granted to or removed from other accounts. Levels: Global,
GRANT OPTION database, table, routine, proxy.
INDEX Enable indexes to be created or dropped. Levels: Global, database, table.
INSERT Enable use of INSERT. Levels: Global, database, table, column.
Enable use of LOCK TABLES on tables for which you have the SELECT privilege. Levels:
LOCK TABLES Global, database.
PROCESS Enable the user to see all processes with SHOW PROCESSLIST. Level: Global.
PROXY Enable user proxying. Level: From user to user.
REFERENCES Enable foreign key creation. Levels: Global, database, table, 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: https://dev.mysql.com/doc/refman/8.0/en/grant.html


https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html

Le contrôle des accès aux bases de données par : Samir BOUCETTA Page |7

Vous aimerez peut-être aussi