[[20160830153645]] 『フォームでパスワード設定』(最高のコク) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『フォームでパスワード設定』(最高のコク)

イメージとして、3つのフォームとシートを使い、
個人データの管理を行いたいと考えてます。

○フォーム1:パス入力用
 ・リストボックス:氏名選択
 ・テキストボックス:パスワード入力
 ・コマンドボタン1:パス入力実行用
 ・コマンドボタン2:新規登録&パス変更用のフォーム呼出用

○フォーム2:新規登録(氏名とパス)&パス変更用

○フォーム3:個人データ表示・入力・変更用

■シート1:表示。使用方法の説明記載。
      フォーム1呼出ボタン設置。

■シート2:非表示。フォーム1のリストボックス用の氏名記載。
      氏名毎のパスワード記載。

■シート3:非表示。個人データ記載。

動作としておおまかに、
1.フォーム1で、氏名選択&パス入力し実行
2.フォーム1で選択した氏名のデータが記載したフォーム3を立上

やりたい事として、
1.フォーム1のリストボックスで選択した氏名毎の
  パスワード設定方法。
2.氏名関係無くマスターパスを設定する。
3.選択した氏名をキーとしてシート3を検索し、
  該当するデータをフォーム3に表示する。
です。

とりあえず、
ヒントでもなんでも構いませんので、
リストの内容と連動してパス設定する方法を教えて下さい。
よろしくお願いします。

< 使用 アプリ:Excel2000、使用 OS:WindowsXP >


 う〜ん・・・

 ヒントだけ ということですけど、どれぐらいの【おおまかさ】でさしあげたらいいのか、あるいは【こまかく】アドバイスすべきか
 最高のコク さんのVBA力量がわからないので、悩みますねぇ。

 シートレイアウトなんかも不明の状態で、下手をしたら、シートのデザイン(データの持ち方含め)まで
 回答側で行って、さぁ、フルセット、このコードでどうぞということになる??

 なぜ、3つもユーザーフォームを持たなければいけないのか、その必要性もよくわかりませんし。

 せめて、現在考えているシートの具体的なレイアウトや、ユーザーフォームのコントロールの具体的な配置を
 説明されてはいかがですか?

 ところで、マスターパスって、オールマイティパスワードのことですか?

(β) 2016/08/30(火) 17:00


説明不足ですみません・・・
でも、シートのデザイン等までお願いする気は毛頭無いですよ。
VBAの力量は、ほぼ素人ですが、
フォーム3とシート3については、なんとか既にありますので、
フォーム1で、パスワードがOKの時にフォーム3を立ち上げる感じにしたいと
思ってますので、パスワードの作り方が知りたいだけです。
(3つもユーザーフォームを持つ理由は、単にカッコイイからです。)
マスターパスは、オールマイティパスワードのことです。

シート2に

  A   B   
1 山田  kagoj2
2 田中  87bv78
3 ・   ・
4 ・   ・

って感じのシートにして、
フォーム1のリストボックスと山田を選択し、
パスワードをkagoj2と入力した場合とオールマイティパスワードを
入力した場合のみ、フォーム3を立上げたいです。

(最高のコク) 2016/08/31(水) 11:35


 どうも、漠としたコメントなので具体的にどんなお手伝いをしたらいいのか、何を回答したらいいのか、悩んでいます。

 >>パスワードの作り方が知りたいだけです

 パスワードの登録には、
 1)操作者が、それぞれ 任意のパスワードを登録
 2)システムから、セキュリティ規約(英数混在とか、大文字小文字混在とか、桁数は何桁とか)に準じたパスワード文字列を生成し、それを使わせる。

 がありますけど、どちらでやる計画ですか?

 >>オールマイティパスワード

 オールマイティパスワードは、どのように管理するのか、その登録としてどのように設定するのか、その手順というか操作イメージを説明してください。
 たとえば 山田さんがアドミニストレータだった場合、山田さんが設定したパスワードがオールマイティ?
 ちょっと違うような気がしますね。ここはどう考えていますか?(VBAコードの話ではありません)

 その管理がどうなのかにもよりますが、名前とパスワードを入力した時に、その人が、オールマイティなのか、普通のユーザなのか、
 どこで、どう判断する予定ですか(これもコードの話ではありません。要件の話です)

 で、いずれにしても【パスワードの作り方が知りたいだけです】ということですが、このパスワードの作り方がわかれば本件解決?
 (もし、操作者が登録入力するなら、【作り方】というしろものではありませんので、なにもアドバイスすることはない・・のですか?)

 具体的に、要件を明示して、ここまでやったけど、なかなかうまくいかないというコードを提示して皆さんからアドバイスをもらったほうが
 いいのではないでしょうか?

