Re : Comment gérer les informations de mot de passe utilisateur dans JSL (chaînes de connexion ODBC)J'aime mettre le mot de passe et l'ID utilisateur dans un fichier séparé dans le dossier des documents de l'utilisateur peut-être. Quelque chose comme ça:
identifiants.jsl
{"fred","1234"}
Vous pouvez le crypter si vous le souhaitez, mais cela n'a pas de sens, sauf pour empêcher votre chien de le regarder...
Depuis l'application, utilisez
{username,password} = include("$documents/credentials.jsl");
... use the credentials ...
username = .; password = .; // clear the variables when done with them
La fonction include renvoie le résultat de la dernière instruction exécutée dans le fichier, qui a construit la liste à 2 éléments.
Je le fais principalement pour m'assurer que je n'enregistre pas mes propres informations d'identification dans un système de contrôle de code source. Étant donné que le fichier se trouve en dehors du répertoire du projet, il ne sera pas récupéré par accident. Je le chiffre, en espérant que quiconque pirate mon ordinateur n'ait pas JMP. Vous voudrez peut-être ajouter un peu d'informations au nom du fichier ... l'application qui en a besoin, le service auquel les informations d'identification s'appliquent.
Re : Comment gérer les informations de mot de passe utilisateur dans JSL (chaînes de connexion ODBC)Je pense que chiffrer le fichier sera mieux que d'avoir cette information en texte brut.
Quelle serait la réponse complète, y compris une étape de chiffrement/déchiffrement très simple ?
Re : Comment gérer les informations de mot de passe utilisateur dans JSL (chaînes de connexion ODBC)Reportez-vous à mes commentaires ci-dessus : ce n'est pas sécurisé. Mais voici comment mettre un petit ralentisseur sur le chemin d'un attaquant.
Chiffrez ce fichier avec la fonction encrypt(), puis exécutez le fichier chiffré.
// Pre-encrypt this using edit->encrypt script. There
// is no need to use a run password, and no reason to
// make a complicated edit password. "a" is good enough.
//
// Caution: this is not secure. No password is needed to
// view this data, though JMP is required to decrypt it.
// If you need a decrypt password+prompt, you'll need to
// manually go through the GUI for encrypting scripts.
// https://community.jmp.com/t5/Discussions/How-to-handle-user-password-information-in-JSL-ODBC-connection/m-p/627942#M82631
encrypt = Function( {name, pass}, {x},
x = Expr( 1 + 1 ); // throw an error if not working
// https://community.jmp.com/t5/Discussions/How-to-check-if-the-running-script-is-encrypted/m-p/624766#M82350
If( Char( Name Expr( x ) ) == "1 + 1",
Throw( "the encrypt function needs to be encrypted to work correctly." )
);
// strings generally stay unencrypted. expressions
// that are not simple strings or numbers try to stay
// encrypted. The concatenation operator is enough to
// keep the expression's strings encrypted.
Char( Eval Expr( {Expr( name ) || "", Expr( pass ) || ""} ) ); // return value
);
Ensuite, lancez ceci pour voir comment cela fonctionne
// use the encrypted encrypt function to make an encrypted list
name = "fred";
pass = "1234";
crypt = encrypt( name, pass );
If( length(crypt) < 500 + Length( pass ) + Length( name ),
Throw( "not encrypted. Did you execute the *encrypted* file containing the encrypt function?" )
);
file = Save Text File( "$temp/credentials.jsl", crypt );
name = .;
pass = .;
///////////////////////////////////////////////////
{name, pass} = Eval List( Parse( Load Text File( file ) ) );
write("\!nsaved file contains\!n",Load Text File( file ),"\!n\!ndecrypted is");
show(name,pass);
le fichier enregistré contient
{JSL crypté("//-e12.1\!r\!n0,\!r\!n208,4193eJwNytmBhSAMAMB+tgWCCRBUkMuLgP0X8na+B3NI2evLjsG330/RUttTTEpOYhEyJ7JlBa2j1uAnpks3G3wTgpF7tJ8jqYrL\!r\!n PvBetVXPxNjKIWh06B9i+P/zfrd+bo6IP7eUOA3kSsGoaGA1x0ovXovyGmy481u4wqIGYKnEhvuG6XAE4Qk19cmunKo32uGJkuTv\!r\!nB +khNtw=\!r\!n,0,""), JSL crypté("//-e12.1\!r\!n0,\!r\!n208,4193eJwNzIkBxBAQAMB+rgWE9R1hQ/z0X8jdFDAcfUTDilxLV+PeyWbK7YEYHKE3A1bfMa7gUzjO2CxkyPwsV DPxS0TN9WNptpRC\!r\ !nLxnShIpDYKmeKzWIoUTSF6XX/fjReuqKrYKwJ9yptTwR2DfaI2j/AlFVHd/bP3Mqa0cFcuV1KCuTGp9XmOmvrXe9+Dai8GNZN+Hz\!r\!nAxwZN40=\!r\!n,0,"")}
déchiffré est
nom = "fred";
passer = "1234" ;
JMP n'inclut pas de fonction de chiffrement de scripts par programme, uniquement l'interface graphique interactive. Cette solution de contournement ne permet pas de spécifier le mot de passe d'exécution ou de modification. Il n'y a pas de mot de passe d'exécution (n'importe qui peut l'exécuter) et le mot de passe d'édition est inconnu. Vous pourriez préférer une solution différente qui mettrait {"fred","1234"} dans une fenêtre d'édition et laisser l'utilisateur chiffrer manuellement (ou non) avant de l'enregistrer. L'utilisateur pourrait alors décider s'il veut une invite pour un mot de passe d'exécution, ce qui serait un peu plus sécurisé.
Re : Comment gérer les informations de mot de passe utilisateur dans JSL (chaînes de connexion ODBC)Sous Windows, j'aime utiliser le gestionnaire d'informations d'identification :
Définir et obtenir des informations d'identification dans Credential Manager via PowerShell sous Windows
Re : Comment gérer les informations de mot de passe utilisateur dans JSL (chaînes de connexion ODBC)Je décris une approche qui utilise des informations d'identification cryptées dans cette conférence du Discovery Summit :
https://community.jmp.com/t5/Discovery-Summit-Americas-2022/JMP-and-Oracle-Tips-and-Tricks-for-a-Happy-Marriage-2022-US-30MP/ta-p/ 505583
Recherchez la section "Masquer le mot de passe".
Re : Comment gérer les informations de mot de passe utilisateur dans JSL (chaînes de connexion ODBC)Accepter cela comme l'une des bases de données était Oracle. Merci pour le tuto détaillé.
Comment gérer les informations de mot de passe utilisateur dans JSL (chaînes de connexion ODBC)Je me connecte à une base de données via ODBC, qui a un utilisateur et un mot de passe spécifiques créés à cet effet (pas possible d'utiliser Windows Active Directory, ou autre).
Lorsque la requête est créée, le script de table stocke l'ID utilisateur.
Le mot de passe est demandé mais il peut aussi être codé directement dans la chaîne de connexion en JSL.
Quelles sont les meilleures options pour gérer de telles situations dans JSL ?
Les fichiers JMP peuvent être partagés, mais les mises à jour doivent demander un utilisateur et un mot de passe spécifiques lorsqu'elles sont exécutées pour la première fois.
Automatisation et scriptAccès aux donnéesRe : Comment gérer les informations de mot de passe utilisateur dans JSL (chaînes de connexion ODBC)J'ai trouvé une approche similaire dans cette discussion de 2018:
Connexion à la base de données avec invite de connexion
Quel est l'intérêt de chiffrer le code pour se connecter à la base de données ?
Re : Comment gérer les informations de mot de passe utilisateur dans JSL (chaînes de connexion ODBC)S'il existe du code JSL disponible qui peut être exécuté pour ouvrir une connexion à la base de données, chaque utilisateur disposant de ce code (crypté ou non) peut accéder à la base de données.
Il est donc essentiel de définir un Exécuter le mot de passe pour empêcher les utilisateurs d'utiliser l'extrait sans autorisation ?
D'un autre côté, avec le mot de passe d'exécution, il devient assez inconfortable d'utiliser le code - automatiquement.
Re : Comment gérer les informations de mot de passe utilisateur dans JSL (chaînes de connexion ODBC)Je dirais de ne pas partager un tel code qui ne devrait pas être utilisé par tout le monde (si vous ne souhaitez pas définir de mot de passe d'exécution). Créer des utilisateurs spécifiques peut également aider (au moins, vous pouvez alors plus facilement changer le mot de passe/désactiver cet utilisateur) et intégrer l'informatique afin qu'ils puissent vérifier qui effectue quelles requêtes avec quoi et prendre des mesures en conséquence.
Vous pouvez également très probablement utiliser le gestionnaire d'informations d'identification (si sous Windows) pour gérer ces mots de passe comme @ih a suggéré (vous n'avez donc pas besoin de les stocker dans le fichier jsl). Je n'ai pas (encore) utilisé le gestionnaire d'informations d'identification avec JMP, mais je l'ai utilisé lors de la création de RPA (automatisation des processus robotiques) et cela a bien fonctionné.
Re : Comment gérer les informations de mot de passe utilisateur dans JSL (chaînes de connexion ODBC)C'est en partie pourquoi j'aime utiliser le magasin d'informations d'identification Windows : le mot de passe n'est tout simplement pas disponible pour les autres utilisateurs.Stocker le code ou les fichiers contenant ces informations d'identification dans un endroit accessible uniquement à certaines personnes peut avoir un effet similaire.
Re : Comment gérer les informations de mot de passe utilisateur dans JSL (chaînes de connexion ODBC)Que dis-tu de ça:
utilisez les droits Windows AD pour contrôler l'accès à la base de données :
- générer un script pour accéder à la base de données - y compris les droits d'accès à la base de données
- chiffrer le fichier dans JMP de telle sorte qu'aucun utilisateur ne puisse voir le mot de passe en texte brut
- à l'intérieur du script, essayez d'accéder à un fichier sur un partage réseau avec les droits d'accès AD
si un utilisateur est autorisé à accéder au fichier, il peut utiliser l'accès à la base de données.
pour un utilisateur sans droits d'accès, le script affichera simplement le message d'erreur
queryDB = Function( {SQLString},
pwd = Load Text File( "network path with AD rights" );
If( pwd = "my secret password",
result = New SQL Query(
Connection( "ODBC:DSN=database;PWD=xxx" ),
QueryName( "new" ),
CustomSQL( SQLString )
),
Caption( "no access rights" )
)
)