情報: 方法 Visual Basic 3. 0 のハンドルのセキュリティ設定 Microsoft Access によって

文書翻訳 文書翻訳
文書番号: 105990 - 対象製品
この資料は、アーカイブされました。これは "現状のまま" で提供され、更新されることはありません。
すべて展開する | すべて折りたたむ

目次

概要

Visual Basic バージョン 3. 0、Microsoft Access データベース エンジンが含まれます。 Visual Basic は、ほぼすべてができるの方法で Microsoft Access データベースを操作する構文を紹介します。 1 つの主要な例外は、セキュリティの領域です。 だけことができます設定またはログオン ID とパスワードをシステム) などのセキュリティ オプションの変更し設定または特定データベース内の特定のオブジェクトのアクセス許可を変更します。

Visual Basic バージョン 3. 0 は 2 つステートメントを使用 (SetDataAccessOption および SetDefaultWorkspace) を Microsoft Access 実装をセキュリティ メカニズムを満たす Visual Basic アプリケーションに許可される Visual Basic コードを使用してログオンします。 これらのステートメントを使用して特定のユーザーに与えられたアクセス許可できます。

ここでは、Visual Basic バージョン 3. 0 と、Visual Basic プログラマに適用される Microsoft Access セキュリティのメカニズムについて説明します。 Microsoft Access の全体のセキュリティ機能は、この資料の範囲外です。

Microsoft Access のセキュリティ機能の詳細について、以下の「サポート技術情報」(Knowledge Base) 資料を参照してください。
122036WX1051: セキュリティ ウィザードとホワイト ペーパー App. メモ 2. 0

詳細

Microsoft Access のセキュリティは、2 つの部分で実装されます。
  • 各ユーザーおよびグループが、一意のセキュリティ ID (SID) のコード。
  • その SID コードが、その SID が関連付けられている、権限を持つに沿ってデータベースに格納します。
次の 2 つのセクションは、詳細を与えます。

各ユーザーとグループが固有のセキュリティ ID (SID)

Microsoft Access では各ユーザーとグループには、セキュリティ ID (SID) があります。 SID は、ユーザーまたはグループを一意に識別するバイナリ文字列です。 ユーザー ログオンすると、かどうか (アーティクルに後で示します)、Visual Basic のコードからまたは Microsoft Access で、ログオン ダイアログ ボックスから、Microsoft Access エンジン SYSTEM.MDA データベースの MSysAccounts テーブルから読み取ります。 このデータベースは Access によってのみ作成され、元のコピーが削除された場合に、新しい (空) の 1 つが作成されます。

注: 場合は、元の SYSTEM.MDA を誤って削除すべての一意の SID は失われます。 したがって、保護されたデータベースにアクセスするすべての機能は失われてもです。 したがって、お勧めデータベースで設定された、アクセス許可と、データベースおよび場所に SYSTEM.MDA ファイルの両方のバックアップにします。

ログオンすると、ユーザーが (ない大文字小文字を区別) ユーザー名とパスワード (大文字と小文字が区別されます) を提供します。 ユーザー名とパスワードが正しい場合、ユーザーの SID が取得され、エンジンに内部構造体で保存されました。 パスワードが、ユーザーの検証にのみ使用されます。 この時点から、ユーザーが、検証済みのユーザーになると、パスワード影響を及ぼしませんセキュリティ。

ここでは、Visual Basic の動作に関係する主要ポイントです。 既定では、Microsoft Access エンジン検証しよう、ユーザーと管理者のパスワードと""それぞれ。 Visual Basic バージョン 3. 0、せず、任意のコード送りこのキーの組み合わせがエンジンに既定でします。 つまり、Visual Basic のセキュリティ関連のステートメントを使用、せずでも、Visual Basic プログラムが獲得受付、データベースに「管理者」グループの管理者のユーザーがそのパスワードなしの既定値から変更しない場合 ("")。

ログオンすると後、ユーザーの SID が取得されます。 この SID は、Microsoft Access エンジン内のすべての後続操作の使用されます。

SID が SYSTEM.MDA データベースに格納されます。

SID は自体データベースに格納します。 したがって、特定のユーザーまたはグループに与えられたすべてのアクセス許可は、一意の SID に関連付けられた、データベースにも格納されます。

これにより、Visual Basic の動作に関する別のキー_ポイントが表示されます。 Visual Basic プログラムは、データベースへの侵入し、次のいずれかに該当場合は、Microsoft Access のセキュリティ メカニズムを無視 seeming、完全な権限を持っています。
  • Visual Basic プログラマは、SYSTEM.MDA の場所をとられませんデータベース、プログラム コードで考慮します。
  • ユーザー「管理者」は、パスワードなしの既定値から変更されて ("")。
