web-dev-qa-db-ja.com

Accessデータベースへのユーザー権限を制御する方法は?

1人のユーザーに書き込みアクセスを許可し、他のすべてのユーザーにローカルネットワーク上のMS Accessデータベースへの読み取り専用アクセスを許可する最も簡単な方法は何ですか?

私はユーザーを信頼していますが、残念ながらAccessは、テーブルの行の選択が解除されるとすぐにデータへの変更を保存します。偶発的なキーストロークは、ユーザーが変更を保存するように要求することなく保存されます。

7
Liam

最も簡単な方法は、共有権限を使用することです。グループへの書き込みアクセスを許可し、データベースへの書き込みが必要なユーザーをそのグループに配置します。他の全員を読み取りグループに入れます。もちろん、これはWindowsドメインがあることを前提としています。

ここ はAccessデータベースのセキュリティ保護に関する情報があるサイトです。 Access 2000を扱っているので、新しいバージョンにはもっと多くのオプションがあるかもしれません。

6
Dave Swersky

Jetデータストアへのユーザー権限の制御に関するいくつかの考え:

  1. 本当に物事をロックダウンしたい場合は、ユーザーがMDBファイルへの書き込みアクセス権を持っている必要があるため本質的に脆弱であるため、Jetで管理することはできません。

  2. フロントエンドアプリケーションのデータに対する制御権限に満足している場合は、さまざまなフロントエンドを提供できます(1つはWRITEユーザー用、もう1つは読み取り専用用)。

  3. aCCDB形式を使用していない場合は、Jetユーザーレベルのセキュリティを使用できます。データへのアクセスを本当にロックダウンしたい場合、これは驚くほど複雑なテクノロジーです。Jetセキュリティホワイトペーパーのすべての指示に従わなければ、データは標準のJetワークグループファイルを持っていれば誰でも利用できます。そして、あなたが終わったとしても、それはisクラッキング可能です(クラッキングソフトウェアを購入するために$$$を費やさないわけではありませんが)。ところで、Access 2007以前のデータベースパスワードは完全に役に立たず、簡単に解読されていました。 Access 2007は、データ暗号化のレベルを上げることでセキュリティを強化しますが、データベースパスワードは多くの問題を引き起こし、複数のレベルのアクセスを許可しません(2つの異なるフロントエンドに異なるパスワードを提供しない限り)。 #2)。

  4. jet ULSを使用してフロントエンドのアクセスを制御するだけの場合は、ユーザーをグループに追加してから、フロントエンドUIオブジェクト(フォームなど)のグループメンバーシップを確認し、次のユーザーにWRITE権限を付与できます。そのレベルのアクセスを提供するユーザーグループに属します。これを行う最も簡単な方法は、書き込み権限を持つユーザーよりも読み取り専用ユーザーが多いと仮定して、読み取り専用ユーザーをデフォルトの管理者ユーザーとしてログオンさせ(つまり、セットアップには何もしない)、書き込みを行うことです。ユーザーは、書き込み権限を持つグループのユーザーとしてログオンします。つまり、ユーザー「admin」としてログオンしていない場合は、完全な書き込みアクセス権があります。

  5. もう1つの方法は、NTFSセキュリティグループを使用することです。そのためのAPIコードは Access Web にありますが、Windows管理者が実装する必要があります。ここでも、バックエンドMDBでのユーザー権限を実際に制限するのではなく、フロントエンドアプリケーションでのアクセスを制限することになります。

