Comment puis-je obtenir ms-access pour me connecter à ms-sql en tant qu'utilisateur différent ?

StackOverflow https://stackoverflow.com/questions/50786

  •  09-06-2019
  •  | 
  •  

Question

Comment puis-je obtenir que ms-access se connecte (via ODBC) à une base de données ms-sql en tant qu'utilisateur différent de son identifiant Active Directory ?

Je ne veux pas spécifier de compte dans la connexion ODBC, je veux le faire du côté ms-access pour le cacher à mes utilisateurs.Le faire dans la connexion ODBC me ramènerait directement à la situation d'origine que j'essaie d'éviter.

Oui, cela rejoint une question précédente : http://www.stackoverflow.com/questions/50164/

Était-ce utile?

La solution

Je pense que vous pouvez faire fonctionner cela comme vous le souhaitez si vous utilisez un "Connexion ODBC DSN-LESS"

Si nécessaire, conservez vos DSN ODBC sur les machines de vos utilisateurs à l'aide de l'authentification Windows.Donnez à vos utilisateurs un accès en lecture seule à votre base de données.(S'ils créent un nouveau fichier mdb et lient les tables, ils ne pourront lire que les données.)

Créez une connexion SQL disposant d'une autorisation de lecture/écriture sur votre base de données.

Écrivez une routine VBA qui parcourt vos tables liées et réinitialise la connexion pour utiliser votre connexion SQL, mais assurez-vous d'utiliser la syntaxe "DSN-Less".

"ODBC;Driver={SQL Native Client};" &
       "Server=MyServerName;" & _
       "Database=myDatabaseName;" & _
       "Uid=myUsername;" & _
       "Pwd=myPassword"

Appelez cette routine dans le cadre de votre code de démarrage.

Quelques remarques sur cette approche :

  • Access semble avoir un problème avec les informations de connexion une fois que vous passez de Lecture/Écriture à Lecture seule et essayez de revenir en Lecture/Écriture sans fermer ni rouvrir le fichier de base de données (mde/mdb).Si vous pouvez modifier cela une fois au démarrage en lecture/écriture et ne pas le modifier pendant la session, cette solution devrait fonctionner.

  • En utilisant une connexion DSN - Moins, vous pouvez masquer les informations d'identification de l'utilisateur dans le code (en supposant que vous leur donnez un fichier mde, tout devrait bien se passer).Normalement, coder en dur les chaînes de connexion n'est pas une bonne idée, mais comme vous avez affaire à une application interne, vous devriez accepter cette approche.

Autres conseils

Je pense que vous devrez lancer le processus MS Access sous le compte que vous souhaitez utiliser pour vous connecter.Il existe différents outils qui vous permettent de le faire, tels que CPAU.Cet outil vous permettra également de crypter le mot de passe.

Nous admettons ici que vous utilisez une connexion ODBC à votre base de données avec la sécurité intégrée activée, ce qui fait que vous n'avez pas/ne voulez pas écrire de valeur de nom d'utilisateur/mot de passe dans la chaîne de connexion (ce qui est selon moi le bon choix).

Dans ce cas, il n’existe heureusement aucun moyen de « simuler » un autre utilisateur lors de la connexion aux données.Admettez avec moi que pouvoir faire une telle chose serait une énorme rupture dans la sécurité intégrée !

J'ai compris de votre message précédent que vous souhaitiez que les utilisateurs puissent mettre à jour les données ou non selon l'interface client qu'ils utilisent.Selon moi, l'idée serait de créer pour chaque table une vue liée « non actualisable ».Disons que pour chaque table appelée Table_Blablabla vous créez une vue (= requête dans Access) appelée View_Table_Blablabla ...).

Lorsque vous utilisez Access, vous pouvez alors décider au moment de l'exécution si vous souhaitez ouvrir la table pouvant être mise à jour ou la vue en lecture seule.Cela peut être fait par exemple au moment de l'exécution, dans le form_Open événement, en définissant la source d'enregistrement du formulaire sur la table ou la vue.

@Philippe
Je suppose que vous utilisez le mot admettre comme étant à peu près équivalent à comprendre ou peut-être accepter;par opposition à l'opposé de refuser.

Je comprends les implications de la connexion de tous les utilisateurs à la base de données à l'aide d'un identifiant et d'un mot de passe (et de leur stockage dans l'application).Pour moi, cela représente un risque moindre que le problème auquel je suis confronté en ce moment.
@désactivé

Un peu plus d'informations sur le problème :J'ai des connexions ODBC configurées sur chacun des postes de travail des utilisateurs à l'aide de l'authentification Windwos NT.La plupart du temps, les utilisateurs se connectent à l'aide d'une configuration MDE pour utiliser cette connexion ODBC. Dans ce cas, ils ont TOUJOURS la possibilité d'ajouter/mettre à jour/supprimer des données.

Le problème vient du fait que certains utilisateurs sont suffisamment informés sur MS-Access pour créer un nouveau mdb et le lier au serveur MS-SQL.Ils peuvent ensuite modifier les données directement dans les tableaux plutôt que de passer par l'application qui effectue un certain nombre de validations et de prise en main.Et ils comme faire cela, mais parfois cela gâche et me cause des problèmes.

Ce que j'espérais faire (ce que je viens d'expérimenter) était d'actualiser les liens vers la base de données, quelque chose comme ceci pour chaque table (Remarque :J'ai basculé la connexion ODCB sur l'authentification SQL Server pour cette expérience et j'ai également ajouté les comptes au serveur SQL : lecture seulement - qui ne peut faire l'objet d'aucune mise à jour, et lire écrire - qui a tous les privilèges sur la table).

myTable.Connect = _
                "ODBC;" & _
                "DATABASE=" & "MyTestDB" & ";" & _
                "UID=readonly;" & _
                "PWD=readonly_password;" & _
                "DSN=" & "MyTestDB" & ";"
myTable.RefreshLink

cela les empêche de modifier, mais je n'arrive pas à faire fonctionner une lecture-écriture ultérieure

myTable.Connect = _
                "ODBC;" & _
                "DATABASE=" & "MyTestDB" & ";" & _
                "UID=readwrite;" & _
                "PWD=readwrite_password;" & _
                "DSN=" & "MyTestDB" & ";"
myTable.RefreshLink

Il semble que quelle que soit l'autorisation avec laquelle je me connecte en premier, elle reste permanente.Si j'ai démarré la lecture-écriture puis que je passe en lecture seule, la table reste avec les privilèges de lecture-écriture.

Pourquoi ne pas utiliser la sécurité intégrée/Windows.Vous pouvez accorder à un groupe Active Directory les droits que vous souhaitez pour les utilisateurs, puis ajouter les comptes d'utilisateurs à ce groupe.Je pense que vous pouvez également utiliser la fonctionnalité de rôles du serveur SQL en plus de cela pour limiter les fonctionnalités en fonction de l'application client utilisée.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top