セキュリティとか権限とか
いろいろと accde の配布とか悩んで…いたのでこぱいに聞いてみた。
…そのメモ。(自分用)
…※注意 まだ試していないので、実行するなら自己責任でお願い。
きちんとこぴぺ出来ていないかもしれんし。
まだ microsoft access とか windows に興味ある人向けかな。
■あるフォルダにユーザフルコントロールを付けたい。
icacls を使う bat の例を教えてほしい。
□もちろんです!
icacls を使って特定のフォルダにユーザーの「フルコントロール」権限を付与するバッチファイルの例を以下に示します。
🛠 バッチファイルの例:ユーザーにフルコントロールを付与
@echo off
setlocal
- 対象フォルダのパス(例:C:\TestFolder)
set "TARGET_FOLDER=C:\TestFolder"
- ユーザー名(例:UserName)
set "USER_NAME=UserName"
- フルコントロールを付与
icacls "%TARGET_FOLDER%" /grant "%USER_NAME%:(F)" /T
echo 権限を付与しました。
pause
🔍 解説
• icacls:Windowsのアクセス制御リスト(ACL)を操作するコマンド。
• /grant:指定したユーザーに権限を付与。
• :(F):フルコントロール(Full Control)。
• /T:サブフォルダとファイルにも再帰的に適用。
• %TARGET_FOLDER% と %USER_NAME% は環境変数で、変更しやすくしています。
✅ 注意点
• 実行には管理者権限が必要な場合があります。
• ユーザー名は正確に記述してください(ドメインユーザーの場合は DOMAIN\UserName の形式)。
• フォルダが存在しない場合はエラーになります。
■このフォルダにaccess(accde)ファイルを格納して、管理者権限のないユーザーでも実行できるかな?
access の テーブルは同じフォルダに accdb ファイルとして存在するとして。
□はい、基本的には可能です。ただし、いくつかの条件を満たす必要があります。以下に詳しく説明します。
✅ 実行可能な条件
1. フォルダのアクセス権
• 管理者権限がないユーザーでも .accde ファイルを実行するには、そのフォルダに「読み取りと実行」権限が必要です。
• また、 .accdb ファイルにリンクしている場合は、そのファイルにも「読み取り」権限が必要です。
• icacls を使って、対象フォルダにユーザーまたはグループに対して フルコントロール
または読み取り/実行権限を付与しておくと安心です。
2. Access ランタイムのインストール
• ユーザーのPCに Microsoft Access Runtime がインストールされていれば、.accde ファイルを開いて実行できます。
• フル版の Access がなくても、Runtime で .accde は動作します。
3. リンクテーブルのパス
• .accde ファイルが .accdb のテーブルにリンクしている場合、リンク先のパスが正しく設定されていることが重要です。
• 相対パスでリンクしておくと、同じフォルダに置いた場合に問題が起きにくくなります。
⚠ 注意点
• .accde ファイルは VBA コードがコンパイルされており、編集できません。ユーザーは実行のみ可能です。
• .accdb に書き込みが必要な場合(例:テーブルへの追加・更新)、そのファイルに対しても 書き込み権限が必要です。
• ネットワーク共有フォルダに置く場合は、共有設定とNTFS権限の両方を確認してください。
■フォルダに ユーザーのフルコントロールが付与されていれば読み取りと実行もかねるのでは。
□はい、その通りです 👍
Windows のアクセス制御において、「フルコントロール (F)」権限には「読み取り (R)」「実行 (RX)」「書き込み (W)」「変更 (M)」などのすべての基本権限が含まれています。つまり、ユーザーにフルコントロールを付与すれば、読み取りや実行も当然可能になります。
🔐 権限の階層イメージ
権限 内容
F (Full Control) すべての操作(読み取り、書き込み、実行、削除、権限変更など)
M (Modify) 読み取り、書き込み、削除(権限変更は不可)
RX (Read & Execute) ファイルの読み取りと実行
R (Read) ファイルの内容を読む
W (Write) ファイルの内容を書き換える
✅ 結論
- icacls で /grant ユーザー名:(F) を指定すれば、読み取り・実行も含まれるので、.accde ファイルの実行や .accdb ファイルの
読み取りも問題なく行えます。
- ただし、セキュリティ上の観点からは必要最小限の権限に留めるのが理想です。実行だけでよいなら (RX) にする選択肢もあります。
■最初のフルコントロールの付与の例に(OI)、(CI)は必要ないですか?
□鋭いご指摘です!
(OI)(Object Inherit)と (CI)(Container Inherit)は、アクセス権をサブフォルダやファイルに継承させるためのフラグです。
icacls でフォルダに権限を付与する際、そのフォルダ内のファイルやサブフォルダにも権限を適用したい場合は、
これらの継承フラグを明示的に指定するのがベストです。
✅ (OI)(CI) を使ったバッチの例
@echo off
setlocal
- 対象フォルダ
set "TARGET_FOLDER=C:\TestFolder"
- ユーザー名
set "USER_NAME=UserName"
- フルコントロールを継承付きで付与
icacls "%TARGET_FOLDER%" /grant "%USER_NAME%:(OI)(CI)(F)" /T
echo 継承付きでフルコントロールを付与しました。
pause
🔍 フラグの意味
フラグ 意味
(OI) ファイルに権限を継承(Object Inherit)
(CI) サブフォルダに権限を継承(Container Inherit)
(F) フルコントロール(Full Control)
📝 補足
- /T オプションを使うことで、既存のサブフォルダやファイルにも再帰的に適用されます。
- (OI)(CI) を付けることで、今後作成されるファイルやフォルダにも自動的に権限が継承されるようになります。
- これを付けないと、フォルダ自体には権限があるが、中のファイルには適用されないという事態が起こることがあります。
つまり、安全かつ確実に権限を適用したいなら (OI)(CI) を付けるのが推奨です。さらに細かく制御したい場合は (IO)(継承のみ)なども使えますが、基本は (OI)(CI) で十分です。
他にも ACL の確認や削除、特定のグループへの付与などもできますよ。必要なら続けてご案内します!
■なるほど、このバッチを処理することで、アクセスで作ったアプリを配布(管理者権限無しでも実行できる)することが出来ますね。
□その通りです!🎯
このバッチでフォルダに (OI)(CI)(F) のフルコントロール権限を付与することで、管理者権限のないユーザーでも Access アプリ(.accde)を問題なく実行できる環境が整います。特に以下のような構成であれば、配布・運用がスムーズになります:
✅ Access アプリ配布の構成例
- 📁 共有フォルダ(例:\\Server\AccessApp)
- MyApp.accde(実行ファイル)
- Data.accdb(リンクテーブル用のデータファイル)
- 👥 ユーザー権限
- icacls で (OI)(CI)(F) を付与済み → 読み取り・実行・書き込みすべてOK
- 必要に応じて、accdb だけに書き込み権限を付け、accde は読み取り専用にすることも可能
- 🧩 Access Runtime
- ユーザーPCにインストール済み → .accde をダブルクリックで起動可能
🚀 配布のメリット
- 管理者権限不要:権限設定済みフォルダに置くだけで実行可能
- コード保護:.accde 形式で VBA やフォームの編集不可
- データ分離:accdb にデータを分離することで、メンテナンスやバックアップが容易
■アクセスのvbaでレジストリに書き込むより、管理が楽なように思えます。
□まさにその通りです!
Access VBA でレジストリに書き込む方法は、たしかに柔軟性がありますが、管理者権限が必要になることが多く、
環境依存性も高くなるため、配布や運用の面ではハードルが上がります。
🔄 レジストリ vs フォルダベースの管理
比較項目 レジストリ管理 フォルダベース管理(accde + accdb)
権限 管理者権限が必要な場合あり ユーザー権限でOK(ACL設定済みなら)
環境依存 PCごとのレジストリに依存 フォルダ構成で一元管理可能
配布の手間 レジストリ操作のVBAやインストーラが必要 ファイルをコピーするだけで済む
保守性 レジストリの変更履歴が追いにくい ファイル単位でバージョン管理しやすい
セキュリティ 誤操作でシステムに影響する可能性あり アプリ単位で制御しやすい
✅ フォルダベース管理のメリット
• ユーザー権限だけで動作可能: icaclsで適切に設定すれば、特別な権限は不要。
• 複数ユーザーでの運用が簡単:共有フォルダに置くだけで全員が使える。
• 設定の見える化:レジストリのように隠れていないので、トラブル時の対応がしやすい。
• Access Runtimeとの相性抜群:インストール済みならすぐに .accde を実行可能。
もちろん、レジストリを使うことでユーザー設定や環境変数のような使い方もできますが、配布や保守のしやすさを重視するなら、
フォルダベースの構成が断然おすすめです。
■先ほどのバッチを ユーザーをログインしているユーザー、フォルダをこのバッチを実行しているフォルダとすることができますか?
□はい、それは可能です!バッチファイル内で「現在ログインしているユーザー名」と「このバッチファイルが存在するフォルダ
(=実行しているフォルダ)」を取得して、icacls に渡すことができます。
🛠 実行ユーザーと実行フォルダを使ったバッチの例
@echo off
setlocal
- ログインしているユーザー名を取得
set "USER_NAME=%USERNAME%"
- このバッチファイルが存在するフォルダを取得
set "TARGET_FOLDER=%~dp0"
- フルコントロールを継承付きで付与
icacls "%TARGET_FOLDER%" /grant "%USER_NAME%:(OI)(CI)(F)" /T
echo %USER_NAME% に %TARGET_FOLDER% のフルコントロールを付与しました。
pause
🔍 解説
• %USERNAME%:現在ログインしているユーザー名を取得。
• %~dp0:このバッチファイルが存在するフォルダのパスを取得(末尾に \ が付く)。
• %USER_NAME%:(OI)(CI)(F):そのユーザーに継承付きフルコントロールを付与。
• /T:サブフォルダとファイルにも再帰的に適用。
✅ 補足
• このバッチを Access アプリと同じフォルダに置いて実行すれば、配布先のユーザーが自分で権限を設定できるようになります。
• ネットワーク共有フォルダで使う場合は、%USERNAME% がドメインユーザーかローカルユーザーかに注意してください。
この仕組みを使えば、Access アプリの配布と権限設定が一括でできて、運用がとても楽になりますね。
実用性と管理性を重視する方にはぴったりの方法です!他にも自動化したいことがあれば、ぜひ教えてください。
■最近、配布する時に使う圧縮ファイル(.zip)がファイルのプロパティの全般タブのセキュリティのチェックを入れないと
正しく展開されない、展開されても動作しないということがあります。
普通のユーザー権限、パソコンを使い慣れていない方にその作業をしていただくのに何か代わりになる方法はないでしょうか。
□はい、PowerShellを使って「セキュリティブロック(Zone.Identifier)」を自動解除する方法が有効です。
これにより、ユーザーがプロパティ画面で手動操作する必要がなくなります。
✅ 解決策:PowerShellで一括ブロック解除
Windowsでは、インターネット経由で取得したZIPファイルを展開すると、ファイルに「Zone.Identifier」という
代替データストリームが付き、セキュリティブロックがかかることがあります。
これが原因でAccessファイルなどが正しく動作しないことがあります。
🛠 PowerShellスクリプトの例
# 展開先フォルダのパス(例:C:\AccessApp)
$targetFolder = "C:\AccessApp"
# フォルダ内のすべてのファイルのブロックを解除
Get-ChildItem -Path $targetFolder -Recurse | Unblock-File
• このスクリプトを .ps1 ファイルとして保存し、配布後に実行してもらうことで、すべてのファイルのセキュリティブロックを
一括解除できます。
• Unblock-File は Windows 標準の PowerShell コマンドレットです。
🧩 実行方法(ユーザー向けに簡単に)
1. ZIPを展開したフォルダにこの .ps1 ファイルを同梱。
2. フォルダ内で Shift + 右クリック → 「PowerShell ウィンドウをここで開く」
3. 以下のように入力して実行:
Powershell
.\unblock.ps1
※ .ps1 ファイルの実行が制限されている環境では、PowerShellの実行ポリシーを一時的に変更する必要があります
(例:Set-ExecutionPollcy -Scope Process -ExecutionPollcy Bypass )。
🔄 代替案:ZIP作成時にZone.Identifierを除去
• ZIPを作成する前に、元ファイルの「セキュリティのチェック」を外しておくと、展開後にブロックされないことがあります。
• もしくは、Explzhなどの圧縮ツールを使うと、Zone.Identifierを除去して圧縮する設定が可能です。
🧠 補足
• .accde や .dll などの実行ファイルは特にブロックの影響を受けやすいです。
• PowerShellでの一括解除は、パソコン操作に不慣れな方でも簡単に実行できるように案内しやすい方法です。