これは、既定、Microsoft Access エンジンと Visual Basic の両方の動作の原因発生します。 合計が、Visual Basic のコードによって、データベースおよびそのオブジェクトへのエントリを許可します。

Microsoft Access でオブジェクトの種類の一覧が: テーブル、クエリ、フォーム、レポート、マクロ、およびモジュール。 、これらの最初の 2 つだけは、Visual Basic コードからアクセスできる、他この説明からは省略できますのでです。

次に、2 つ説明それぞれ 2 つの Visual Basic のセキュリティの関連ステートメント (SetDataAccessOption および SetDefaultWorkspace)。 2 つのステートメントは SYSTEM.MDA ファイルの選択肢を提供するように設計されログオン エントリ セキュリティを使って、Microsoft Access データベースを Access によって設定。 これら 2 つのセクションの次は、セキュリティに関連するには、Microsoft Access エンジンの 2 つステートメントの動作に関連するセクションです。

SetDataAccessOption ステートメント--構文と動作

SetDataAccessOption は、次のパラメーター。
   SetDataAccessOption option, value

   option is a numeric value with only one legal value (1).
				

たとえば。
   SetDataAccessOption 1, "E:\VBPROJ\MY.INI"
				

\VB ディレクトリのルートに指定された DATACONS.TXT ファイルでは、定数はこの値に対して定義されています。
   Global Const DB_OPTIONINIPATH = 1
				

SetDataAccessOption は、名前と、アプリケーションの初期化 (.INI) ファイルのパス設定します。 アプリケーションの.INI ファイルは有効、データ アクセス機能をロードして初期化する前に SetDataAccessOption を使用する場合のみになります。 データ アクセスが初期化された後はこの設定が最初に、アプリケーションを終了しないで変更できません。 値は、文字列式です。 DB_OPTIONINIPATH、オプションの値引数には、アプリケーションの初期化 (.INI) ファイルの名前とパスを提供する文字列式が含まれます。 初期化ファイル、ユーザーの \WINDOWS ディレクトリに格納は通常され、なく.INI 拡張子を持つ実行可能ファイルとして同じ名前を付けます。 使用このステートメントまたはある場合だけ、アプリケーションの初期化ファイルが別の名前が \WINDOWS ディレクトリ以外のディレクトリに。

(\WINDOWS ディレクトリ) に VB.INI ファイルに次の行がある場合、VB.EXE 環境で Visual Basic プロジェクトを実行すると、SetDataAccessOption ステートメントは必要ありません。

[オプション]
SystemDB=T:\ACCESS\SYSTEM.MDA
UtilityDB=T:\ACCESS\UTILITY.MDA

注: Access と Visual Basic の両方が共有する SYSTEM.MDA を指すエントリがある限り、SYSTEM.MDA の実際の場所は重要なできません。 アプリケーションの.EXE ファイルに、\WINDOWS で独自の.INI ファイルがあり、.EXE および.INI ファイルに同じ名前を共有する場合、SetDataAccessOption ステートメントは必要はありません。

SetDefaultWorkspace ステートメント--構文と動作

SetDefaultWorkspace は、次のパラメーター。
   SetDefaultWorkspace username, password
				

このステートメントのままに出力すると、Visual Basic と次の行に相当が Visual Basic に含まれている Access データベース エンジンに送信されます。
   SetDefaultWorkspace "Admin" , ""
				

このステートメントは、有効な SID を取得して内のすべてのテーブルとクエリ オブジェクト、データベースへのエントリを取得効果があります。

Visual Basic と Access セキュリティの関係

Visual Basic と Access セキュリティ間の関係を理解するには、Microsoft Access のセキュリティ メカニズムを理解する必要があります。 ここでが Microsoft Access を広範囲にわたって使用いない Visual Basic のプログラマの利益の詳細な説明します。 Microsoft Access でアクセス許可の階層があります。 最上位レベルでグループがあります。 ユーザーはグループに特定の含まれます。 特定のユーザーに、選択的アクセス許可を付与するには、すべてのアクセス許可する必要が最初の選択を解除してか、ユーザーのグループから削除します。 しかしアクセス許可を許可したりできる個々 のユーザーの失効します。

個々 のユーザーのアクセス許可を明示的なアクセス許可と呼びます。 設定、ユーザー アカウントを含むグループのアクセス許可を暗黙的なアクセス許可と呼びます。 暗黙のアクセス許可は明示的なアクセス許可に優先順位を引き継ぐ。

