
■やりたいこと
エクセル(VBA)でパスワードの入力を要求して、それがWindowsのその人のサインイン時のパスワードと一致しているかどうかを判別したい
■詳細
添付画像をご覧ください。
ある共有ファイルがあり、そこにはユーザー名(AAA~DDD)が掲載されています。
そしてその隣にはその人たちの情報(○ or ×)が記載されいます。
この情報列の内容を編集できるのは、各ユーザーのみに制限をしたいのです。
そこで、各ユーザーのWindowsサインイン時のパスワードの入力を求められないかと思っています。
同環境のある別のシステムでは、サインインするときに、Windowsのサインイン情報と同じ情報が求められます。
サインインパスワードを変更したら、そのシステムにサインインする際は新しいパスワードの入力がもとめられます。
ということは、そのシステムはサインインパスワードを認識してるということになります。
なので、エクセルのこの状況でも同様の仕組みにできるのではないかと思いました。
別アプローチ(代替案)はいろいろ考えられるので、それは求めておらず、今回のアプローチ方法が技術的に可能かどうか、可能であれば具体的にどのような処理をすればよいかを知りたいです。
VBAは熟知しています。
もしかしたら、Windowsのサインイン情報がPC管理をしているサーバーに飛んで、別システムはそこを参照しているのかな?とも思っています。
そうなるとそのサーバーにアクセスは難しいので、同じアプローチは不可と思っています。
■動作環境
OS 名:Microsoft Windows 10 Pro
OS バージョン:10.0.16299 N/A ビルド 16299
OS 製造元:Microsoft Corporation
プロセッサ:Intel64 Family 6 Model 42 Stepping 7 GenuineIntel ~2400 Mhz
BIOS バージョン:TOSHIBA Version 2.20 , 2012/06/22
物理メモリの合計:3,988 MB
Excel バージョン:14.0.7192.5000(32ビット) Microsoft Office Standard 2010の一部
以上、心当たりあるかた、よろしくお願いいたします<(_ _)>

