• ベストアンサー

ACCESS ログイン名によるセキュリティ

再度、こちらで質問させて頂きます。 フォームを開く時に、ログイン名を判断して開閉することは可能でしょうか? テーブルに複数のログイン名をマスタとして持ち、登録されているログイン名だった場合、フォームを開き、違った場合、メッセージが出るようにしたいです。 VBAの場合、初心者ですので、どう組み立てればよいかわかりません。 構文の例も挙げていただけると、助かります。 宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • avanzato
  • ベストアンサー率54% (52/95)
回答No.5

すみません分かりにくいのでこちらを参考にしてください。 ■標準モジュール Option Compare Database Option Explicit Declare Function GetUserName Lib "advapi32.dll" Alias _ "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long Public Function GetUsrName() As String Dim buf As String * 255 Dim ret As Long ret = GetUserName(buf, Len(buf)) GetUsrName = Left(buf, InStr(buf, vbNullChar) - 1) End Function ■チェック画面(フォーム) Private Sub Form_Load() Do While UserID.Value <> "" If GetUsrName = UserID.Value Then MsgBox ("認証成功") 'Unload Me 動作確認用にコメント化 Exit Sub End If DoCmd.GoToRecord , , acNext Loop MsgBox ("認証失敗") 'Unload Me  動作確認用にコメント化 End Sub ■マスターテーブル(テーブル) フィールド1:UserID テキスト型 ※主キー フィールド2:UserName テキスト型 ☆マスターテーブルを仮に[T_UserList]として作成し、フォームウイザードを使用して[T_UserList]の単票フォームを作ります。 このフォームのコードを変更すると簡単にチェック用画面が作れます。 動作確認が済んだらチェック用画面のテキストボックスを不可視にしたほうがセキュリティ上いいです。 余談ですがアクセスの起動時の設定でアクセスを立ち上げると自動的にチェック用画面が立ち上がる設定で使用するわけですが・・・。 アクセスをWクリックなどで起動した直ぐにシフトキーを押しっぱなしにするとこの自動起動が殺されチェック画面が起動しません。 悪用されないよう気をつけてください。

その他の回答 (5)

  • avanzato
  • ベストアンサー率54% (52/95)
回答No.6

#4の回答です。 >フォームの開く時イベントにイベントプロシージャに設定し、「認証成功」と「認証失敗」を表示することができました。 おめでとうございます。 >しかし、ログイン名を取得できません。 >標準モジュールにコピー後、そのまま何もしないのでしょうか? >APIとは? >標準モジュールにコピー後どうしたらよいのでしょうか? フォームを開くときのコードに If GetUsrName = UserID.Value Then と言う箇所があります。 このGetUsrNameを定義しているのが標準モジュールのAPI関数になります。 API関数とは簡単に言えばVBの拡張機能だと思って貰えればいいと思います。 もしログイン名を確認したいようでしたら MsgBox ("認証成功")を MsgBox (GetUsrName) に変更して見てください。 正常に動いていればログインユーザー名が表示されます。

H-SYS-03
質問者

お礼

こんにちは。 無事に成功しました。 長々とお付き合い頂いた上に、丁寧な対応に感謝しきれません。 ありがとうございました。

  • avanzato
  • ベストアンサー率54% (52/95)
回答No.4

>なかなか理解できず、申し訳ないです。 いえ、こちらこそうまい説明が出来ず申し訳ない。 #3で書いたAPIを標準モジュールに、それ以降の部分はチェック用のフォームのコードになります。 マスターテーブルの名前はフォームプロパティのレコードソースに指定する為コードには出てきません。 現状での状態を画像で載せます。

H-SYS-03
質問者

補足

何度もありがとうございます。 フォームの開く時イベントにイベントプロシージャに設定し、「認証成功 」と「認証失敗」を表示することができました。 しかし、ログイン名を取得できません。 標準モジュールにコピー後、そのまま何もしないのでしょうか? APIとは? 標準モジュールにコピー後どうしたらよいのでしょうか? 宜しくお願いします。

  • avanzato
  • ベストアンサー率54% (52/95)
回答No.3

