質問: ### 前提・実現したいこと 現在、AccessでDBのメンテナンスを行うツールを作成しており、 権限周りの設定で、質問があります。 以下の様に利用するのを理想としています。 ・専用のサーバに、一般ユーザでログオン ・ログオンしたユーザが、Accessのファイルを開く ・Access内のVBA等を通して、DBの参照や更新を実施 この時の認証方法として、以下の様にしたいと考えています ・認証のID/PWの入力は行わない ・ログオンしたユーザに、DBに対する権限は付与させない (Webアプリであれば、WebConfigに認証情報を登録しておき、 その権限でDBにアクセスするイメージと、同様なことをしたいと 考えております。 ### 発生している問題・エラーメッセージ 現在の対処と、問題点は以下の通りです 1.ODBC の設定で、SQL認証を設定 ・外部データの取り込みで、パスワードを保持するをチェックオン ・リンクを確認し、ファイルを保存して閉じる。 ・Accessを起動し、テーブル等にアクセス → 再接続時に、認証が求められる 2.ODBCの設定で、Windows認証を設定 ・外部データの取り込み時に、DBに接続可能なアカウントで起動し、 外部データの取り込みで、パスワードを保持するをチェックオン (runas で、アカウントを切り替え) ・一般ユーザで、Accessを起動し、テーブル等にアクセス → ログオンしている一般ユーザでアクセスできないとエラー ### 補足情報(言語/FW/ツール等のバージョンなど) 環境等は以下の通りです ログオンサーバのOS:Windows servr 2012 R2 Accessのバージョン:Office 2013 SQL Serverのバージョン:2012 お手数おかけいたしますが、 助言等いただけますよう、よろしくお願いいたします。
回答: リンクテーブルは作成しない。 フォームのレコードソースにIN句で接続するSQLをVBAで設定する。 VBAにはパスワードを設定しておく。 DBのパスワードはSQLのIN句に記述しますが、VBAで記述しますので、VBAのパスワードを知らないと見ることはできない。 あるいは、AccessはACCDEファイルしておくとデザインビューで開けないのでコードを見ることができずバスワードも見られない。 環境がないので試してないですが、これでどうでしょうか。 コード例 'フォームの開く時のイベントプロシージャ ``` Private Sub Form_Open(Cancel As Integer) Me.RecordSource = _ "select * from テーブル名 " & _ "in '' [ODBC;Driver={SQL Server};SERVER=サーバ名;" & _ "Database=データベース名;UID=ログインID;PWD=パスワード]" End Sub ```