2016-11-09 13 views
0

私は現在、プロジェクトに取り組んでいます.Windowsのログイン情報をMS Accessのログイン情報として使用して、そこにアクセスして、システム。私は以前これをやったことはありませんが、テーブルからデータを引き出すAccessのログイン画面を設定しました。私は正常にユーザーのWindowsログインを取得するコードがありますが、後に問題があります。テーブル名はtblUserで、ユーザーは一般ユーザー、人事管理、管理者です。現在、テーブルでは、私は= 3MS Accessで使用されている役割ベースのアクセス制御

The Login Screen: 
    Log On 
General User 
HR 
Admin 


Code that pulls the user information: 
Private Sub Form_Load() 
Stop 

Debug.Print Environ("UserName") 
Debug.Print Environ$("ComputerName") 

Dim strVar As String 
Dim i As Long 
For i = 1 To 255 
    strVar = Environ$(i) 
    If LenB(strVar) = 0& Then Exit For 
    Debug.Print strVar 
Next 
End Sub 

管理者は、以下に私は過去に私のログイン画面用に構築されたコードであり、一般ユーザ= 1、HR = 2と番号が割り当てられている役割を持っています。すべてを描くことによって、それは同じプロセスであるかのように思えますが、私は確信していません。下のコードに何かできることはありますか?

Private Sub btnLogin_Click() 
Dim rs As Recordset 

Set rs = CurrentDb.OpenRecordset("tblUser", dbOpenSnapshot, dbReadOnly) 

rs.FindFirst "UserName='" & Me.txtUserName & "'" 

If rs.NoMatch = True Then 
    Me.lblWrongUser.Visible = True 
    Me.txtUserName.SetFocus 
    Exit Sub 
End If 
Me.lblWrongUser.Visible = False 

If rs!Password <> Nz(Me.txtPassword, "") Then 
    Me.lblWrongPass.Visible = True 
    Me.txtPassword.SetFocus 
    Exit Sub 
End If 
Me.lblWrongPass.Visible = False 

If rs!EmployeeType_ID = 3 Then 

    Dim prop As Property 
    On Error GoTo SetProperty 
    Set prop = CurrentDb.CreateProperty("AllowBypassKey", dbBoolean, False) 

    CurrentDb.Properties.Append prop 

SetProperty: 
    If MsgBox("Would you like to turn on the bypass key?", vbYesNo, "Allow Bypass") = vbYes Then 
     CurrentDb.Properties("AllowBypassKey") = True 
    Else 
     CurrentDb.Properties("AllowBypassKey") = False 
    End If 

End If 

DoCmd.OpenForm "frmPersonal_Information" 
DoCmd.Close acForm, Me.Name 
End Sub 

これは私が達成しようとしているものについての十分な情報であることを望みます。それ以上の情報が必要な場合は、私に知らせてください。ありがとうございました。

+0

分割されていないアクセスのログイン画面は冗談です。とにかく、すべてのメンバシップ/ロールモデルと同様に、userテーブル、rolesテーブル、user_vs_rolesテーブルを持つ必要があります。最後に、ログイン、ログアウト、役割の割り当て、ログインしているユーザーに対するユーザーの役割の読み取り/検証の方法 –

答えて

0

ロールがWindows/Active Directoryログインに関連付けられている場合、ログイン画面は必要ありません。 Windowsのログオンユーザーがワークステーションを正当に使用していることを前提にしておく必要があります(安全な前提でない場合は、ITポリシーを調べる必要があります)。

アクセスはロールとアクセス許可をサポートしていません。現在ログオンしているユーザーにアクセスしてtblUserから役割を取得すると、次のようになります。

  1. バックエンド、特にテーブルへのアクセスをロックダウンします。
  2. アクセスに固有のユーザーインターフェイスのほとんどをロックし、フロントエンドフォームのみを使用できるようにします。
  3. フロントエンドの各フォームについて、手動でVBAを使用して施行するポリシーを適用するようにしてください。

最終的には、Accessをどのように使用するかを知っている誰かが、あなたが設置したあらゆる種類のロックダウンをバイパスすることができます。カジュアルな好奇心や誠実なエラーから守る必要がある場合は、SQL ServerやMySQLなどのより堅牢なDBMSとAccessを組み合わせる必要があります。

+0

データベースをWindows/Active Directoryに結び付けないと、@ SunKnight0の返事をお寄せいただきありがとうございます。従来のログイン画面でログインしたユーザーの役割に基づいて、さまざまな起動ページが表示されます。データベースを管理する人は、ユーザーが現在Excelシートで作業しているものの、より多くの機能が必要なため、Accessを使用してリスクを把握しています。 – Orange56

+0

私は休暇中でした。 Windowsのログオンを使用する必要はありませんが、それだけでさらに多くの作業が追加されます。その場合は、他のすべてを管理するだけでなく、ログオン画面を追加する必要があります。 – SunKnight0

関連する問題