そういうことであれば標準モジュールに次の構文を追加してください。 Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long Public Function GetUsrName() As String Dim buf As String * 255 Dim ret As Long ret = GetUserName(buf, Len(buf)) GetUsrName = Left(buf, InStr(buf, vbNullChar) - 1) End Function ↑APIを使用します。 次に#1のコードを Private Sub Form_Load() Do While UserID.Value <> "" If GetUsrName = UserID.Value Then MsgBox ("認証成功") 'Unload Me 動作確認用にコメント化 Exit Sub End If DoCmd.GoToRecord , , acNext Loop MsgBox ("認証失敗") 'Unload Me  動作確認用にコメント化 End Sub ↑チェック用画面読込にコードを走らせます。 >説明不足ですみません。 いえ、実は内心こちらかもと思ってコードは組んでました^^;

H-SYS-03
質問者

補足

コード作ってくださっていたんですね。 ありがとうございます。 また質問になってしまうのですが、 同標準モジュールにどちらも貼り付けて宜しいのでしょうか? またマスタテーブルの名前がまだ決まっていないので、決まり次第変更したのですが、どの部分にあたりますか?? なかなか理解できず、申し訳ないです。 宜しくお願いします。

  • avanzato
  • ベストアンサー率54% (52/95)
回答No.2

添付失敗しましたので再度^^;

H-SYS-03
質問者

補足

さっそくの回答ありがとうございます。 PCログイン時に表示されるログイン名を取得することは可能でしょうか? フォームでログイン名を入力するのではなく、PCログイン時に使用したログイン名をマスタテーブルと照合し、フォームの開閉を判断する方法があればと思いまして・・・・ 説明不足ですみません。

  • avanzato
  • ベストアンサー率54% (52/95)
回答No.1

こんにちは。 最初にユーザチェック用のフォームを表示させログイン名を入力し認証させる方法でしたらこちらでどうでしょうか? Option Compare Database Option Explicit Private Sub Cmd_Check_Click() Do While UserID.Value <> ""  If UserIDCheck = UserID.Value Then MsgBox ("認証成功") Exit Sub End If DoCmd.GoToRecord , , acNext '次のレコードへ移動 Loop MsgBox ("認証失敗") End Sub 認証成功となっているところに次のフォームを表示させ、失敗であれば警告を表示させる感じになります。 添付画像を参考にお願いします。