(β) 2016/08/31(水) 13:24


パスワード判定して、OKだった場合とNGだった場合で、何をしたいのでしょう?

まず、マクロ無効で起動してしまえば、誰でも中身を見ることができます。パスワードを知らない人は開けない、というマクロを組んでも、無効化されれば無意味です。

次に、パスワードの作り方ですが、これは無限に考えられます。一番簡単なのが、パスワードをどこかのシートに羅列しておき、シートを隠す方法。 シート2の説明を見ると、どうやらこれで考えていますね? でも、隠しシートなんて誰でも解除して、見ることができてしまいますよ。

パスワードの文字列を、暗号化しておけば、元の文字列は推測されにくくなります。この暗号化の方法も、無限に考えられます。 しかし、どういう方法で暗号化しても、暗号化・復号化するロジックを書いたマクロを見られてしまうと、バレます。 オールマイティパスワードなんて設定しても、チェックしている部分を見られれば一発でバレます。 更には、パスワードチェックするロジック自体を無効化されればお仕舞いです。

つまり、Excelでは中途半端なパスワードチェックは、普段の操作性を悪くするだけであり、利点は全く無い、ということになります。

意味が無いよ?、と言われても、格好つけて暗号化したいならば、RSA暗号・復号化なんていかがでしょうか。 "System.Security.Cryptography.RSACryptoServiceProvider" をキーワードに検索すれば、いろいろ情報が得られるでしょう。 もっと簡単に、文字コードを1つずらすとか、変換テーブルを介して置換するとか、独自方式でも構いません。 いずれにせよ、ロジック自体を無効化されればお仕舞いだ、という事を頭に置いて、コーディングしてみてください。
(???) 2016/08/31(水) 13:56


横からスミマセン。
ちょっと話がずれると思いますが、マクロを見られなくする方法は無いのでしょうか。
私は普段、自分の幼稚なコードを見られるのが恥ずかしくて、VBA Projectパスワードを
かけているのですが、これではダメなのでしょうか?教えて下さい。
よろしくお願いします。

(素人) 2016/08/31(水) 14:33


マクロのプロジェクトにパスワードを掛けることはできるのですが、比較的簡単にこれを解除する方法があるのですよ。 辞書攻撃とかは不要で、手作業で数分で外せちゃうのです。

「DPB=」とかをキーにググれば、簡単に方法を調べられます。 しかし、ブックを使う人が、こういう情報を知らない、PCとは無関係な方だけであればパスワードを外されないので、有効でしょう。
(???) 2016/08/31(水) 14:59


???さん、ありがとう御座います。
簡単に出てきました。簡単に。
ショックです。
書き込みを消す事は出来ますか?
出来るだけ拡散させたくないので。
自分の書き込みも消したいのですが、
方法が分かりません。
よろしくお願いします。

(素人) 2016/08/31(水) 15:18


元のパスワードの話とも通じますから、消さずともそのままで良いですよ。 ここで少しくらい隠したって、知っている人はもう知ってますから。 むしろ、マクロプログラミングする人は、全員知っていても良いくらいの話です。

本当にこれを問題視するならば、MSがOfficeをバージョンアップし、もっとしっかりした暗号化をかければ済むことです。2003以前と今ではフォーマットが違うのでやり方は異なりますが、安直だ、という点は変わっていないという…。
(???) 2016/08/31(水) 15:30


???さん、わかりました。
知っている人にはコードは読まれる、と思って作ります。
でも、シート保護のパスワードなんかも書いちゃってるんです。。。
(素人) 2016/08/31(水) 15:37

やはり難しそうですね・・・
ご質問の件ですが、

