IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MySQL Discussion :

Recherche dans une base de données MySQL cryptée


Sujet :

MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2020
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Novembre 2020
    Messages : 14
    Par défaut Recherche dans une base de données MySQL cryptée
    Bonjour,

    J'ai créé une petite application en C# permettant de gérer des personnes pour un salon de soins avec une base de données sous MYSQL. Depuis l'application j'effectue des recherches directement dans la base avec des commande SQL et cela fonctionne bien.
    Pour des raisons de sécurité, je voudrais chiffrer (crypter) les données concernant l'identité des personnes.
    J'ai donc trouvé deux solutions... Une consiste à chiffrer les données depuis l'application et les envoyer vers la base. J'ai essayé et c'est ok mais le problème c'est que je ne peux plus faire de recherche directement dans la base. Il faudrait que je charge l'ensemble des personnes dans un tableau de l'application pour décrypter et pour effectuer des recherches... Je trouve cela pas terrible. De plus cela ne fonctionne plus pour les dates en recherche puis que je dois transformer les dates en string.
    La deuxième solution semblerait d'envoyer les données avec des commandes demandant à MYSQL de chiffrer les infos dans la base. Par contre est ce qu'il est possible dans ce cas d'effectuer une recherche dans la base ? Je ne trouve pas d'infos sur ce sujet ou je n'utilise pas les bons mots de recherche.
    Les fonctions seraient AES_DECRYPT et AEYS_ENCRYPT si je ne me trompe pas pour le chiffrage mais pour effectuer une recherche je ne sais pas comment faire...

    Merci pour votre aide.

    Patrice

  2. #2
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2020
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Novembre 2020
    Messages : 14
    Par défaut Changement d'idée...
    Bonjour,

    Bon j'ai passé une bonne partie de la journée de hier à chercher une solution et finalement j'en viens à faire l'inverse de ce que je pensais.
    Je charge ma table MySQL dans un dataset. Ensuite je décrypte l'ensemble et si j'affiche dans un Datagridview avec Datagridview.datasource tout est ok.
    Maintenant je voudrais effectuer une recherche dans ce dataset décrypté et afficher le résultat dans ce Datagridview.

    J'ai créé une
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DataTable table = dataSet1.Tables["matable"];
    est-ce que je dois ensuite passer par un dataview pour faire ma recherche ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DataView view = new DataView(table, "nom LIKE '%" + textBox1.Text + "%'", ?????????, ????????);
    et ensuite je fais ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dataGridView1.DataSource = view;
    Est ce que j'aurai les titres des colonnes de la table d'origine ?
    Je ne comprends même pas les champs du dataview... Pffff....

    Merci pour votre aide,

    Patrice

  3. #3
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2020
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Novembre 2020
    Messages : 14
    Par défaut Trouvé
    Désolé mais je fais les questions et réponses...
    Je viens de trouver la solution.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    DataTable table = dataSet1.Tables["matable"];
    DataView view;
     
    if (string.IsNullOrEmpty(textBox1.Text)) view = table.DefaultView;
    else view = new DataView(table, Stringsearch, string.Empty, DataViewRowState.CurrentRows);
    dataGridView1.DataSource = view;
    sachant que Stringsearch est mon champ de recherche type "nom LIKE '%a%' AND prenom LIKE 'p%'" pour exemple.

    Voilà !

  4. #4
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    7 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 7 196
    Par défaut
    Salut patriceg1473.

    Citation Envoyé par patriceg1473
    Pour des raisons de sécurité, je voudrais chiffrer (crypter) les données concernant l'identité des personnes.
    Si vous désirez mettre en place la sécurité de votre SGBDR mysql, vous devez :

    1) mettre votre SGBDR dans un répertoire qui sera accessible uniquement par un seul compte.
    Quand je dis accessible, cela sous-entend par des utilisateurs qui ont aussi des comptes dans votre machine.
    Sous linux, cela va se traduire par :
    --> le propriétaire aura tous les droits
    --> ceux du groupe, auront les accès uniquement en lecture, voire rien du tout.
    --> le public, aucun accès.

    Le gros problème de la sécurité est qu'un hacker peut copier votre base de données et la rapatrier chez lui.
    Il faut faire en sorte qu'il n'a pas cette possibilité de le faire !

    2) vous ne pourrez accéder aux tables que par le SGBDR MySql.
    Je suppose que votre application sera accessible par internet.
    De ce fait, vous devez avoir aussi Apache, et donc le paramétrer pour protéger les intrusions intempestives.

    Apache permet de gérer et de filtrer les accès à votre application.

    3) sous mysql, il est possible de crypter les fichiers systèmes de vos tables MySql.
    Cela fait en sorte, que si par mégarde quelqu'un venait à copier vos tables, elles seraient illisibles.

    4) depuis l'application, vous devez vous connecter avec un compte et un mot de passe utilisateur.
    Ce niveau de sécurité vous permettra de filtrer les utilisateurs qui auront le droits de voire la totalité ou une partie de vos données.
    L'accessibilité se fera au travers des view.

    5) vous avez aussi la possibilité de chiffrer les colonnes de vos tables, enfin pas toutes, mais juste celles qui sont critiques.
    Le chiffrement se fera à partir d'une clef qu'il faudra stocker et crypter dans l'une de vos tables.
    La clef de chiffrement et sa façon de la crypter vous permettra de la rendre illisible, sans pouvoir inverser le cryptage.
    Il suffit alors de saisir la clef, de la crypter et de comparer avec celle contenu dans la table pour autoriser l'accès.
    Inversement, votre clef de chiffrement vous permettra de rendre à nouveau lisible ce qui a été stocké dans vos tables.

    Si cela vous intéresse, je peux développez chaque partie ci-dessus.

    @+

  5. #5
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2020
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Novembre 2020
    Messages : 14
    Par défaut
    Bonjour,

    Merci pour toutes ces informations...
    La Base se trouvera sur un portable. La personne pour qui je fais cela ne souhaite pas pouvoir y accéder à distance donc pas de web.
    Ce que j'ai fait c'est que je crypte la table concernant les données des personnes. Pour les autres tables, je laisse sans cryptage puisque inutilisable si on ne sait pas à qui c'est rattaché. C'est en fait une application dédiée à un cabinet de Naturopathie.
    L'ouverture de l'application nécessite un login et pass pour accéder aux données. J'ai donc un compte qui se créé à la première ouverture du soft et dont le niveau de sécurité est Programmeur. A partir de ce compte je peux créer un compte admin puis des comptes utilisateurs qui sont limités dans l'utilisation de l'application.
    Je charge la table concernant les identités dans une datatable que je décrypte et que je garde en mémoire pour travailler. Cette datatable ne représente pas la totalité des personnes mais uniquement ceux entrants dans les critères de recherche saisis. Si je change les critères de recherche alors je recharge la table cryptée, je décrypte et je replace dans la datatable. Je trouve ça lourd et j'ai peur que cela prenne du temps avec une table importante mais pas d'autre idée... Idem si je modifie une personne et si j'en ajoute une nouvelle afin de pouvoir récupérer son id puisque l'id de la personne me permet d'ouvrir toutes les autres tables non cryptées.
    Ce qui m'intéresse :
    sous mysql, il est possible de crypter les fichiers systèmes de vos tables MySql.
    Cela fait en sorte, que si par mégarde quelqu'un venait à copier vos tables, elles seraient illisibles.

    Comment faire ?

    et ceci est très intéressant aussi :
    vous avez aussi la possibilité de chiffrer les colonnes de vos tables, enfin pas toutes, mais juste celles qui sont critiques.
    Le chiffrement se fera à partir d'une clef qu'il faudra stocker et crypter dans l'une de vos tables.
    La clef de chiffrement et sa façon de la crypter vous permettra de la rendre illisible, sans pouvoir inverser le cryptage.
    Il suffit alors de saisir la clef, de la crypter et de comparer avec celle contenu dans la table pour autoriser l'accès.
    Inversement, votre clef de chiffrement vous permettra de rendre à nouveau lisible ce qui a été stocké dans vos tables.

    Ma clé se trouve dans mon application... Y'a t'il un risque ?

    Merci pour votre aide !

  6. #6
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    7 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 7 196
    Par défaut
    Salut patriceg1473.

    1) Il se trouve que les données bruts dans les tables systèmes de Mysql sont lisible.
    En effet, il est possible de les rendre illisible. Comment faire ?

    Sans le fichier "my.ini", vous ajoutez ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    # -------------------#
    #     Encryption     #
    # -------------------#
     
    early-plugin-load = keyring_file.dll
    keyring-file-data=f:/Wamp/keyring/keyring
    Vous créez le répertoire "keyring" (le répertoire, c'est le premier "keyring". Le second, c'est le fichier).
    Comme je travaille avec wamp, je l'ai mis dans le chemin d'accès à Wamp.
    Vous redémarrez le service "wampmysqld."

    Si l'ajout dans "my.ini" s'est bien passé alors vous aurez un nouveau fichier de nom "keyring" dans le répertoire que vous aurez créé.
    Pour tester, vous ajoutez ce que j'ai mis en route.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    DROP DATABASE IF EXISTS `base`;
    
    CREATE DATABASE IF NOT EXISTS `base`
    	DEFAULT CHARACTER SET `latin1`
    	DEFAULT COLLATE       `latin1_general_ci`
    	ENCRYPTION='y';
    
    USE `base`;
    
    CREATE TABLE `test`
    (  `id`    integer unsigned  NOT NULL auto_increment Primary key,
       `mess`  varchar(255)      NOT NULL
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1`  COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
      ENCRYPTION='y';
    Comment vérifiez si ça fonctionne.

    Vous vous rendez dans le répertoire de la base de données sous le nom "f:/wamp/bin/mysql/mysql8.0.22/data/base/test.idb".
    Votre chemin sera différent du bien, à vous de le retrouver.
    Si vous ouvrez le fichier "test.ibd" avec votre éditeur de text préférez, vous pouvez voir le contenu de vos colonnes.
    Si maintenant, vous ajoutez "ENCRYPTION='y'" à la table "test" et que vous la recréez, les valeurs de vos colonnes ne sont plus lisibles.
    Comme dit précédemment, cela permet à un hacker, au cas où il aura copié le fichier "test.ibd" de pouvoir l'exploiter.

    2) Pour ce qui est de la gestion de vos comptes dans votre application, le mot de passe doit être crypté.
    Comment faire ?
    Utilisez la fonction "sha2()" :
    --> https://dev.mysql.com/doc/refman/8.0...#function_sha2

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    --------------
    select sha2('mon mot de passe', 224)
    --------------
     
    +----------------------------------------------------------+
    | sha2('mon mot de passe', 224)                            |
    +----------------------------------------------------------+
    | d0a91f01715a3b1a4c66200f996702b4dde9cf5dbe9fe3c691c30a7c |
    +----------------------------------------------------------+
    --------------
    select sha2('mon mot de passe', 256)
    --------------
     
    +------------------------------------------------------------------+
    | sha2('mon mot de passe', 256)                                    |
    +------------------------------------------------------------------+
    | 3420b843f2ae7f47b7402f4fbe0e7698ca99797015ac27d00488a106f13e46db |
    +------------------------------------------------------------------+
    --------------
    select sha2('mon mot de passe', 384)
    --------------
     
    +--------------------------------------------------------------------------------------------------+
    | sha2('mon mot de passe', 384)                                                                    |
    +--------------------------------------------------------------------------------------------------+
    | a8a0e093cdcd7a27ecc8e99c2dcd2b66c8b5ef01ec13f6e6976104958aeb98a14e908e8e3e41da853d010244de091125 |
    +--------------------------------------------------------------------------------------------------+
    --------------
    select sha2('mon mot de passe', 512)
    --------------
     
    +----------------------------------------------------------------------------------------------------------------------------------+
    | sha2('mon mot de passe', 512)                                                                                                    |
    +----------------------------------------------------------------------------------------------------------------------------------+
    | a32eaa43848313926e50de88eb08f07655daed265fc5822177454a68c58e3a5b40d0b6e270286b0b677a225f22ff5af8788e9a90bd763ace7d5ab769c0a55e9a |
    +----------------------------------------------------------------------------------------------------------------------------------+
     
    Appuyez sur une touche pour continuer...
    C'est cette valeur codée que vous devez stocker dans votre table.
    Pour vérifier si l'utilisateur saisie le bon mot de passe, il suffit de le crypter par la fonction "sha2()" à nouveau et de le comparer avec celui stocké dans votre table.

    3) Il n'est pas nécessaire de tout chiffrer dans votre table, voire dans votre base de données.
    Vous chiffrer seulement les mots de passe et c'est tout.

    Pour résoudre ce problème d'accès, vous devez créer des comptes selon le type d'utilisateur.
    Par exemple :
    --> l'administrateur qui aura accès à tout.
    --> les comptables qui auront accès, en clair, aux salaires, mais pas aux prospects.
    --> les commerciaux qui auront accès, en clair, aux prospects mais pas aux salaires.
    --> les utilisateurs qui n'auront pas accès aux prospects ni aux salaires, mais au reste.

    Au travers de l'application personne ne doit avoir accès aux tables directement.
    Les accès devront se faire au travers des view et uniquement ainsi.
    Pour une table donnée, vous devez créer une view pour chaque type de compte.
    Quatre comptes, quatre view pour la même table.
    Oui, mais quoi mettre dans les view ? Cela dépend de la table.

    Je vais vous donner un exemple concret.

    a) l'administrateur va créer les tables, et les view :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    --------------
    START TRANSACTION
    --------------
     
    --------------
    set session collation_connection = latin1_general_ci
    --------------
     
    --------------
    DROP DATABASE IF EXISTS `base`
    --------------
     
    --------------
    CREATE DATABASE IF NOT EXISTS `base`
            DEFAULT CHARACTER SET `latin1`
            DEFAULT COLLATE       `latin1_general_ci`
    --------------
     
    --------------
    DROP TABLE IF EXISTS `article`
    --------------
     
    --------------
    CREATE TABLE `article`
    ( `id`        integer unsigned NOT NULL auto_increment primary key,
      `titre`     varchar(255)     NOT NULL,
      `texte`     varchar(255)     NOT NULL,
      `created`   datetime         NOT NULL DEFAULT current_timestamp,
      `updated`   datetime         NOT NULL DEFAULT current_timestamp ON UPDATE CURRENT_TIMESTAMP,
      `creator`   varchar(255)     NOT NULL
      ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    DROP TRIGGER IF EXISTS `creator`
    --------------
     
    --------------
    CREATE TRIGGER `creator`
    BEFORE INSERT ON `article`
    FOR EACH ROW
    BEGIN
      set new.creator = user();
    END
    --------------
     
    --------------
    CREATE VIEW `vue_1` AS
      SELECT  titre,
              texte,
              updated as `date`
        FROM  `article`
       WHERE creator = USER()
    --------------
     
    --------------
    CREATE VIEW `vue_2` AS
      SELECT  titre,
              texte,
              updated as `date`
        FROM  `article`
    --------------
     
    --------------
    COMMIT
    --------------
     
    Appuyez sur une touche pour continuer...
    b) l'administrateur va créer les compte avec les privilèges :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    --------------
    START TRANSACTION
    --------------
     
    --------------
    SET PERSIST mandatory_roles = ''
    --------------
     
    --------------
    commit
    --------------
     
    --------------
    drop   role if exists 'creator'@'localhost'
    --------------
     
    --------------
    create role           'creator'@'localhost'
    --------------
     
    --------------
    grant select,insert(titre,texte),update(titre,texte),delete  on `base`.`vue_1` to 'creator'@'localhost'
    --------------
     
    --------------
    grant select                                                 on `base`.`vue_2` to 'creator'@'localhost'
    --------------
     
    --------------
    drop user if exists 'user1'@'localhost'
    --------------
     
    --------------
    drop user if exists 'user2'@'localhost'
    --------------
     
    --------------
    drop user if exists 'user3'@'localhost'
    --------------
     
    --------------
    create user 'user1'@'localhost' IDENTIFIED by 'user1'
    --------------
     
    --------------
    create user 'user2'@'localhost' IDENTIFIED by 'user2'
    --------------
     
    --------------
    create user 'user3'@'localhost' IDENTIFIED by 'user3'
    --------------
     
    --------------
    grant usage on *.* to 'user1'@'localhost'
    --------------
     
    --------------
    grant usage on *.* to 'user2'@'localhost'
    --------------
     
    --------------
    grant usage on *.* to 'user3'@'localhost'
    --------------
     
    --------------
    grant 'creator'@'localhost' to 'user1'@'localhost'
    --------------
     
    --------------
    grant 'creator'@'localhost' to 'user2'@'localhost'
    --------------
     
    --------------
    grant 'creator'@'localhost' to 'user3'@'localhost'
    --------------
     
    --------------
    SET DEFAULT ROLE ALL TO 'user1'@'localhost','user2'@'localhost','user3'@'localhost'
    --------------
     
    --------------
    flush privileges
    --------------
     
    --------------
    SHOW GRANTS FOR   'user1'@'localhost'
    --------------
     
    +----------------------------------------------------+
    | Grants for user1@localhost                         |
    +----------------------------------------------------+
    | GRANT USAGE ON *.* TO `user1`@`localhost`          |
    | GRANT `creator`@`localhost` TO `user1`@`localhost` |
    +----------------------------------------------------+
    --------------
    SHOW GRANTS FOR   'user2'@'localhost'
    --------------
     
    +----------------------------------------------------+
    | Grants for user2@localhost                         |
    +----------------------------------------------------+
    | GRANT USAGE ON *.* TO `user2`@`localhost`          |
    | GRANT `creator`@`localhost` TO `user2`@`localhost` |
    +----------------------------------------------------+
    --------------
    SHOW GRANTS FOR   'user3'@'localhost'
    --------------
     
    +----------------------------------------------------+
    | Grants for user3@localhost                         |
    +----------------------------------------------------+
    | GRANT USAGE ON *.* TO `user3`@`localhost`          |
    | GRANT `creator`@`localhost` TO `user3`@`localhost` |
    +----------------------------------------------------+
    --------------
    SHOW GRANTS FOR 'creator'@'localhost'
    --------------
     
    +-----------------------------------------------------------------------------------------------------------------------+
    | Grants for creator@localhost                                                                                          |
    +-----------------------------------------------------------------------------------------------------------------------+
    | GRANT USAGE ON *.* TO `creator`@`localhost`                                                                           |
    | GRANT SELECT, INSERT (`texte`, `titre`), UPDATE (`texte`, `titre`), DELETE ON `base`.`vue_1` TO `creator`@`localhost` |
    | GRANT SELECT ON `base`.`vue_2` TO `creator`@`localhost`                                                               |
    +-----------------------------------------------------------------------------------------------------------------------+
    --------------
    COMMIT
    --------------
     
    Appuyez sur une touche pour continuer...
    c) voici le compte "user1" :
    Code bat : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    @echo off
    
    setlocal enableDelayedExpansion
    
    chcp 1252 > nul
    
    set PATH=.;%WAMPSERVER%\bin\mysql\%MYSQL%\bin\;%PATH%
    
    SET FIC=%~nx0
    SET FIC=%FIC:bat=sql%
    
    @echo.
    mysql < %FIC%  --verbose  --force  --host=localhost  --user=user1  --password=user1
    
    endlocal
    @echo.
    pause
    exit
    L'utilisateur "user1" se connecte en précisant le nom d'hôte et son mot de passe.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    mysql: [Warning] Using a password on the command line interface can be insecure.
    --------------
    START TRANSACTION
    --------------
     
    --------------
    SELECT CURRENT_ROLE()
    --------------
     
    +-----------------------+
    | CURRENT_ROLE()        |
    +-----------------------+
    | `creator`@`localhost` |
    +-----------------------+
    --------------
    INSERT INTO `vue_1` (`titre`,`texte`) VALUES
      ('Quand la pompe de la piscine émet un bourdonnement', 'Le propriétaire de la piscine conteste que ce bourdonnement constitue un trouble anormal de voisinage, du fait qu’il n’engendrerait pas de nuisances sonores supérieures à celles que tolère la réglementation.')
    --------------
     
    --------------
    select * from `vue_1`
    --------------
     
    +----------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------+
    | titre                                              | texte                                                                                                                                                                                                           | date                |
    +----------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------+
    | Quand la pompe de la piscine émet un bourdonnement | Le propriétaire de la piscine conteste que ce bourdonnement constitue un trouble anormal de voisinage, du fait qu’il n’engendrerait pas de nuisances sonores supérieures à celles que tolère la réglementation. | 2020-12-29 11:09:51 |
    +----------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------+
    --------------
    select * from `article`
    --------------
     
    ERROR 1142 (42000) at line 11: La commande 'SELECT' est interdite à l'utilisateur: 'user1'@'@localhost' sur la table 'article'
    --------------
    select * from `vue_2`
    --------------
     
    +----------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------+
    | titre                                              | texte                                                                                                                                                                                                           | date                |
    +----------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------+
    | Quand la pompe de la piscine émet un bourdonnement | Le propriétaire de la piscine conteste que ce bourdonnement constitue un trouble anormal de voisinage, du fait qu’il n’engendrerait pas de nuisances sonores supérieures à celles que tolère la réglementation. | 2020-12-29 11:09:51 |
    +----------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------+
    --------------
    commit
    --------------
     
    Appuyez sur une touche pour continuer...
    L'utilisateur peut accéder aux view "vue_1" et "vue_2", mais pas à la table sous-jacente.
    Il a créé une nouvelle ligne dans la table "article". Il est donc le propriétaire !

    d) utilisateur "user2" :
    Code bat : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    @echo off
    
    setlocal enableDelayedExpansion
    
    chcp 1252 > nul
    
    set PATH=.;%WAMPSERVER%\bin\mysql\%MYSQL%\bin\;%PATH%
    
    SET FIC=%~nx0
    SET FIC=%FIC:bat=sql%
    
    @echo.
    mysql < %FIC%  --verbose  --force  --host=localhost  --user=user2  --password=user2
    
    endlocal
    @echo.
    pause
    exit
    Et voici l'accès de cet utilisateur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    mysql: [Warning] Using a password on the command line interface can be insecure.
    --------------
    START TRANSACTION
    --------------
     
    --------------
    SELECT CURRENT_ROLE()
    --------------
     
    +-----------------------+
    | CURRENT_ROLE()        |
    +-----------------------+
    | `creator`@`localhost` |
    +-----------------------+
    --------------
    INSERT INTO `vue_1` (`titre`,`texte`) VALUES
      ('Les associations d’aide aux sans-abri sous tension avant l’arrivée de l’hiver', 'L’Etat prévoit de renforcer les budgets de l’hébergement et des maraudes dans le projet de loi de finances pour 2019.')
    --------------
     
    --------------
    select * from `vue_1`
    --------------
     
    +-------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+---------------------+
    | titre                                                                         | texte                                                                                                                 | date                |
    +-------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+---------------------+
    | Les associations d’aide aux sans-abri sous tension avant l’arrivée de l’hiver | L’Etat prévoit de renforcer les budgets de l’hébergement et des maraudes dans le projet de loi de finances pour 2019. | 2020-12-29 11:15:03 |
    +-------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+---------------------+
    --------------
    select * from `article`
    --------------
     
    ERROR 1142 (42000) at line 11: La commande 'SELECT' est interdite à l'utilisateur: 'user2'@'@localhost' sur la table 'article'
    --------------
    select * from `vue_2`
    --------------
     
    +-------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------+
    | titre                                                                         | texte                                                                                                                                                                                                           | date                |
    +-------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------+
    | Quand la pompe de la piscine émet un bourdonnement                            | Le propriétaire de la piscine conteste que ce bourdonnement constitue un trouble anormal de voisinage, du fait qu’il n’engendrerait pas de nuisances sonores supérieures à celles que tolère la réglementation. | 2020-12-29 11:14:57 |
    | Les associations d’aide aux sans-abri sous tension avant l’arrivée de l’hiver | L’Etat prévoit de renforcer les budgets de l’hébergement et des maraudes dans le projet de loi de finances pour 2019.                                                                                           | 2020-12-29 11:15:03 |
    +-------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------+
    --------------
    commit
    --------------
     
    Appuyez sur une touche pour continuer...
    L'utilisateur "user2" a aussi inséré une ligne dans la table "article".
    Mais en utilisant la view "vue_1", il ne voit que sa ligne et non celle de l'utilisateur "user1".
    Comme la view "vue_2" est accessible par tout le monde, on voit cette fois-ci les deux lignes.

    e) l'utilisateur "user3" :
    Code bat : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    @echo off
    
    setlocal enableDelayedExpansion
    
    chcp 1252 > nul
    
    set PATH=.;%WAMPSERVER%\bin\mysql\%MYSQL%\bin\;%PATH%
    
    SET FIC=%~nx0
    SET FIC=%FIC:bat=sql%
    
    @echo.
    mysql < %FIC%  --verbose  --force  --host=localhost  --user=user3  --password=user3
    
    endlocal
    @echo.
    pause
    exit
    Et son accès :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    mysql: [Warning] Using a password on the command line interface can be insecure.
    --------------
    START TRANSACTION
    --------------
     
    --------------
    SELECT CURRENT_ROLE()
    --------------
     
    +-----------------------+
    | CURRENT_ROLE()        |
    +-----------------------+
    | `creator`@`localhost` |
    +-----------------------+
    --------------
    select * from `vue_2`
    --------------
     
    +-------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------+
    | titre                                                                         | texte                                                                                                                                                                                                           | date                |
    +-------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------+
    | Quand la pompe de la piscine émet un bourdonnement                            | Le propriétaire de la piscine conteste que ce bourdonnement constitue un trouble anormal de voisinage, du fait qu’il n’engendrerait pas de nuisances sonores supérieures à celles que tolère la réglementation. | 2020-12-29 11:14:57 |
    | Les associations d’aide aux sans-abri sous tension avant l’arrivée de l’hiver | L’Etat prévoit de renforcer les budgets de l’hébergement et des maraudes dans le projet de loi de finances pour 2019.                                                                                           | 2020-12-29 11:15:03 |
    +-------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------+
    --------------
    update `vue_2` set titre = "xx xx"
    --------------
     
    ERROR 1142 (42000) at line 8: La commande 'UPDATE' est interdite à l'utilisateur: 'user3'@'@localhost' sur la table 'vue_2'
    --------------
    select * from `vue_2`
    --------------
     
    +-------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------+
    | titre                                                                         | texte                                                                                                                                                                                                           | date                |
    +-------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------+
    | Quand la pompe de la piscine émet un bourdonnement                            | Le propriétaire de la piscine conteste que ce bourdonnement constitue un trouble anormal de voisinage, du fait qu’il n’engendrerait pas de nuisances sonores supérieures à celles que tolère la réglementation. | 2020-12-29 11:14:57 |
    | Les associations d’aide aux sans-abri sous tension avant l’arrivée de l’hiver | L’Etat prévoit de renforcer les budgets de l’hébergement et des maraudes dans le projet de loi de finances pour 2019.                                                                                           | 2020-12-29 11:15:03 |
    +-------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------+
    --------------
    delete from `vue_2`
    --------------
     
    ERROR 1142 (42000) at line 12: La commande 'DELETE' est interdite à l'utilisateur: 'user3'@'@localhost' sur la table 'vue_2'
    --------------
    commit
    --------------
     
    Appuyez sur une touche pour continuer...
    L'utilisateur peut consulter la table "article" au travers de la view "vue_2", mais ne peut pas ni mettre à jour ni supprimer une quelconque ligne.

    C'est un exemple basique de ce que vous pouvez faire avec les utilisateurs et les view.

    @+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 13/09/2010, 04h58
  2. Intégration des fichier XML dans une base de données MySQL
    Par bebemoundjou dans le forum XQUERY/SGBD
    Réponses: 8
    Dernier message: 25/11/2005, 23h41
  3. problème de recherche dans une base de donnée mysql
    Par Xini28 dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 24/10/2005, 19h00
  4. problème de recherche dans une base de données
    Par bouzid_mehdi dans le forum Bases de données
    Réponses: 2
    Dernier message: 19/07/2005, 07h47
  5. recherche dans une base de donnée+boucle
    Par eric205 dans le forum Bases de données
    Réponses: 8
    Dernier message: 15/03/2005, 22h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo