Excel VBA | 実務用 VBA コード集(テンプレ付き)

Excel VBA VBA
スポンサーリンク

VBA拡張版:取得時にワンタイム認証(2FA)を要求する

ここまでで「パスワードをクラウドやDBに保存し、管理者が必要時に取得できる仕組み」を紹介しました。今回はさらに拡張して、取得時にワンタイム認証(2FA)を要求する仕組みを組み込みます。これにより、パスワード取得をより強固に保護できます。


実現方法の選択肢

  1. メールによるワンタイムコード送信
    • 管理者が取得要求 → システムがランダムコードを生成 → メールで送信
    • 管理者はそのコードを入力して認証
  2. SMSによるワンタイムコード送信
    • TwilioなどのSMS APIを利用
    • 管理者の携帯にコードを送信
  3. チャット通知によるワンタイムコード送信
    • Slack / Teams / LINE Notify のWebhookを利用
    • 管理者がチャットでコードを受け取り、入力して認証

サンプルコード(メールでワンタイムコード送信)

Option Explicit

'=== ワンタイムコード生成 ===
Function GenerateOTP(Optional length As Integer = 6) As String
    Dim chars As String, i As Integer, result As String
    chars = "0123456789"
    Randomize
    For i = 1 To length
        result = result & Mid(chars, Int(Rnd() * Len(chars)) + 1, 1)
    Next i
    GenerateOTP = result
End Function

'=== OTP送信(メール) ===
Sub SendOTPEmail(toAddress As String, otpCode As String)
    Dim objMsg As Object, objConf As Object
    Set objMsg = CreateObject("CDO.Message")
    Set objConf = CreateObject("CDO.Configuration")
    
    ' SMTP設定(例:Office365)
    With objConf.Fields
        .Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.office365.com"
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 587
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
        .Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "your_account@domain.com"
        .Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "your_password"
        .Update
    End With
    
    With objMsg
        Set .Configuration = objConf
        .From = "your_account@domain.com"
        .To = toAddress
        .Subject = "【認証コード通知】ZIPパスワード取得用OTP"
        .HTMLBody = "<html><body><h2>🔑 認証コード</h2><p>以下のコードを入力してください:</p><p><b>" & otpCode & "</b></p></body></html>"
        .Send
    End With
End Sub

'=== OTP認証フロー ===
Sub OTPAuthentication()
    Dim otpCode As String, userInput As String
    
    ' ワンタイムコード生成
    otpCode = GenerateOTP(6)
    
    ' 管理者にメール送信
    Call SendOTPEmail("admin@domain.com", otpCode)
    
    ' 管理者入力を待機(例:InputBox)
    userInput = InputBox("メールで送信された認証コードを入力してください")
    
    If userInput = otpCode Then
        MsgBox "認証成功!パスワードを取得できます", vbInformation
        ' ここでパスワード取得処理を呼び出す
    Else
        MsgBox "認証失敗!コードが一致しません", vbCritical
    End If
End Sub
VB

この拡張版のポイント

  • OTP(ワンタイムコード)を生成 → 毎回異なるコード
  • メール/SMS/チャットで送信 → 管理者に即時通知
  • 入力確認 → コード一致でパスワード取得を許可

実務でのメリット

  • セキュリティ強化 → パスワード取得に2FAを必須化
  • 不正アクセス防止 → コードが一致しない限り取得不可
  • 柔軟性 → メール・SMS・チャットなど複数経路に対応可能

✅ まとめ

  • パスワード取得時にワンタイム認証を要求
  • OTPを生成してメール/SMS/チャットで通知
  • 管理者が正しいコードを入力した場合のみパスワード取得可能
タイトルとURLをコピーしました