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

Sécurité Discussion :

Identification de l'utilisateur-- Table SQL liée par ODBC dans Access


Sujet :

Sécurité

  1. #1
    Candidat au Club
    Inscrit en
    Mars 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Identification de l'utilisateur-- Table SQL liée par ODBC dans Access
    Bonjour,

    Je veux extraire le User ID de ma connection ODBC afin de le sauvegarder dans l'enregistrement que l'utilisateur modifie. Mon application Access contient des formulaires et états et les tables sont des tables liées par ODBC sur un serveur SQL 7.0.

    Je n'arrive pas à trouver comment aller chercher le User ID.
    J'utilise le pilote SQL Server.
    Aidez-moi!!!

  2. #2
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 768
    Points
    7 768
    Par défaut
    Bonsoir,

    Je ne sais pas comment ça fonctionne dans les moindres détails, mais voila ce que je peux dire.

    Dans le cas d'une connexion avec authentification SQL Serveur, l'Identifiant SQL Serveur peut être enregistré dans le DSN (Source de données système)
    ou dans le lien de la table liée. L'identifiant est donc toujour le même.
    A moins que l'utilisateur n'ait à saisir son identifiant et son mot de passe SQL Serveur à chaque fois ?
    Apparement Access garde cela en cache quelque part tant que la base est ouverte.
    Malheureusement je ne sais pas où.

    Pour une connexion avec authentification NT (nom utilisateur windows) il faut récupérer l'identifiant d'utilisateur windows.
    Dans ce cas on peut l'obtenir le plus souvent avec
    Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
    Environ("USERNAME")
    ou encore via l'API windows : GetUserName

    Bon courage.

  3. #3
    Candidat au Club
    Inscrit en
    Mars 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci LedZeppII,

    Malheureusement les utilisateurs s'authentifient sur SQL Server et non sur Windows NT. Et je sais que c'est conservé en mémoire à quelque part mais où, telle est la question...

    J'ai pensé à utiliser une connexion ADO mais je dois modifier toute l'application et l'impact est trop grand. J'ai cherché sur tout le WEB(enfin presque..!!!) mais je n'ai rien trouvé. Alors si quelqu'un a des idées, elles seront les bienvenues.

    Je ne perd pas espoir....

  4. #4
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 768
    Points
    7 768
    Par défaut
    Bonsoir,

    Peut-être un moyen (ça marche pour moi).
    Créer une requête SQL Direct utilisant le même DSN que celui des tables liées.

    Exemple chaîne de connexion à mettre dans les propriétés de la requête SQL Direct
    ODBC;DSN=NOM_SCE_DONNEES;DATABASE=NOM_BASE_DE_DONNEES
    Dans cette requête mettre :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT USER_NAME() DB_User, SYSTEM_USER SQL_User
    Elle renvoie le nom de l'utilisateur dans la base SQL Serveur et le nom d'authentification, de celui qui l'exécute.

    Pour que ça fonctionne il faut que l'utilisateur se soit authentifié, sinon il aura l'invite d'identification SQL Serveur.

    Voila.
    En espèrant que ça te dépanne.

  5. #5
    Candidat au Club
    Inscrit en
    Mars 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci encore LedZeppII,

    La requête SQL Direct fonctionne bien, mais lorsque je veux l'intégrer dans mon formulaire afin d'afficher dans un champ le nom de l'utilisateur, je ne peux plus ajouter des enregistrements dans mon formulaire. Il ne m'affiche que les enregistrements déjà existants. Mon formulaire était basé sur une table liée. J'ai créé une requête intégrant ma table et la requête SQL Direct afin d'alimenter le formulaire et me permettant d'afficher le nom de l'utilisateur loggué à la base mais je ne peux ajouter aucun enregistrement. Si le formulaire est basé sur la table liée seulement, je peux ajouter des enregistrements sans problème.

    Je continue de chercher...

  6. #6
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 768
    Points
    7 768
    Par défaut
    Bonsoir,

    je ne pensais pas que tu l'utiliserai ainsi.
    Je voyais plutôt une fonction vba qui va lire la requête SQL Direct avec un recordset DAO.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Function UserODBC() As String
    Dim db As DAO.Database, r As DAO.Recordset
     
    Set db = CurrentDb
    Set r = db.OpenRecordset("qrySQLUSER_DSN_MOPREAD")
    If Not r.EOF Then
       UserODBC = r![DB_User]
       ' ou
       'UserODBC = r![SQL_User]
    End If
    r.Close
    db.Close
     
    End Function
    qrySQLUSER_DSN_MOPREAD est ma requête SQL Direct.

    Sinon sur le formulaire mettre une zone de liste dont la source sera la requête SQL Direct.
    ItemData(0) de la liste sera l'utilisateur dans la base
    Column(0,0) et Column(1,0) de la liste seront l'utilisateur dans la base et le nom de connexion SQL Serveur.

    A+

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 05/08/2013, 12h19
  2. [MySQL] Tables SQL liées par une date
    Par Aiglichon dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 20/04/2013, 17h05
  3. Réponses: 9
    Dernier message: 14/09/2009, 18h35
  4. Affichage de données sql liées par une clé externe
    Par Lazarey dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 03/04/2008, 13h35
  5. Table Access Liée à SQL Server par ODBC
    Par PORTES dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 07/03/2006, 12h18

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