>パスワードの登録には、
>1)操作者が、それぞれ 任意のパスワードを登録
>2)システムから、セキュリティ規約(英数混在とか、大文字小文字混在とか、桁数は何桁とか)に準>じたパスワード文字列を生成し、それを使わせる。

 →これは、1)を考えてます。
  前に書いてますけど、フォーム2で出来れば?と考えてます。

>オールマイティパスワードは、どのように管理するのか、その登録としてどのように設定するのか、そ>の手順というか操作イメージを説明してください。
>たとえば 山田さんがアドミニストレータだった場合、山田さんが設定したパスワードがオールマイテ>ィ?
>ちょっと違うような気がしますね。ここはどう考えていますか?(VBAコードの話ではありません)

 →まずパスワードが出来るかどうかも謎のまま質問してますので、
  手順等にイメージは無いですよ。
  ただパスワードのロジックが作れた上で、どの氏名を選んだ場合でも、
  フォーム3が立ち上げるパスワードが欲しいなと考えてるだけです。

>その管理がどうなのかにもよりますが、名前とパスワードを入力した時に、その人が、オールマイティ>なのか、普通のユーザなのか、
>どこで、どう判断する予定ですか(これもコードの話ではありません。要件の話です)

 →別に判断する必要はありません。ただその氏名で登録したパスとオールマイティパスで
  立ち上げれば良いです。

>具体的に、要件を明示して、ここまでやったけど、なかなかうまくいかないというコードを提示して皆>さんからアドバイスをもらったほうが
>いいのではないでしょうか?

 →出来るかどうかも謎なので、コードはありません。

>パスワード判定して、OKだった場合とNGだった場合で、何をしたいのでしょう?
 
 →なんども書いてますが、OKだったらフォーム3が立ち上がる。
  NGならば立ち上がらないだけですよ。

>まず、マクロ無効で起動してしまえば、誰でも中身を見ることができます。パスワードを知らない人は>開けない、というマクロを組んでも、無効化されれば無意味です。

 →その点は承知してます。

>次に、パスワードの作り方ですが、これは無限に考えられます。一番簡単なのが、パスワードをどこか>のシートに羅列しておき、シートを隠す方法。 シート2の説明を見ると、どうやらこれで考えています>ね? でも、隠しシートなんて誰でも解除して、見ることができてしまいますよ。

 →セキュリティーに関して、現時点での重要度は低いです。
  シートの羅列をどの様にパスワードとして使うかが知りたいです。

(素人)さんは自身のスレを立てれば良いのでないですか?
(最高のコク) 2016/08/31(水) 15:45


最高のコクさん、もう邪魔しませんのでお許し下さい。
(素人) 2016/08/31(水) 15:59

 どうも、コメントしている意図をご理解いただけないようですので、この書きこみで本トピは撤収します。

 ・パスワードの登録

 なにも難しいことはありません。TextBox3つ用意し、1つ目に名前を入れる。
 名前とパスワードを列挙した管理シートなりDBなりがあって、そこに登録されていなければ、そのまま 2つめのTextBoxに任意のパスワードを入れて
 シートなり DBなりに格納。
 すでにその名前で登録があれば、3つめに登録済みのパスワードをいれさせ、2つめに新規パスワードをいれさせる。
 古いパスワードがマッチしていたら、新しい2つめのパスワードで管理シートなりDBを書き換え。

 パスワード文字列の体系をどうするか、これは、なんでもいいとしてもOK。
 あるいは、こんなルールといったものにして それをチェックしてもOK。
 あるいは、変更の場合、過去3回と同じものはだめとか、いいとか。
 ここは、そちらの方針でいかようにでも。

 ・名前、パスワードを入れて何かしらのアクション(別フォームを開く等)を起こす

 これまた単純。名前とパスワードをいれさせ、管理シートなりDBとマッチしていればアクションを起こす。
 マッチしていなければエラー。

 ・オールマイティパスワード

 管理シートなり、DBに、別項目として オールマイティ区分を持ち、ここは、最高のコクさんが手作業で設定。
 名前、パスワードが存在し、オールマイティ区分がたっていれば、なんでもできるという構えにする。

 あるいは、hogehogehoge という 秘密のパスワードを決めておいて、それをあわせて入力すればなんでもできるという構えも考えられます。
 この 秘密の hogehogehoge は 管理シートなりDBなりのどこかに 最高のコクさんが手作業で登録しておく。

 これら管理シートなりDBなり、あるいは、処理しているマクロそのものも(気休めですが)保護をかけておく。

 以上、あたりまえのことですが、そういったことを 淡々とコーディングされたらいいわけです。

 ★そういうことではない。どうやったら ユーザーフォーム上のTextBoxの値をチェックできるか、
  どうやったら管理シートとマッチングできるか、どうやったら管理シートに書きこみができるか、
  どうやったらユーザーフォームを表示できるか 等々は、パスワード云々とは全く関係のない部分で
  そこが知りたいなら、パスワード云々ではなく、すなおに、その方向で具体的な質問をしたらいいわけです。

 ★あくまで、パスワードを管理するために、こんな管理データをこんなレイアウトで保持したい。
  これをベースに、具体的に、こういったユーザーフォームでこのような処理をしたい、ついては
  それを実現するためのアドバイスがほしい。
  しっかりと、自分なりの構成を定めて、質問するのが筋です。
  何も考えていない と 堂々と言いきられると 絶句!!! です。
  在庫管理システムをつくりたい。どうしたらいいかと、そういっているのと同じですよ。

