cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
The Discovery Summit 2025 Call for Content is open! Submit an abstract today to present at our premier analytics conference.
Choose Language Hide Translation Bar
View Original Published Thread

JSL (ODBC 接続文字列) でユーザーのパスワード情報を処理する方法

FN
FN
Level VI
ODBC を使用してデータベースに接続しています。ODBC には、その目的のために作成された特定のユーザーとパスワードがあります (Windows Active Directory などは使用できません)。

クエリが構築されると、テーブル スクリプトはユーザー ID を保存します。

パスワードが要求されますが、JSL の接続文字列に直接コーディングすることもできます。

JSL でそのような状況に対処するための最良のオプションは何ですか?

JMP ファイルは共有できますが、更新は初回実行時に特定のユーザーとパスワードを要求する必要があります。

この投稿のオリジナルは 、English (US) で書かれており、ユーザビリティ向上のため自動翻訳機能を使用して表示しています。コメントを投稿すると、オリジナルの言語(English (US))やご指定の言語 でも表示されます。

2 ACCEPTED SOLUTIONS

Accepted Solutions
ih
Super User (Alumni) ih
Super User (Alumni)

Re: JSL でユーザーのパスワード情報を処理する方法 ( ODBC 接続文字列 )

Windows では、資格情報マネージャーを使用するのが好きです。

Windows の PowerShell を介して Credential Manager で資格情報を設定および取得する

 

pmroz
Super User

Re: JSL でユーザーのパスワード情報を処理する方法 ( ODBC 接続文字列 )

このディスカバリー サミットの講演では、暗号化された資格情報を使用するアプローチの概要を説明します。

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

「パスワードを隠す」セクションを探します。

11 REPLIES 11
Craige_Hales
Super User

Re: JSL でユーザーのパスワード情報を処理する方法 ( ODBC 接続文字列 )

おそらく、パスワードとユーザー ID をユーザーのドキュメント フォルダー内の別のファイルに入れるのが好きです。 このようなもの:

 

資格情報.jsl

{"fred","1234"}

必要に応じて暗号化できますが、犬に見られないようにすることを除いて、それはほとんど意味がありません...

アプリから、

{username,password} = include("$documents/credentials.jsl");
... use the credentials ...
username = .; password = .; // clear the variables when done with them

include 関数は、ファイル内で最後に実行されたステートメントの結果を返します。これにより、2 要素リストが作成されます。

これは主に、自分の資格情報をソース管理システムにチェックインしていないことを確認するために行います。 ファイルはプロジェクト ディレクトリの外にあるため、誤って取得されることはありません。 私のコンピューターをハッキングする人が JMP を持っていないことを願って、私はそれを暗号化します。 ファイル名に少しの情報を追加することをお勧めします...それを必要とするアプリ、資格情報が適用されるサービス。

この投稿のオリジナルは 、English (US) で書かれており、ユーザビリティ向上のため自動翻訳機能を使用して表示しています。コメントを投稿すると、オリジナルの言語(English (US))やご指定の言語 でも表示されます。

FN
FN
Level VI

Re: JSL でユーザーのパスワード情報を処理する方法 ( ODBC 接続文字列 )

ファイルを暗号化する方が、この情報をプレーン テキストとして保持するよりも優れていると思います。

 

非常に単純な暗号化/復号化ステップを含む完全な答えは何ですか?

 

この投稿のオリジナルは 、English (US) で書かれており、ユーザビリティ向上のため自動翻訳機能を使用して表示しています。コメントを投稿すると、オリジナルの言語(English (US))やご指定の言語 でも表示されます。

Craige_Hales
Super User

Re: JSL でユーザーのパスワード情報を処理する方法 ( ODBC 接続文字列 )

上記の私のコメントを参照してください。これは安全ではありません。 しかし、攻撃者の進路に小さなスピード バンプを設ける方法を次に示します。

このファイルを encrypt() 関数で暗号化してから、暗号化されたファイルを実行します。

// 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
);

次に、これを実行して動作を確認します

// 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);


保存されたファイルに含まれる
{JSL Encrypted("//-e12.1\!r\!n0,\!r\!n208,4193eJwNytmBhSAMAMB+tgWCCRBUkMuLgP0X8na+B3NI2evLjsG330/RUttTTEpOYhEyJ7JlBa2j1uAnpks3G3wTgpF7tJ8jqYrL\!r\! nPvBetVXPxNjKIWh06B9i+P/zfrd+bo6IP7eUOA3ksSsGoaGA1x0ovXovyGmy481u4wqIGYKnEhvuG6XAE4Qk19cmunKo32uGJkuTv\!r\!nB +khNtw=\!r\!n,0,"), JSL暗号化("//-e12.1\!r\!n0,\!r\!n208,4193eJwNzIkBxBAQAMB+rgWE9R1hQ/z0X8jdFDAcfUTDilxLV+PeyWbK7YEYHKE3A1bfMa7gUzjO2CxkyPwsVDP xS0TN9WNptpRC\!r\ !nLxnShipDYKmeKzWIoutSF6XX/fjReuqKrYKwJ9yptTwR2DfaI2j/AlFVHd/bP3Mqa0cFcuV1KCuTGp9XmOmvrXe9+Dai8GNZN+Hz\!r\!nAxwZN40=\!r\!n,0,")}

 