データベースが開かれたし、ユーザーがログオン後に Access でのアクセス許可を設定するセキュリティ] メニューの [使えます。 [セキュリティ] メニューの [Visual Basic でテーブルおよびクエリ オブジェクトだけを意味する、データベース内の各オブジェクトに対する権限を割り当てるアクセス許可] をクリックします。

たとえば、グループがあった場合、Access でデータベース名前ユーザー Bob および Sue を含むアナリストとのみ清さんにデータの読み取りを制限して次の手順に従います完全な権限を開く] を許可します。
  1. 管理者グループにユーザーとして Microsoft Access にログオンします。 たとえば、管理者や Fred を入力します。
  2. [セキュリティ] メニューの [アクセス許可 (Alt キーを押し S P)] をクリックします。
  3. テーブルのオブジェクトは、既定の種類です。 [アクセス許可を設定するテーブルの名前を選択します。 たとえば、TestTbl を選択します。
  4. オプションをユーザーとグループ フレームでグループを設定します。 ダウン コンボ ボックスのリストをクリックし、アナリストをそのグループの選択] をクリックします。
  5. すべてのチェック ボックスが、全体のグループのすべての権限を取り消すをオフします。
  6. ユーザーに戻して、リストのオプション ボタンして Bob を選択します。 Bob のアクセス許可のすべてのチェック ボックスをオフします。
  7. 一覧からできたを選択し、完全なアクセス許可のチェック ボックスを確認します。
  8. テーブルに変更を適用する割り当てをクリックします。
この時点でしてフォーム読み込みイベントに次のコードを含む Visual Basic プログラムいると仮定します。
Sub Form_Load ()
   Dim db As database
   Dim ds As dynaset
   Dim scenario as integer

   scenario = 'insert a value between 1 and 4 here

   select case scenario
      case 1:
         ' Do nothing

      case 2:
         SetDefaultWorkspace "bob", "leftout"

      case 3:
         SetDataAccessOption 1, "E:\VB.INI"    ' not in \WINDOWS directory

      case 4:
         SetDataAccessOption 1, "E:\VB.INI"    ' not in \WINDOWS directory
         SetDefaultWorkspace "bob", "leftout"
   end select

   Set db = OpenDatabase("E:\DATACON\BASES\ACCESS11\ASAMPLE.MDB") ' point 1
   Set ds = db.CreateDynaset("TestTbl")                           ' point 2

   autoredraw = True   ' to make Print  statement persist on the form
   Print ds(0), ds(1)

End Sub
				

Visual Basic と Microsoft Access のセキュリティ関係を示す複数のシナリオは次のとおりです。

シナリオ 1: この場合はありません、SYSTEM.MDA ファイルの場所への参照です。 ウィンドウと、Microsoft Access エンジンが以前この資料に記載の [オプション] セクションで、.INI ファイルを検索できません。 つまり、SYSTEM.MDA は無視され Visual Basic の既定値、既定のユーザーとパスワードの組み合わせ (「管理者」、"")。 ただし、以前は、ユーザー管理者の既定のパスワードがものに変更以外""です。 さらに、すべてのアクセス許可グループ管理者のユーザー、管理者グループに「管理者」失効されました。 つまり、次の Visual Basic エラーは 2 の時点が発生します。
Couldn't read; no read permission for table or query 'f)) '

Visual Basic および SYSTEM.MDA ファイルでのログオンをバイパスしようとして、Visual Basic アプリケーションのバック ドアを閉じました。

TWO シナリオ: でこの場合、SYSTEM.MDA ファイルを任意のポインターをしなくても、SetDefaultWorkspace ステートメントを起動するため、Visual Basic がエンジン hunts、SYSTEM.MDA ファイルの、コード内の位置 0 で、次のエラーを示します、見つからない。
ファイル 'SYSTEM.MDA' が見つかりませんでした。

注: 1 と 2 が、SYSTEM.MDA ファイルが移動したかどうかに発生すると同じ両方の状況で発生したエラー、名前の変更、または削除します。

シナリオ 3: この場合、する SYSTEM.MDA ファイルが置かを Visual Basic がエンジンに指示が、ユーザーとパスワードの組み合わせを指定しないでください。 したがって、ここでも、Visual Basic 提供認識している唯一のユーザーとパスワードの組み合わせ (「管理者」、"") がない有効な組み合わせ、管理者ユーザー アカウントにパスワードを追加するため。 その結果、Visual Basic 時点 1、コードで、次のエラーを示します。
有効なアカウントまたはパスワードではできません。

