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

Langage SQL Discussion :

Différence entre REVOKE et DENY


Sujet :

Langage SQL

  1. #1
    Membre expérimenté
    Homme Profil pro
    DBA SQL Server
    Inscrit en
    Octobre 2012
    Messages
    862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA SQL Server
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2012
    Messages : 862
    Points : 1 736
    Points
    1 736
    Par défaut Différence entre REVOKE et DENY
    Bonjour à tous,

    Malgré que je trouve des posts sur google, mais tous en anglais, j'ai vraiment du mal à comprendre la différence entre REVOKE et DENY.

    Si je ne me trompe pas, REVOKE on enlève et DENY on empêche mais à vrai dire je ne vois pas trop la différence à proprement parlé.

    J'étudie pour passer la certif 70-462 et souvent je me plante pour enlever des droits. A moins que dans les examens mis sur examcollection.com il y a des erreurs, je me gourre souvent.

    L'un de vous peut-il "clairement" m'expliquer la différence ?

    Merci bcp
    Jean-Luc

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 386
    Points
    18 386
    Par défaut
    Si vous avez un privilège (par exemple, lecture sur une table), et que demain je vous l'enlève : je vous enlève ce privilège à l'aide de la commande REVOKE.

    Si vous n'avez pas ce privilège et que je veux être certain que vous ne puissiez pas l'avoir : je vous interdis ce privilège à l'aide de la commande DENY.

    Si vous n'avez pas ce privilège et que je veux vous l'ayez : je vous octroie ce privilège à l'aide de la commande GRANT.

  3. #3
    Membre régulier
    Inscrit en
    Juin 2010
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 40
    Points : 73
    Points
    73
    Par défaut
    Bonjour,

    Voila ce que j'ai compris.

    DENY : Lorsqu'un utilisateur n'as pas de droit, on ne lui donne pas.
    Je ne veut pas qu'un utilisateur puisse faire des drop database, alors si cet utilisateur n'as pas d'autres droits, je met un DENY et il ne pourra pas.

    REVOKE : Si l’utilisateur a des droits d'administrateur (qui comprennent beaucoup de droit GRANT, et y compris sur celui de drop database) mais qu'on veut lui retirer seulement ce droit de drop database, alors on va lui retirer u droit qu'il a déjà avec REVOKE.

    On comprend que l'utilisateur peut faitre un drop database avec ces droits accordés, mais on lui soustrait juste ce droit-là.

    Imaginons que je soit un stagiaire qui fait que des bêtises sur la DB (Ce qui n'est pas si imaginaire que ça)
    Au lieu de repasser ton temps à m'accorder tout les droits que tu accorde aux stagiaires habituel, mais en sans me mettre le droit de dropper la database, tu va me donner le groupe de droits (par exemple nommé "stagiaire"), mais tu va juste retirer de cette liste le droit de drop database avec REVOKE.

    J'espère que j'ai été compris

    EDIT : je passe trop de temps à écrire des post trop compliqués...

  4. #4
    Membre expérimenté
    Homme Profil pro
    DBA SQL Server
    Inscrit en
    Octobre 2012
    Messages
    862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA SQL Server
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2012
    Messages : 862
    Points : 1 736
    Points
    1 736
    Par défaut
    Merci, mais revenons sur ton exemple du stagiaire

    Imaginons que nous avons créé un rôle qui se nomme donc STAGIAIRE

    Je l'assigne au user Julien.

    Mais Julien n'est pas très malin (j'espère que tu ne t'appelles pas Julien ), et je veux l'empêcher de faire un delete.

    Là alors, je choisis de mettre un DENY vu que je le fais que sur un user et pas tout un rôle ?

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 386
    Points
    18 386
    Par défaut
    D'ailleurs je me demande si je ne vous ai pas dit une bêtise sur le DENY.
    Ce serait plutôt pour interdire un privilège sur un objet particulier qui appartient à un ensemble auquel le privilège est autorisé.

    Je vais vérifier.

  6. #6
    Membre expérimenté
    Homme Profil pro
    DBA SQL Server
    Inscrit en
    Octobre 2012
    Messages
    862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA SQL Server
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2012
    Messages : 862
    Points : 1 736
    Points
    1 736
    Par défaut
    Citation Envoyé par Waldar Voir le message
    D'ailleurs je me demande si je ne vous ai pas dit une bêtise sur le DENY.
    Ce serait plutôt pour interdire un privilège sur un objet particulier qui appartient à un ensemble auquel le privilège est autorisé.

    Je vais vérifier.
    J'attends alors avant de répondre à votre précédent post

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 849
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 849
    Points : 52 978
    Points
    52 978
    Billets dans le blog
    6
    Par défaut
    1) le DENY n'existe pas en SQL. C'est une invention de Sybase / SQL Server...
    2) en SQL il n'existe que GRANT et REVOKE.

    GRANT : gratifie l'utilisateur d'un privilège
    REVOKE : révoque un privilège préalablement accordé à un utilisateur.

    ATTENTION : les privilèges sont chainés.
    • L'utilisateur qui donne le privilège est appelé GRANTOR (gratifieur)
    • L'utilisateur qui reçoit le privilège est appelé GRANTEE (gratifié)


    D'ou la table suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    GRANTOR      GRANTEE       TABLE_NAME    PRIVILEGE_TYPE IS_GRANTABLE
    ------------ ------------  ------------- -------------- ------------
    USR_DIEU     USR_TOTO      T_PABIEN      SELECT         NO
    USR_DIEU     USR_TOTO      T_PABIEN      INSERT         NO
    USR_DIEU     USR_TOTO      T_PABIEN      DELETE         NO
    USR_MOI      USR_TOTO      T_PABIEN      SELECT         NO
    Comme vous pouvez le constater, USR_TOTO a reçu 2 fois le privilège SELECT sur la table T_PABIEN...
    Si USR_DIEU retire les privilèges attribuées :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    REVOKE SELECT, INSERT, DELETE ON T_PABIEN TO USR_TOTO
    Alors il reste à USR_TOTO, toujours la possibilité de faire du SELECT sur la table T_PABIEN :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT *
    FROM   INFORMATION_SCHEMA.TABLE_PRIVILEGES
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    GRANTOR      GRANTEE       TABLE_NAME    PRIVILEGE_TYPE IS_GRANTABLE
    ------------ ------------  ------------- -------------- ------------
    USR_MOI      USR_TOTO      T_PABIEN      SELECT         NO
    Pour éviter cette situation, certains éditeurs de SGBDR (dont je tairais le nom...) on stupidement décidé de rajouter la commande DENY qui est une imbécilité.
    Par exemple si USR_DIEU lance la commande suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DENY ALL ON T_PABIEN TO USR_TOTO
    Bien que la liste des privilèges montre encore la même information que précédemment, USR_TOTO ne peut plus rien faire sur la table T_PABIEN, car le DENY prime sur le GRANT !!!!

    Maintenant les conseils que je vous donne sont les suivants :
    1) ne jamais laisser plsuieurs personnes donner des privilèges
    2) ne jamais utiliser le DENY
    3) ne jamais chainer les privilèges (GRANT OPTION).

    Et pour de plus amples informations, lire mon bouquin sur SQL ou mon site web !

    A +

  8. #8
    Membre expérimenté
    Homme Profil pro
    DBA SQL Server
    Inscrit en
    Octobre 2012
    Messages
    862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA SQL Server
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2012
    Messages : 862
    Points : 1 736
    Points
    1 736
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Maintenant les conseils que je vous donne sont les suivants :
    1) ne jamais laisser plsuieurs personnes donner des privilèges
    2) ne jamais utiliser le DENY
    3) ne jamais chainer les privilèges (GRANT OPTION).

    Et pour de plus amples informations, lire mon bouquin sur SQL ou mon site web !

    A +
    Bonjour Frédéric, comme d'hab, merci pour votre réponse complète.

    Je suivrai vos conseils, mais le soucis c'est que le questionnaire pour la certif 70-462, lui il me donne parfois comme réponse le DENY...
    Mais je penserai surtout si j'ai la question, de choisir le REVOKE.

    Je regarderai dans votre livre (SQL 4e édition que j'ai à la maison) mais pas encore commencé, pour plus de précision.

    Merci à tous pour vos réponses.

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

Discussions similaires

  1. Différence entre un "bidouilleur" et un Pro ?
    Par christ_mallet dans le forum Débats sur le développement - Le Best Of
    Réponses: 290
    Dernier message: 28/11/2011, 10h53
  2. Différence entre 2 configurations order/deny
    Par omelhor dans le forum Apache
    Réponses: 2
    Dernier message: 01/09/2011, 16h13
  3. Différence entre TCP, UDP, ICMP
    Par GliGli dans le forum Développement
    Réponses: 1
    Dernier message: 13/09/2002, 08h25
  4. Différences entre jmp, jz, jnz, etc
    Par christbilale dans le forum Assembleur
    Réponses: 3
    Dernier message: 05/07/2002, 15h09
  5. Réponses: 3
    Dernier message: 07/05/2002, 16h06

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