掲示板お問い合わせランダムジャンプ

Top Index

2005年05月05日
MDBファイルへのコネクション
ADO.NETのサンプルを作っていこうと思いますが、まずはDBを用意しなくてはなりません。
無料で用意できるものといえば「MSDE」が有名ですが、手軽に操作できるというところでMSAccessのMDBを利用することを前提として話を進めていきます。

今回は、MDBに「接続する」、「切断する」というサンプルを作ってみました。
これだけではあまりにも味気なさ過ぎですので、DBの「セキュリティ」を考慮してみます。
MDBでできるセキュリティ設定には以下のものがあります
1.ワークグループファイルを使った、ユーザー認証、ユーザー権限
2.DBに対するパスワード
3.DBに対する暗号化

簡単に効能を説明します。
[1]は、MDB利用時にユーザー名とそのパスワードの入力を必要するようにできます。
さらに、利用するユーザーによって、どの権限を持つのかどうかまで設定できます。
また、こちらの設定をした場合、「ワークグループ(MDW)ファイル」が作成されます。
このファイルがないと、MDBファイルを利用できなくなります。

[2]は[1]とは違い、DB自体のパスワードですので、全ユーザー共通のパスワードになります。
[2]は[1]と併用することも可能です。

[3]MDBの内部のデータを暗号化して保持するようになります。
MDBをバイナリエディタで開いたとしても、判読不能になります。
もちろん[1]、[2]共に併用可能です


つづいて、設定方法を簡単に説明します
[1]Accessの「ツール」-「セキュリティ」-「セキュリティウィザード」から設定できます。
奥が深いと思われますので、詳しい解説は他のサイトにお譲りいたします。

[2]Accessの「ツール」-「セキュリティ」-「データベースパスワードの設定」から設定できます。
DBに対するパスワードを設定する場合、「排他的にMDBを開いて」いなければなりません。

[3]Accessの「ツール」-「セキュリティ」-「暗号化/解読」から設定できます。
内部データの暗号化の為、できたかどうかわかりづらいです。
そんなときはMDBファイルをLZHなどに圧縮してみてください。
通常のMDBファイルは10分の1ぐらいまで圧縮できると思いますが、暗号化されたMDBファイルはほとんど圧縮できません。

と、以上を踏まえて、以下ソースコード。

001'ADO.NETを利用のため、あらかじめインポートしておく
002Imports System.Data.OleDb
003Imports System.IO
004
005Public Class Form1
006    Inherits System.Windows.Forms.Form
007
008#Region " Windows フォーム デザイナで生成されたコード "
061
062    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
063        '■利用時の注意
064        'ユーザー名、パスワードは平文でコードに埋め込まないでください!
065        'セキュリティ上の問題があります
066
067        Dim DBPath As String
068        DBPath = Path.Combine(Application.StartupPath, "sample.mdb")
069
070        '■コネクション文字列の作成
071        Dim CnString As String
072        'コネクション文字列として必須の項目
073        CnString = "Provider=Microsoft.Jet.OLEDB.4.0;"      'AccessDBを使用するときの決り文句
074        CnString &= "Data Source=" & DBPath & ";"           'DBファイルのパス
075
076        'ワークグループファイル(mdw)を認証に用いた場合は、以下の項目を指定する
077        Dim SysDBPath As String
078        SysDBPath = Path.Combine(Application.StartupPath, "sample.mdw")
079
080        CnString &= "Jet OLEDB:System Database=" & SysDBPath & ";"  'mdwファイルパス
081        CnString &= "User ID=sa;"                                   '利用ユーザー名
082        CnString &= "Password=sapassword;"                          'ユーザーパスワード
083
084        'それ以外のオプション
085        CnString &= "Persist Security Info=True;"               'DBが暗号化されていれば指定
086        CnString &= "Jet OLEDB:Database Password=dbpassword;"    'DB自体のパスワード
087
088        '■コネクションオブジェクトの作成
089        Dim Cn As OleDbConnection
090        Cn = New OleDbConnection(CnString)
091
092        'コネクションのオープン・クローズ
093        Try
094            Cn.Open()
095            Cn.Close()
096        Catch ex As Exception
097            MsgBox(ex.Message)
098        End Try
099
100    End Sub
101End Class
 powered by vb2html ver2.1b


DBに接続するには「コネクション文字列」というおまじないがありますが、上記のように書けばほとんどの事例に対応できるかと思います。
MDBのコネクション文字列の詳細についてはMSDN「Microsoft OLE DB Provider for Microsoft Jet」をご参考ください。

ここで注意事項があります。
これはDBなどに限定しないのですが、「.Netは逆コンパイルしやすい」ので、ソース上にパスワードなどの重要な情報を記述しない方が無難です。
(「逆コンパイルと難読化」参照)


メモ
セキュリティの観点からすれば、「パスワードの変更」というのも重要ですね。
その方法については調べてなかったので、後日まとめようっと。
[ 投稿者:mk3008 at 02:43 | ADO.NET Tips | コメント(0) | トラックバック(0) ]

この記事へのコメント

この記事へのトラックバック

この記事へのトラックバックURL
http://shinshu.fm/MHz/88.44/a03231/0000047311.trackback

この記事の固定URL
http://shinshu.fm/MHz/88.44/archives/0000047311.html

記事へのコメント
 
認証コード:
画像に表示されるコードを半角英数字で入力して下さい。画像が読み難い場合はこちら
簡単演算認証: 4 x 6 =
計算の答えを半角英数字で入力して下さい。
名前: [必須]
URL/Email:
タイトル:
コメント:
※記事・コメントなどの削除要請はこちら