復号化された
name = "フレッド";
パス = "1234";

 

JMP には、スクリプトをプログラムで暗号化する機能は含まれておらず、インタラクティブな GUI のみが含まれています。 この回避策では、実行パスワードまたは編集パスワードを指定できません。 実行パスワードはなく (誰でも実行できます)、編集パスワードは不明です。 別のソリューションを好むかもしれません{"フレッド","1234"}編集ウィンドウで、保存する前にユーザーが手動で暗号化 (または暗号化しない) できるようにします。 その後、ユーザーは、実行パスワードのプロンプトが必要かどうかを決定できます。これは、もう少し安全です。

この投稿のオリジナルは 、English (US) で書かれており、ユーザビリティ向上のため自動翻訳機能を使用して表示しています。コメントを投稿すると、オリジナルの言語(English (US))やご指定の言語 でも表示されます。

ih
Super User (Alumni) ih
Super User (Alumni)

Re: JSL でユーザーのパスワード情報を処理する方法 ( ODBC 接続文字列 )

Windows では、資格情報マネージャーを使用するのが好きです。

Windows の PowerShell を介して Credential Manager で資格情報を設定および取得する

 

この投稿のオリジナルは 、English (US) で書かれており、ユーザビリティ向上のため自動翻訳機能を使用して表示しています。コメントを投稿すると、オリジナルの言語(English (US))やご指定の言語 でも表示されます。

pmroz
Super User

Re: JSL でユーザーのパスワード情報を処理する方法 ( ODBC 接続文字列 )

このディスカバリー サミットの講演では、暗号化された資格情報を使用するアプローチの概要を説明します。

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

「パスワードを隠す」セクションを探します。

この投稿のオリジナルは 、English (US) で書かれており、ユーザビリティ向上のため自動翻訳機能を使用して表示しています。コメントを投稿すると、オリジナルの言語(English (US))やご指定の言語 でも表示されます。

FN
FN
Level VI

Re: JSL でユーザーのパスワード情報を処理する方法 ( ODBC 接続文字列 )

これをデータベースの1つとして受け入れたのがOracleでした。 詳細なチュートリアルをありがとう。

この投稿のオリジナルは 、English (US) で書かれており、ユーザビリティ向上のため自動翻訳機能を使用して表示しています。コメントを投稿すると、オリジナルの言語(English (US))やご指定の言語 でも表示されます。

hogi
Level XII

Re: JSL でのユーザー パスワード情報の処理方法 (ODBC 接続文字列)

2018 年のこのディスカッションでも同様のアプローチを見つけました。
ログインプロンプトを使用したデータベース接続

 

データベースに接続するコードを暗号化する利点は何ですか?

この投稿のオリジナルは 、English (US) で書かれており、ユーザビリティ向上のため自動翻訳機能を使用して表示しています。コメントを投稿すると、オリジナルの言語(English (US))やご指定の言語 でも表示されます。

hogi
Level XII

Re: JSL でのユーザー パスワード情報の処理方法 (ODBC 接続文字列)

データベース接続を開くために実行できる利用可能な JSL コードがある場合、このコードを持つすべてのユーザー (暗号化されているかどうかに関係なく) がデータベースにアクセスできます。

 

したがって、設定することが不可欠です実行パスワードユーザーが許可なくスニペットを使用できないようにするには?

一方、実行パスワードを使用すると、コードを自動的に使用するのが非常に不快になります。

この投稿のオリジナルは 、English (US) で書かれており、ユーザビリティ向上のため自動翻訳機能を使用して表示しています。コメントを投稿すると、オリジナルの言語(English (US))やご指定の言語 でも表示されます。

jthi
Super User

Re: JSL でのユーザー パスワード情報の処理方法 (ODBC 接続文字列)

誰もが使用すべきではないそのようなコードは共有しないでください(実行パスワードを設定したくない場合)。 特定のユーザーを作成することも役立つ場合があります (少なくとも、そのユーザーのパスワードを簡単に変更したり無効にしたりできます)。IT 部門を参加させて、誰がどのクエリを何を実行しているかを確認し、それに応じてアクションを実行できるようにします。

また、資格情報マネージャー (Windows の場合) を使用して、次のようなパスワードを管理することもできます。 @ih提案しました(したがって、それらをjslファイルに保存する必要はありません)。 JMP で認証情報マネージャーを (まだ) 使用したことはありませんが、RPA (ロボティック プロセス オートメーション) を構築するときに使用したことがあり、うまく機能しました。

この投稿のオリジナルは 、English (US) で書かれており、ユーザビリティ向上のため自動翻訳機能を使用して表示しています。コメントを投稿すると、オリジナルの言語(English (US))やご指定の言語 でも表示されます。