(β) 2016/08/31(水) 16:52


パスワードOKならばフォーム3表示、というのは直接的な動作ですよね。 どうしたいのか、というのを想像すると、権限のある人は個人情報を見て、修正することができる。 権限の無い人は、個人情報を見ることもできない。 こう捉えましたが、合ってますか?

個人情報を編集できるのが権限のある人のみ、という事であれば、ブックをファイルサーバのパスワードがかかっているフォルダに置くだけで済みませんか? これならば、ブックを開く度にパスワードを入力する手間は無いし、パスワードチェックのロジックが丸々不要になるし、マクロを覗かれて情報漏洩する心配も無いし。 良いことずくめに思いますよ。
(???) 2016/08/31(水) 17:15


私のコメントの意図もご理解頂けないようですね。
分からないから質問してるだけで、考えてないとは言ってないですよ。
構成についても、何度も言ってると思うのですが、
伝わらないのであらば、どうしょうもないですね。。。

>パスワードOKならばフォーム3表示、というのは直接的な動作ですよね。 どうしたいのか、というのを>想像すると、権限のある人は個人情報を見て、修正することができる。 権限の無い人は、個人情報を>見ることもできない。 こう捉えましたが、合ってますか?

 →合ってますが、フォーム1で選んだ氏名のデータがフォーム3に表示されますので、
  氏名が違えば、表示されるデータも変わります。
  つまり、同じファイルでも自分の氏名のみのデータが見れると言うことです。
(最高のコク) 2016/08/31(水) 18:42


パスワード入力させることが、業務上マイナス面しかないことを説明しても納得されないようですので、最初のご質問に立ち返って回答しますよ。
セキュリティ管理しようとしてマクロを書くくらいの方に説明すると、そんな簡単な事くらい知ってる、馬鹿にするな!、と言われそうなのですが…。

1.パスワード設定方法
フォーム2を用意しているとの事なので、追加・変更方法ですが、氏名とパスワードの入力用にテキストボックスを2つ配置しておきます。ボタンを押されたときに、For文でシート2の行数分ループし、氏名と一致するシート2のA列を探します。一致があれば、その行を更新。一致が無ければ、次の行(ループに使った変数が、自動的に次の行になっているはず)の氏名とパスワードを更新します。

2.マスターパス
どんな名前であろうとも、シート2は参照せず、固定文字列との一致をIf文で比較するだけです。

3.選択した名前でシート3を検索する方法
まず、For文で行数分ループし、選ばれた名前と一致する文字列を、シート2のA列から探します。一致していたら、同じ行のB列の値が、目的のパスワードです。これと、フォーム1のテキストボックスに入力された文字列が一致しているか、If文で判定します。一致しているならば、フォーム3をShowします。
フォーム3では、ソート3の行数分For文でループさせ、フォーム1の氏名欄の文字列とシート3の氏名列が一致する行を探します。見つかったならば、必要な情報を、フォーム3のテキストボックスに代入します。
(???) 2016/09/01(木) 10:10


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.