Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Sécurité
Sécurité Le forum qui s'occupe de votre préoccupation de sécuriser l'accès à votre application Access, ainsi qu'à la sécurité des données.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/03/2007, 19h57   #1
Invité de passage
 
Inscription : mars 2007
Messages : 3
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 3
Points : 1
Points : 1
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!!!
Catchant est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/03/2007, 22h21   #2
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 941
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 : 3 941
Points : 6 283
Points : 6 283
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 :
Environ("USERNAME")
ou encore via l'API windows : GetUserName

Bon courage.
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2007, 14h36   #3
Invité de passage
 
Inscription : mars 2007
Messages : 3
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 3
Points : 1
Points : 1
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....
Catchant est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2007, 21h52   #4
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 941
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 : 3 941
Points : 6 283
Points : 6 283
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
Citation:
ODBC;DSN=NOM_SCE_DONNEES;DATABASE=NOM_BASE_DE_DONNEES
Dans cette requête mettre :
Code sql :
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.
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/03/2007, 21h02   #5
Invité de passage
 
Inscription : mars 2007
Messages : 3
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 3
Points : 1
Points : 1
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...
Catchant est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2007, 00h09   #6
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 941
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 : 3 941
Points : 6 283
Points : 6 283
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 :
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+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h52.


 
 
 
 
Partenaires

Hébergement Web