関連するQ&A

  • ACCESS ログイン名によるセキュリティ

    フォームを開く時に、ログイン名を判断して開閉することは可能でしょうか? テーブルに複数のログイン名をマスタとして持ち、登録されているログイン名だった場合、フォームを開き、違った場合、メッセージが出るようにしたいです。 VBAの場合、初心者なので詳しく教えてください。 宜しくお願い致します。

  • Access アクセスについて

    Accessでデータベースを作っています。 テーブル、クエリは下記のようになっており、リレーションシップで紐付けしてあります。 クエリからフォームを作成し、商品番号を入力することでマスタテーブルに登録されていれば自動で商品名等の情報が表示されるようになっています。(フォーム1) 商品番号を入力しカーソルが移動した時、マスタテーブルに該当する項目がなかった場合、マスタテーブルから作成した新規追加用のフォームが表示されるようになっています。(サブフォームではありません) 新規追加用フォームに商品名を入力し、閉じてもフォーム1の商品名の欄に反映されません。新規追加用フォームを閉じる時にVBAで”Requery”,”Refresh”もやってみましたがダメでした。商品番号を入力し直すと表示されます。 どうすれば自動で商品名が表示されるようになるか教えてください。 テーブル1(入力用) 1.ID(主キー) 2.商品番号 3.etc. テーブル2(マスタテーブル) 1.商品番号(主キー) 2.商品名 3.etc. クエリ 1.ID(テーブル1) 2.商品番号(テーブル1) 3.商品名(テーブル2) 4.etc.(テーブル2) 5.etc.(テーブル1)

  • わからないので再び!Access2000です

    ログイン画面で、ID、パスワードを入力後btnログインクリックするとメインフォームを開き、メインフォームにあるtxtログイン者名というテキストボックスにログイン者名をだしたいのですがどうすればいいのですか? テーブル名:ユーザーマスタ ユーザーマスタのフィールド名:ログインID、ユーザー名、パスワード フォーム名:ログイン、メインメニュー ログイン画面:txtユーザーID、txtパスワード、btnログイン メインメニュー:txtログイン者名 ものすごい初心者です!よろしくおねがいします!!

  • Access2000での質問

    ログイン画面で、ID、パスワードを入力後btnログインクリックするとメインフォームを開き、メインフォームにあるtxtログイン者名というテキストボックスにログイン者名をだしたいのですがどうすればいいのですか? テーブル名:ユーザーマスタ フィールド名:ログインID、ユーザー名、パスワード フォーム名:ログイン、メインメニュー ものすごい初心者です!よろしくおねがいします!!

  • 正しいログイン名を使ってログインする方法

    Windows Vista を使っています。 ある会社のHPにログインしました。その時、間違ったメールアドレスで登録してしまい、新たに別のログイン名とパスワードを使って、正しいメールアドレスで登録すると、その会社から「登録が完了しました」と連絡メールがありました。 後日、後者の正しく登録できたほうでログインしようとすると、以前のログイン名とパスワードが自動的に表示されてします。Deleteで消してから、正しいほうを書きなおしても、「ログイン名かパスワ―ドが間違っています」と表示され、進むことができません。 教えて!GOOの過去の質問・回答から探して、インターネットオプションから、クッキーとパスワードとフォームの履歴を削除してみると、ログイン名だけは消えましたが、パスワードは消えないままで、状況は変わりません。 困っています。御回答いただければ有り難いです。 よろしくお願いいたします。

  • accessのクエリ

    こんにちわ。 いまaccess2000を使っています。 あるフォームのコントロールソースとして ある選択クエリを指定しました。 そのクエリは元になるトランザクションテーブルと それに関連するマスタテーブルから構成されています。 そこでこのフォームの詳細セクションでデータを入力すると, トランザクションテーブルにそのまま登録されるように なっていますが,なぜか関連するマスタにまでデータが 登録されてしまいます。 なおそのときはマスタの名称項目のみに登録され, コード項目には何も登録されません。 トランのみに反映しマスタには反映しないようにしたいのですが, どうすれば良いでしょうか? 教えてください。お願いします。

  • Access フォームの参照先について

    こんにちは!いつもこのサイトにはお世話になっています。 今日お聞きしたいことはタイトルにも簡単に書いたのですが、 例えば「社員マスタ」というテーブルを元に「社員マスタ」という 名前のフォームを作成したとします。 その後何らかの事情でテーブル名が「社員マスタ」から「社員名簿」 へ変わってしまった場合、もちろんフォームから「社員マスタ」を開こう としても開きません。 ただ「社員マスタ」フォームには参照先のテーブルの項目にあわせて 幅を調整したり、検索機能を付けたりしているので、 参照するテーブル名が変わっただけでまたフォームを1から作成する のはどうも効率が悪くてしかたありません。 フォームの内容はそのままに参照するテーブルの名前だけを変更する 方法がありましたらご教授お願いします。 ※「社員マスタ」テーブルと「社員名簿」テーブルは名前が変わった だけで、内容は全く変わりません。

  • Access2003 フォームでの入力制限

    AccessでVBAを使用している途中わからないところが でてきましたのでお教え頂ければと思います。 WindowsXPでAccess2003を使用しております。 さっそくですが、まずデータ入力用のフォームがあります。 数量を入力するテキストボックスがあり、そこに入力された値が 0以上100未満ではない場合エラーを表示するようなVBAを使用しています。 このエラーチェックをVBAで直接値を指定するのではなく テーブルにあるマスターを参照して判断することは可能でしょうか。 少々わかりにくいですかね…; 項目 下限 上限 ------------------- 数量   0    100 金額  500  5000 上記マスタがあります。 フォームにて数量のテキストボックスに値を入力し、とあるボタンを クリックした際にこのマスタを見に行き、0未満あるいは100以上の 場合はエラーを表示させたいのです。 こういう場合はADO?という記述を使用しなければならないのでしょうか… よろしければお教えください。

  • Access2000のレコード削除について

    Access2000のVBAにより、フォームに配置したコマンドボタンを押すことで、テーブルの全レコードを一度に削除したいのですが、どの様にすればよいのですか? 構文で教えて頂けると助かります。とても困っています。よろしくお願いします。

  • ACCESSのフォーム操作について

    vbaが全く分からない初心者です。 あれこれ調べてみましたが、分かりませんので 教えてください。 ACCESSでフォーム作成をしています。 テーブルA テーブルB テーブルC があり、フィールドは全て共通しています。 フォームに、コンボボックスを設けテーブル名を表示させ クリックするとそのテーブルのデータをフォームに表示させる ということがやりたいのですがどうすればよいでしょうか。 (例 テーブルCを選ぶとフォームにテーブルCのデータを表示) 本来なら初歩的な事から勉強をした方がいいのですが 仕事の作業でどうしても必要になり、急いでおります。 参考になりそうな、ページやvbaがありましたら教えて 頂けないでしょうか。 宜しくお願い致します。