シナリオ 4: この場合、指定する両方のパラメーター正しく。 したがって、Bob"データの読み取りアクセス許可を付けたため、「読み取りの定義」、Visual Basic ができるようにするだけでなくエンジンを読み取る、Visual Basic アプリケーションの TestTbl という名前のテーブルの最初のレコードの最初の 2 つのフィールドを印刷します。

ユーザーの開くを 4 つのシナリオを繰り返し実行する場合は同じありますすべては。 ただし、できたでしたさらに移動し、テーブルの構造と同様に、データを変更します。 覚えておいてください、する最初グループ アナリストを選択したすべてのアクセス許可を失効します。 戻るすべてのアクセス許可に追加できたがデータの読み取りと読み取りの定義だけが Bob に再び追加されました。

注: [管理者グループがセキュリティに関連する特別な意味をします。 これは、そのグループ内の任意のユーザーに適用されます。 管理者グループの SID はデータベースを作成するとき、SYSTEM.MDA に格納です。 その結果、管理者グループ常に許可が与えられますのデータベースのすべてのオブジェクトの権限を変更します。 このアクセス許可は、だれでもすぐ取得できません。 このアクセス許可はでもと、管理者グループからすべてのアクセス許可を失効したアクセス許可] ダイアログ ボックスは表示されません。 これは、バックアップを保持し、データベースの作成時に使用では SYSTEM.MDA の記録を別の理由です。

SQL クエリで OwnerAccess オプションを使用


可能な混乱の 1 つの最終ポイントは、SQL クエリ内の次の句の使用を囲む revolves:
   ... With OwnerAccess Option
				

