0

Access 2003 に、特定のユーザーだけがアクセスできるようにしたいデータベースがあります。私のデータベースには、データベースにアクセスできる必要がある人をリストしたテーブルがあります。(Tbl_BIRT_Users)。テーブルには、名前、ntlogin、および電子メール アドレスが含まれています。「管理者」フィールドもあります。

私の質問には2つの部分があります:

1 - データベースを開いたときに、その人の ntlogin (環境ユーザー名) を検索して、その人がデータベースの使用を許可されていることを確認するにはどうすればよいですか?

2 - データベースで「管理者」の Yes/No フィールドを確認し、非管理者には読み取り専用アクセス権を、管理者にはフル アクセス権を付与する必要があります。

ありがとう!

4

5 に答える 5

3

API 呼び出しを使用してログイン名を取得する - API: Get Login name コマンド プロンプトで環境変数を変更できます。コマンド プロンプトから Access の実行を開始すると、Access はスプーフィングされた環境変数を使用します。

また、ユーザーがバックエンド データベースを自宅に持ち帰って Access の製品版コピーを常駐させ、テーブルの値を変更し、データベースをオフィスに戻すなど、テーブル駆動型セキュリティを簡単に破る方法もあります。

于 2010-08-26T20:51:06.633 に答える
1

ユーザーが環境変数をいじらないと信じていたとしても、とにかく Tony の提案を採用してください。彼がリンクしたモジュールを追加した後、ユーザーのアカウント名を取得するには、fOSUserName() 関数を呼び出すだけです。ユーザーの環境から取得するのと同じくらい難しいことではありません。

しかし、「テーブル駆動型セキュリティを簡単に破る」というトニーのポイントに追加したいと思います。あなたの計画は、ユーザーが許可されたユーザーの 1 人であるかどうかを確認することです。バックエンド データベース ファイルは、許可されたユーザーだけがアクセスできる場所に配置することをお勧めします。Windows ファイル システムのアクセス許可を使用して、他のユーザーを締め出します。そうすれば、ユーザーが許可されているかどうかを判断するためにテーブルをチェックする必要さえないと判断できるかもしれません。テーブル データを使用して、ユーザーが管理者か通常のユーザーかを判断できます。または、管理者が安心できるのであれば、許可チェックを維持することに決めるかもしれません...実際にはあまりセキュリティを提供しませんが.

于 2010-08-27T02:07:13.650 に答える
0

以下のようなものを試してください。

Function RealName()
payroll = Environ("Username")

firstname = DLookup("[first name]", "[Payroll Numbers]", "[persno] = " & payroll)
lastname = DLookup("[Last name]", "[Payroll Numbers]", "[persno] = " & payroll)

If IsNull(firstname) = True Then
RealName = payroll
Else
RealName = firstname & " " & lastname
End If

End Function

次に、form_loadイベントにコードを入力して、確認済みのユーザーであることを確認できます。

于 2010-10-05T13:59:46.890 に答える
0

これは、私が使用しているアクセス セキュリティ ウィンドウ ドレッシングです。

Public Function SecurityCode() 
'*  Purpose:    Limits access to program

    Dim sUserID    As String
    Dim sUserName   As String    

'*  Determines user from Windows Login
    sUserID = Environ("USERNAME")


'*  Lookup on BE table of Allowed Users to verify on the list.
     sUserName = DLookup("[UserName]", "tbl_AllowedUsers", "ID = '" & sUserID & "'")


If Len(sUserName) > 0 Then
    'Allowed User, opens Main Switchboard

    'Set global variable for Admin rights
    g_Admin = DLookup("[AdminRights]", "tbl_AllowedUsers", "ID = '" & sUserID & "'")

    DoCmd.OpenForm "Switchboard"
    DoCmd.SelectObject acForm, "Switchboard", True
    DoCmd.RunCommand acCmdWindowHide

Else
    'Not on the Allowed Users list, opens to a Password Page
    DoCmd.OpenForm "frm_LockPage"
    DoCmd.SelectObject acForm, "frm_LockPage", True
    DoCmd.RunCommand acCmdWindowHide
End If


End Function
于 2010-08-27T19:21:00.173 に答える
0

このようなことはできませんか

Dim rst as Recordset
Dim sql as string

sql = "SELECT * FROM Tbl_BIRT_Users WHERE ntlogin = '" & Environ("UserName") & "'"
set rst = CurrentDb.OpenRecordset(sql)

    if (rst.bof and rst.eof) then
        /*not a valid user*/
        DoCmd.Quit
    else
       if not rst!Administrator then
         /*make read only*/
       end if
    end if

rst.close
于 2010-08-26T14:58:56.630 に答える