No.1ベストアンサー
- 回答日時:
情報が足りずほとんど想像ですのでご容赦ください。
A) ユーザー アカウントの管理は Active Directory を使っている。
B) 現在ログオンしているユーザー アカウントは PC のローカルにあるアカウントではなく、AD のアカウントである。
C) 現在ログオンしているユーザー アカウントは、現在 PC を使用している個人のアカウントである。
以上より、アカウント名とパスワードの組み合わせの正当性評価は Active Directory のサーバーが行います。
評価してもらう処理は強い権限は必要ありません。 一般ユーザーの権限で大丈夫です。
評価に使う要素は 「自分が所属する Active Directory ドメイン名」「アカウント名」「パスワード文字」 の 3つで、ドメイン名とアカウント名は自動取得とし、パスワードだけを指定するようにしました。
ユーザー名をこちらから指定できないようにしたので簡易的ですが成りすましを防止したつもりです。
もっとも、質問者さんの環境を勝手に想像したものなので使い物にならない可能性もあります。
ユーザー確認が成功したら True、失敗したら False を返すようにしたので
If AuthenticateUser("パスワード文字") Then
' 成功
Else
' 失敗
End If
のように使います。
Function AuthenticateUser(aPassword As String) As Boolean
' 戻り値
Dim result As Boolean
' ユーザーのアカウント名と所属ドメイン名を取得
Dim objSysInfo As Object
Dim objUser As Object
Set objSysInfo = CreateObject("ADSystemInfo")
Set objUser = GetObject("LDAP://" & objSysInfo.userName)
Dim userAccountName As String
Dim adName As String
userAccountName = objUser.sAMAccountName
adName = objSysInfo.DomainDnsName
' 自動取得したユーザー情報と指定されたパスワードを使い、Active Directory のユーザー確認を行う
On Error Resume Next
Err.Clear
Dim objLdap As Object
Dim objOpenDS As Object
Set objNS = GetObject("LDAP:")
Set objOpenDS = objNS.openDSObject("LDAP://" & adName, userAccountName, apasword, 1)
On Error GoTo 0
If Err.Number = 0 Then
' 確認成功
result = True
Else
' 確認できず
result = False
End If
AuthenticateUser = result
End Function
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Windows 10 スリープ復帰時にパスワードの要求がされない 4 2022/10/14 12:52
- その他(Microsoft Office) Office(Windows版,Word/Excel/PowerPoint等)にログインできません 4 2022/07/24 15:18
- サーバー WIN10のファイル又はフォルダを社内LAN上HDDで共有する場合、特定の人だけが見えるようにしたい 3 2023/04/18 00:32
- ネットワーク 家庭内LANの2台のPC間で「ネットワーク資格情報の入力」で引っかかってフォルダが共有できない 1 2022/12/11 23:37
- Windows 10 Windows10 で起動できなくて困ってます 6 2023/02/17 15:36
- その他(ゲーム) Steam版(PC)アーマードコア6の購入を検討しているのですが動作環境が合っているか分かりません。 4 2023/08/24 18:43
- 防犯カメラ・監視カメラ・小型カメラ MP4の再生 3 2022/05/03 18:10
- 中古パソコン LAVIE Direct NS(S)[Note Standard] GN254F/S9 2 2023/03/28 20:46
- 画像編集・動画編集・音楽編集 【急】【Zbrush】3DCG初心者です。ノートPCでのZbrush動作環境につきまして 1 2023/08/19 17:38
- その他(セキュリティ) 役所など、情報系システムのセキュリティが弱くても業務システムに問題ないか 3 2022/11/02 16:38
このQ&Aを見た人はこんなQ&Aも見ています
-
マクロでネットワーク上のコンピューターへの接続
Excel(エクセル)
-
ExcelVBAで今開いているユーザ情報を取得できますか?
Visual Basic(VBA)
-
VBAでActiveDirectoryのユーザ一覧の取得の仕方
Visual Basic(VBA)
-
-
4
ExcelVBAのユーザーフォームの中に線を引きたい
Visual Basic(VBA)
-
5
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
6
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
7
【Excel VBA】マクロでExcel自体を終了させたい
Excel(エクセル)
-
8
Excelのセルにユーザー名を表示する方法
Excel(エクセル)
-
9
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
10
VBA ファイルを開くダイアログでの初期表示にファイルサーバーを指定
Excel(エクセル)
-
11
《エクセルVBA》「他の人が該当ファイルを使用中の場合」の処理
Excel(エクセル)
-
12
Access サブフォームでの選択行の取得
その他(データベース)
-
13
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
14
Excel VBA Windowsにログインしているユーザ名
Excel(エクセル)
-
15
Accessの画面更新を一時的に停止する方法。
その他(データベース)
-
16
VBA:ユーザーフォームのマルチページに色を付けたい。
Word(ワード)
-
17
VBA プロシージャの名前の取得
その他(Microsoft Office)
-
18
VBAでサーバーにアクセスするにはどうすればいいの?
Access(アクセス)
-
19
ListBoxで改行したい
Visual Basic(VBA)
-
20
現在アクティブなタブのページ名を取得したい
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
XPの立ち上がりのときの画面
-
Ctrl+Alt+Delキー押してもパス...
-
パスワード忘れ
-
Administratorの初期パスワード?
-
ネットワーク管理者にアクセス...
-
AdministratorsとDomain Admins...
-
wwwとwww2の違い
-
ネットワーク ログオン サービ...
-
メールを送信できない宛先があ...
-
新しいアカウント作成の際に
-
困っています
-
ドメインの権利について
-
“Pipidae”
-
Outlookに「同期に失敗」という...
-
社内で利用中のPCで、プロフ...
-
DDNSを頻繁に使用している方
-
たまに見かける「Welcome to ○○...
-
新規PC導入して、うっかりマイ...
-
ドメインについて
-
通知領域にあるはずの取り外し...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PCを自分以外に使わせないよう...
-
エクセル(VBA)でWindowsのサイ...
-
Administratorの初期パスワード?
-
パソコンを特定の人しか使用で...
-
パソコンを他人に使わせたくない
-
ユーザーアカウント制御について
-
XPのパスワードを忘れてしまい...
-
ユーザーアカウントとは別にス...
-
ウイルスと一緒に捨てた?(長い)
-
windows vistaのログインパスワ...
-
ワークグループで他のPCにアク...
-
ログイン出来ない!?
-
Windows xp で1台のパソコンを...
-
パソコンの操作履歴を見たい。
-
自分のパソコンのIPアドレスや...
-
1回のみログオン可能なドメイン...
-
Windows7のログインパスワード...
-
WinXPのログオン変更等
-
ログオンメッセージ( 指定さ...
-
パソコン起動時パスワードについて
おすすめ情報
Active Directoryというのを初めて知りました。
無知な分野ですので、見当違いのことを言ってる可能性がありますが、ご容赦ください。
ご提示いただいたマクロを実行したところ、エラーなく実行されました。
(Set objOpenDS = ..... apaswordの部分は「aPassword」に修正しました)
しかし、パスワードはどれを使用しても、結果は「成功」となってしまいました。
Debug.Print userAccountName, adName
で値を確認すると、正しい値でした。
正確には「adName」はlocal.....というもので、これが正しいかわかりませんが、ドメイン名と一致してるので正しいと予想しています。
以下、2点不明点があります。
■不明点1
On Error Resume Next以下、
Set objOpenDS = objNS.openDSObject("LDAP://" & adName, userAccountName, aPassword, 1)
で、「自分が所属する Active Directory ドメイン名」「アカウント名」「パスワード文字」の組み合わせが正しければ、エラーにならず、組合せが確認できなければ、エラーになると認識しています。
今回aPasswordでどんな値でも結果は成功となりました。
そこで、On Error Resume Nextを外してみたところ、
実行時エラー '-2147023570 (8007052e)':
オートメーション エラーです。
ユーザー名またはパスワードが正しくありません。
というメッセージがでました。
Err.Numberの数値を確認すると、メッセージ画面のとおり「-2147023570」でした。
しかし、その後If Err.Number = 0 ThenではTrueを返しています。
この理由は不明です。
そこで、On Error Resume NextをOn Error GoTo Label_Err
に変えてやると、この場合はエラーと認識して、Label_Err:に飛びました。
■不明点2
上記対応時に判明したのですが、実はパスワードは正しいものでも、エラー(-2147023570)が発生していました。
パスワードは確認しましたが、Windowsサインイン時のもので間違いありません。
なぜエラーになるのか不明です。
ちなみに、ドメイン名とユーザー名を取得してるのように、パスワードも取得できると思うのですが、どのように記述すればよいでしょうか。
以上