たとえば、このコードを見てください。
   Sub Form_Load ()
      Dim db As Database
      Dim qd As querydef

      Set db = OpenDatabase("C:\ACCESS\DB1.MDB")

      ' Enter the following two lines of code as one, single line:

      Set qd = db.CreateQueryDef("myQD", "select * from [TableDetails]
         with owneraccess option ;")
      db.Close
   End Sub
				

このコードはこのエラーになります。
無効なデータベースの ID。

これは OwnerAccess が、データベースの所有者を指すためです。 所有者は、データベースの作成者です。 つまり、OwnerAccess は、所有者のユーザーとパスワードの組み合わせ (一意の SID)、データベース (ここでは BD1.MDB) に格納されているを指します。 ただし、コードは、セキュリティで保護されたデータベースの SYSTEM.MDA ファイルを指すに必要な 2 つのステートメントがありません。 実際には、このケースでのみ、SetDefaultWorkspace ステートメントが、有効な [オプション] セクションを含むコンパイル済みの.EXE ファイルの.INI ファイルが、\WINDOWS ディレクトリにある場合に不可欠です。

使用して、バックドア コードを示します。 これは、が指定されなかったエンジンにデータベース所有者の一意の SID、エンジンは、既定の名前とパスワードの組み合わせを知っているので (管理、"")、ユーザーは、データベースの所有者。 結局、SYSTEM.MDA、ファイルを読み取ることがなく、データベース所有者が、ユーザー管理ではいる場合でも、エンジン エラーことができますので、そのファクトを確認できません。

Access バージョン 2. 0 のユーザーのメモ

最近リリースされた Microsoft Jet 2. 0/Visual 基本 3. 0 互換性レイヤーを使用して Visual Basic にアクセスできる Access バージョン 2. 0 データベース。 次のとおり、セキュリティで保護されたバージョン 1. 1 データベースを Access バージョン 2. 0 形式に変換できるようにノートです。

バージョン 1.x データベースがセキュリティで保護が残りますセキュリティで保護された Access バージョン 1.x と 2. 0 を開くかどうか。 ただし、Access バージョン 2. 0 は使えませんを変更したり、データベース内のアクセス許可を追加したりでも、管理者がまで、データベースはバージョン 2. 0 に変換されます。

Access バージョン 2. 0 をインストールするときに独自ワークグループ ファイル (SYSTEM.MDA) が作成されます。 バージョン 1.x の SYSTEM.MDA ファイルがなりますになっている Access バージョン 2. 0 がバージョン 1.x と同じディレクトリにインストールされている場合 SYSTEM1X.MDA の名前を変更します。

変換されたデータベースのセキュリティを変更するバージョン 2. 0 を使用する必要がある SYSTEM.MDA、元の SYSTEM.MDA として同じグループとユーザー (と同一の PID) を持っています。

注: PID (パーソナル ID) 2. 0 では、バージョン 1.x で PIN (個人 ID 番号) に相当

セキュリティで保護されたワークグループを作成します。
  1. 2. 0 ワークグループ管理ツールを使用して、新しいワークグループを作成します。 これは、バージョン 2. 0 の SYSTEM.MDA ファイルです。
  2. すべてのユーザーを再作成し、同じ名前と PID を使用してアカウントをグループ化バージョン 1.x の Access で使用された番号です。
2. 0 形式に、セキュリティで保護された 1.x データベースの変換。

注: セキュリティで保護されたワークグループで構造の変更の権限のすべてのオブジェクトを持つユーザーのみできますバージョン 1.x 形式形式に変換バージョン 2. 0。 また、Access のバージョン 1.x バージョン 1.x ワークグループを使用してバージョン 1.x データベースに構造の変更のアクセス許可を割り当てる必要があります。
  1. バージョン 1.x データベースを使用して 1 つ存在が確認します。
  2. Access 2. 0 に、管理者ユーザーではない Admins グループのメンバーとしてログオンします。
  3. [ファイル] メニューの [データベースの変換コマンドを選択します。
  4. 変換するバージョン 1.x データベースを選択します。 求められます、バージョン 2. 0 のデータベース名。

    注: データベースの変換コマンドは強制、データベースの新しい名前を選択します。 これにより、バージョン 2. 0 バージョン 1.x に変換することはできませんバージョン 1.x からデータベースを変換した後として、バージョン 1.x データベースのバックアップ コピーを保存できます。
  5. Access ワークグループ管理ツールを使用して、新しいバージョン 2. 0 ワークグループ (SYSTEM.MDA) への参加、ユーザーがあります。

    注: するもしを受けて、Windows ディレクトリに MSACC20.INI ファイルを変更します。 2. 0 の SYSTEM.MDA のバージョンをポイントする SystemDB エントリを変更、ファイルの [オプション] セクションでファイル。 例を次のようなはファイルの [オプション] </a0>] セクション:
          [Options]
          SystemDB=<microsoft access path>\SYSTEM.MDA
    
    						

保存するには重要なポイント

  1. Microsoft Access だけ作成し、SYSTEM.MDA ファイルを変更できます。
  2. SYSTEM.MDA ファイルには、一意の SID が含まれているこれらのアクセス許可を適用するエンジン、Microsoft Access のユーザーがユーザーの並べ替えにアクセス許可を持つデータベースで使用します。 SID から有効なユーザーとパスワードの組み合わせ、Microsoft Access エンジンを提供することにより取得、エンジンは開いているデータベースのセキュリティを強制するメモリに格納、一意の SID を取得します。
  3. Microsoft Access と Visual Basic の両方をセキュリティとアクセス許可の実装を持つデータベースに侵入するために、SYSTEM.MDA ファイルから場所を指しているある必要があります。
  4. バック ドア利用が Visual Basic アプリケーション プログラムにパスワード変更された場合 (名前付きの管理) 管理者グループにユーザーがいない既定の既定値から [なし] ("")。
  5. 「OwnerAccess オプションで」の語句が CreateQueryDef や CreateDynaset、CreateSnapshot メソッドの SQL クエリで使用されて場合、SYSTEM.MDA ファイルへのポインターを存在する必要があります。 バック ドアを使用している場合でも (管理者の既定のユーザーとパスワードの組み合わせと"")、SYSTEM.MDA、「OwnerAccess オプションの」を使用すると、SQL クエリで必要とするように見えるしないと、エンジンは、ログオンしたユーザーにデータベースの所有者 (作成者) の SID と一致する SYSTEM.MDA ファイルを表示する必要があります。
  6. 有効なログオンのユーザーとパスワードの組み合わせは、SYSTEM.MDA ファイルに格納されますが、権限は、データベースに格納されます (.MDB ファイル) 自体です。 一意なキー (SID) が、有効なユーザーとパスワードの組み合わせ、または Visual Basic コードで Microsoft Access で、ログオン ダイアログ ボックスで、Microsoft Access エンジンに渡されたを使用して、SYSTEM.MDA から抽出されます。

プロパティ

文書番号: 105990 - 最終更新日: 2014年2月11日 - リビジョン: 2.0
この資料は以下の製品について記述したものです。
  • Microsoft Visual Basic 3.0 Professional Edition
  • Microsoft Visual Basic 3.0 Professional Edition
キーワード:?
kbnosurvey kbarchive kbinfo kbmt KB105990 KbMtja
機械翻訳の免責
重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。
英語版 KB:105990
Microsoft Knowledge Base の免責: Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com