実際には、Jet ULSのみが、読み取り専用ユーザー(ワークグループファイルをクラックしていない)がデータを編集するのを防ぐことができます。すべてのユーザーはバックエンドMDBにネットワークアクセスできる必要がありますが、Jet ULSを実装する際のフープを飛び越えなくても、ユーザーがデータにアクセスするのを困難にすることができます。これを行うためのいくつかの手順を次に示します(もちろん、これらはすべて「隠すことによるセキュリティ」の一形態であり、バックエンドをハッキングしようと決心した読み取り専用ユーザーの速度を低下させるだけです)。

  1. バックエンドの各テーブルを右クリックして、HIDDEN属性をオンにします。これはコードで行うこともできます(ヘルプのSetHiddenAttributeを参照)。当然、エンドユーザーが非表示のテーブルを表示するようにアクセスオプションを設定した場合、これは何もしません。ただし、ほとんどのエンドユーザーはそのことを知らず、ユーザーがランタイムでアプリを実行している場合、オプションはありません。

  2. バックエンドデータベースのスタートアッププロパティをnotデータベースウィンドウを表示し、not特別なキーを使用するように変更します。スタートアッププロパティを設定するためのコードは、「AllowBypassKey」のヘルプトピックにあります。

  3. バックエンドで、1つのコマンドQuitを使用してAutoExecという名前のマクロを作成します。特別なキーが無効になっていると、このマクロの実行を防ぐ方法はありません。ユーザーがバックエンドを開こうとするとすぐに(Shiftキーを押したままにした場合、つまり、すべての起動ルーチンをバイパスするための標準のキーストローク)。 、データベース(およびAccessのインスタンス)が閉じます。

さて、これらすべてのことは、彼らが何をしているのかを知っている誰かによって元に戻すことができます。これらを実装したバックエンドを提供してくれた場合、別のAccessデータベースでコードを実行して、これらすべての起動プロパティを変更してアクセスできるようにするだけで、約5分で完了します。

ただし、エンドユーザーはそのレベルの専門知識を持っていない可能性があります。おそらくWRITEユーザーであるはずのそのようなユーザーはいますか? :)

はい、もちろんです。これらはすべて、方法を知っている人なら誰でも簡単にハッキングできます。しかし、適切なツールを持っている人にとっては、数秒で家に侵入するのも簡単です。それは強盗からの防弾保護ではありませんが、それはあなたがドアをロックしないという意味ではありません。

もう1つの考慮事項は、フルアクセスではなくAccessランタイムのみをユーザーに提供すると、ユーザーはバックエンドMDBでこれらの設定を元に戻すことができないということです。

最後に:

セキュリティは技術的な問題だけではありません。実際、そのほとんどは人の問題です。人々が彼らの仕事をするために、あなたは彼らにあなたのデータへのアクセスを与えることにおいて彼らをある程度信頼しなければなりません。たとえば、信頼できないシステム管理者の問題に対する技術的な解決策はありません。データを完全に保護する唯一の方法は、データへのアクセスをまったく許可しないことです。

9
David-W-Fenton

ODBC接続を使用して、Accessをほぼすべてのデータベースへのインターフェイスとして使用することは可能だと思います。たとえば、SQL Server 2008 Express Editionデータベースを2人のユーザー、1人の読み取り/で正常に構成しました。書き込みと1つの読み取り専用。ODBCデータソースを開くことで、Accessからデータベースに接続できました。したがって、ユーザーはOfficeベースのレポート生成とメールマージを行うことができます。彼らが精通している機能。しかし、あなたが望むどんなデータベースサーバーでも。

1
Liam

これは生意気な答えですが、より優れたセキュリティが必要な場合は、より堅牢なRDBMSへのアップグレードを真剣に検討してください。

1

この会話は少し古いかもしれませんが、いくつかの理由で私は最近同じ問題を抱えています。 M $ SQL ServerではなくMySQLに依存しているため、すべての人に適しているわけではありません。 MySQL ODBCコネクタ(ここで入手可能: http://dev.mysql.com/downloads/connector/odbc/ ))を使用し、テーブルをMySQLに保存しますサーバー。テーブルに対するAccessユーザーの権限は、MySQLユーザーの権限から継承されます。カスタマイズは非常に簡単です...

1
Greg

事実は、アクセスデータベースには機能的なセキュリティはありません

以下のリンクは、パスワードが設定されている場合でも、アクセスデータベースを「回復」するソフトウェアを販売しています。

彼らが存在するのは良いことです。彼らのプログラムは、前のプログラマーが亡くなり、他の誰もパスワードを持っていなかったときに、私の顧客の尻の1つを一度救いました。このプログラムのおかげで、私たちは入ることができず、データが失われることはありませんでした。

http://www.stellarinfo.com/access-recovery.htm

そして、あなたがそれを考える前に、いいえ、私は彼らのために働きません。

0
CurtTampa