Security-Process-MS-Access-Database-Level-1

Stop Publishing Your Access Database with Risk — Security Process Level 1

When you publish or share your Microsoft Access database, it is exposed in more ways than most developers realize. Your raw data is open, your VBA code is readable, your forms and objects are editable, and anyone who knows a simple keyboard shortcut can bypass all your protections. This step-by-step guide walks through the exact process shown in the SkillHeader video — from setting a database password in exclusive mode, to splitting the database, to hiding all objects, blocking the Shift key bypass, and understanding what ACCDE conversion does. Follow each step in order and your database will be properly protected before it ever leaves your hands.

Why Every Published Access Database Needs Security Layers

Before we get into the steps, it is worth being clear about what the real risks are. When you share or deploy a Microsoft Access database without any security, here is what any user with basic Access knowledge can do:

  • Open your tables directly — viewing, editing, or deleting raw records with no restriction
  • Read your VBA code — all your logic, passwords, formulas, and automation are visible in the module editor
  • Open forms in Design View — seeing exactly how your interface was built and copying or modifying it
  • Delete or rename database objects — breaking your application entirely
  • Import your tables into a new blank database — effectively stealing your data structure and all records
  • Copy and redistribute your work — months of development can be taken with a single file copy

The goal of this guide is to systematically close each of these gaps, layer by layer, exactly as shown in the SkillHeader video. Each step builds on the previous one — and each one on its own has both strengths and limitations that you need to understand.

There is no single perfect security method

Every security layer in Access has a drawback. The professional approach is to stack multiple layers together so that even if one is bypassed, the others still hold. This video and guide walk through that exact layered approach.

Step 1 — Set a Database Password Using Exclusive Mode

🔐 Layer 1: File-Level Protection

The first and most fundamental layer of protection is adding a password to the database file itself. When a password is set, Access also encrypts the raw data inside the file using the AES-256 encryption standard — meaning the file is completely unreadable even if someone opens it with a hex editor or a third-party tool.

Here is the critical detail most people miss: you cannot set a database password the normal way. You must open the database in Exclusive Mode first. This is a special access mode that ensures nobody else has the file open at the same time — because Access needs sole control of the file to apply encryption.

Why Exclusive Mode is required

Access is designed for multi-user environments — multiple people can have the same database open simultaneously. If you tried to encrypt a file that someone else also had open, the encryption could corrupt their session or create data inconsistencies. Exclusive Mode locks everyone else out for the duration of the operation, making it safe to apply the password.

How to set the database password step by step

1

Close the database completely if it is currently open. You cannot switch to Exclusive Mode while it is already open in normal mode.

2

Open Microsoft Access. On the start screen, click File → Open → Browse and navigate to your database file — but do not double-click to open it yet.

3

Single-click the file to select it. Now look at the Open button at the bottom right of the dialog — click the small dropdown arrow next to it. From the dropdown menu, choose “Open Exclusive”.

4

The database opens in Exclusive Mode. Now go to File → Info in the ribbon. You will see the option “Encrypt with Password”. Click it.

5

The Set Database Password dialog appears. Type your password in the Password field, then type it again in the Verify field to confirm. Click OK.

6

You may see a warning about row-level locking. Click OK to dismiss it. The password is now applied. Close and reopen the database — you will be prompted for the password immediately.

Back up before you set any password

Microsoft has no password recovery mechanism for Access. If you lose or forget the password, the database is permanently inaccessible. Always keep an unprotected backup copy in a secure location before setting any password. Store the password in a password manager, not on a sticky note.

What this protection actually does

With a password set, the entire file is encrypted with AES-256. Nobody can open the database, read the data, or even see the table structure without entering the correct password first. This is file-level protection — it works before Access even loads.

Step 2 — Split the Database Into Frontend and Backend

🗂️ Layer 2: Architecture Protection

Once your database has a password, the next step is to split it into two separate files. This is one of the most important architectural decisions in Access development, and it is something most beginners never do — which leaves their data unnecessarily exposed.

Here is the concept:

  • Backend file (YourDB_be.accdb) — contains all the tables and raw data only. This file sits on a server or shared network location. Users never open it directly.
  • Frontend file (YourDB.accdb) — contains all the forms, queries, reports, macros, and VBA code. This is what users actually work with. It connects to the backend tables over a link.

How to split the database using the built-in wizard

1

Open your database in Access. In the ribbon, go to the Database Tools tab.

2

In the Move Data group, click “Access Database”. This launches the Database Splitter wizard.

3

Click “Split Database”. Access will ask you where to save the new backend file. Choose a location — ideally a secure network folder — and give it a name ending in _be (for example, Inventory_be.accdb). Click Split.

4

Access moves all tables to the backend file and replaces them in the frontend with linked table references. You will see a small arrow icon next to each table name in the navigation pane — this means the table is linked, not stored locally.

5

Click OK when the wizard confirms the split is complete. Your frontend now connects to the backend automatically every time it opens.

Why split the database?

When you distribute your frontend to users, your actual data stays on the backend — which you control. Users get the interface but not the raw table file. You can update the frontend (fix bugs, add features) and redistribute it without ever touching the data. Multiple users can also work simultaneously through their own frontend copies.

Step 3 — Link the Password-Protected Backend Tables

🔗 Layer 3: Secure Table Linking

Now that the database is split, the next step is to add a password to the backend file specifically. This is where your data lives — and it needs its own password protection, separate from the frontend.

Follow the same Exclusive Mode process from Step 1 — but this time, open the backend file (_be.accdb) exclusively and set its password. Once the backend is password-protected, the frontend needs to be updated to connect using that password.

How to re-link tables to a password-protected backend

1

Open the frontend file. In the navigation pane, you will notice the linked table icons may now show an error (a warning icon) because the backend is now password-protected and the existing links do not carry the password.

2

Go to External Data → Linked Table Manager in the ribbon. The Linked Table Manager shows all the tables currently linked from the backend.

3

Go to External Data → Linked Table Manager in the ribbon. The Linked Table Manager shows all the tables currently linked from the backend.

4

Access will prompt you to enter the backend file password. Type the password you set in the previous step and confirm. Access will re-establish all the links with the password embedded in the connection.

5

Once re-linked, the frontend opens and connects to the password-protected backend seamlessly. Users of the frontend will never see the backend password prompt — it is stored securely in the link definition.

What this achieves

Even if someone finds the backend file on the server, they cannot open it without its password. Your data is encrypted and locked. The frontend connects to it automatically — users get seamless access without needing to know the backend password.

Drawback — The Table Import Problem

⚠️ Known Limitation

Here is an important limitation of the password-protection approach that the video covers honestly — and that you need to understand before relying on this method alone.

When Access stores the linked table connection in the frontend, it keeps the backend file password embedded in that link definition. This is what allows the frontend to connect automatically without asking the user for the backend password every time. However, it also means that someone with access to the frontend can use that embedded connection to import the backend tables directly into a new, blank Access database.

How this exploit works

1

An attacker creates a new blank Access database.

2

They go to External Data → Import & Link and choose to import from an existing Access database.

3

They point it to your frontend file — the one that has the linked tables. Because the link definition inside the frontend carries the backend password, Access uses it automatically.

4

All backend tables — including their data — are now imported into the new blank database without any password prompt.

🚫 What this means in practice

  • Password-protecting the backend alone does not fully protect against a determined user who has the frontend file
  • The embedded password in the link definition is not visible to normal users — but it can be exploited through the import process
  • This is why password protection alone is never sufficient — it must be combined with the object-hiding and ACCDE layers described below

This is why layered security matters

No single method is foolproof. The database password protects against casual access and encrypts the file. But to prevent the import exploit, you must also restrict what users can do inside the frontend — which is exactly what the next steps address.

Step 4 — Hide the Navigation Pane and All Objects

🗂️ Layer 4: Interface Lockdown

The navigation pane on the left side of Access shows every table, query, form, report, macro, and module in your database. For a finished application that you are distributing to users, this pane should be completely hidden. Users should only ever see the forms you have designed — nothing else.

Hiding the navigation pane serves two purposes: it creates a cleaner, more professional application interface, and it prevents casual users from directly accessing tables, running raw queries, or modifying your objects.

Method A — Hide via Access Options (Application-Level)

1

With your database open, go to File → Options. The Access Options window opens.

2

Click Current Database in the left panel. This section controls settings that are specific to this database file.

3

Under the Navigation section, uncheck “Display Navigation Pane”. This hides the entire left panel when the database opens.

4


While in the same section, also set a Display Form under Application Options — this is the form that opens automatically when the database starts, so users land directly in your application instead of a blank screen.

5

Click OK. Close and reopen the database. The navigation pane is now gone — users see only your startup form.

Method B — Hide individual objects inside the navigation pane

For extra control, you can also hide individual objects — specific tables, queries, or forms — within the navigation pane itself. This is useful if you want to hide certain developer objects while still showing the navigation pane.

1

Right-click the object you want to hide in the navigation pane and select “View Properties” (or “Object Properties” in older versions).

2

Check the “Hidden” checkbox and click OK. The object disappears from the navigation pane.

3

To verify, right-click the top of the navigation pane and choose Navigation Options. Make sure “Show Hidden Objects” is unchecked. If it is checked, hidden objects are still visible to all users.

Hiding vs. deleting

Hiding an object does not remove it — it only makes it invisible in the navigation pane. The object still exists, still runs, and still works when called by your forms and code. This is exactly what you want — your forms still call queries and open reports normally, but users cannot see or access those objects directly.

The F11 Key Problem

⚠️ Known Limitation

You have now hidden the navigation pane. You feel secure. But there is a problem — a single keystroke undoes all of it.

Pressing F11 on the keyboard toggles the navigation pane open and closed in Microsoft Access. This is a built-in keyboard shortcut that has been in Access for decades. Any user — even without any Access knowledge — can accidentally or intentionally press F11 and bring back the entire navigation pane, making every table, query, and form visible again.

F11 bypasses your hidden navigation pane completely

Even if you have unchecked “Display Navigation Pane” in Options, the F11 key will toggle it back open. This means a user can press F11, see all your objects, right-click a table, and open it directly — completely bypassing the professional interface you built.

The good news is that this is also solvable — but the solution lives in the next layer: the Shift key bypass method and how to disable it. The F11 problem is essentially a sub-problem of the same root cause, which we address below.

The Shift Key Bypass — and How to Block It with VBA

🔧 Advanced Fix

There is a second, even more powerful bypass that is built directly into Microsoft Access and has been there since the early versions. When you open an Access database while holding down the Shift key, Access ignores all your startup settings entirely.

This means: no startup form, navigation pane fully visible, all objects accessible, all your security settings bypassed — with a single keyboard shortcut that takes less than a second. Any experienced Access user knows this trick. It is documented publicly. And by default, it works on every Access database.

What the Shift key bypass disables

  • Your startup form — the database opens to a blank screen with the full navigation pane
  • Your hidden navigation pane setting — it appears with all objects visible
  • Your hidden objects — depending on settings, they may become accessible
  • Any AutoExec macros you have set to run on startup
  • Your entire application interface — bypassed completely

This affects all the work you have done so far

Everything in Steps 4 and the navigation hiding setup can be bypassed by holding Shift while opening. A password still protects the file from being opened at all — but once the password is entered, the Shift bypass works. This is why you must disable it.

How to disable the Shift key bypass using VBA

Access does not provide a checkbox or menu option to disable the Shift bypass. You have to do it through a small piece of VBA code that modifies the database’s startup properties. Here is the process:

1

Open your database. Press Alt + F11 to open the VBA editor (the Visual Basic for Applications window).

2

In the VBA editor, go to Insert → Module to create a new standard module.

3

Copy and paste the following procedure into the module:

Sub DisableShiftBypass()
  Dim db As DAO.Database
  Dim prop As DAO.Property
  Set db = CurrentDb()
  On Error Resume Next
  db.Properties("AllowBypassKey") = False
  If Err.Number <> 0 Then
    Set prop = db.CreateProperty("AllowBypassKey", dbBoolean, False)
    db.Properties.Append prop
  End If
  MsgBox "Shift bypass has been disabled."
End Sub

!

Place your cursor anywhere inside the procedure and press F5 to run it. You will see a confirmation message box when it has completed successfully.

5


Close the VBA editor and save your database. The Shift key bypass is now disabled. From this point on, holding Shift while opening the database has no effect — your startup settings are enforced every time.

How to re-enable the bypass (for yourself as developer)

If you need to re-enable the Shift bypass later for your own development work, run the same procedure with False changed to True. Keep a developer copy of your database where the bypass is always enabled — so you can access the navigation pane freely for editing. Only disable it in the copy you distribute to users.

Important: disable the bypass AFTER you finish development

If you disable the Shift bypass while you are still building the database and then forget your own access method, you can lock yourself out of your own development environment. Always keep a separate, unprotected developer copy for editing purposes.

Intro to ACCDE — The Final Layer of Protection

🛡️ Layer 5: Code and Design Lock

Even with all the layers applied so far — database password, split architecture, password-protected backend, hidden navigation pane, and Shift bypass disabled — there is still one significant gap: your VBA code and form designs are still visible and editable.

If someone opens your database (having entered the password), they can still press Alt + F11 to open the VBA editor and read every line of your code. They can right-click a form and open it in Design View, seeing exactly how you built it. All your intellectual property — the logic, the automation, the custom functions — is exposed.

This is where ACCDE comes in. Converting your database to an ACCDE file is the step that locks all of this down permanently.

What ACCDE does

  • Compiles all VBA code and removes the source code from the file — users can run the code but cannot read, edit, or copy it
  • Locks all forms and reports — Design View is completely disabled for every form and report in the database
  • Removes module editing — the VBA editor cannot be used to view or modify any procedures
  • Slightly improves performance — compiled code runs faster than interpreted source code
  • Reduces file size — source code removed from the compiled binary reduces the overall file footprint

What ACCDE does NOT do

  • It does not prevent users from opening or reading tables directly via the navigation pane
  • It does not add a password to the file — the file still opens without a password unless you added one separately
  • It does not prevent the import exploit described in Step 3 — that still requires the navigation pane to be hidden and the Shift bypass disabled

ACCDE is a one-way conversion

Once you save a database as ACCDE, you cannot convert it back to ACCDB. The source code is gone permanently from that file. Always keep your original .accdb file as your development copy, and create a fresh ACCDE each time you release an update. The ACCDE is your distribution copy — the ACCDB is your development copy. Never mix them up.

The full process of creating and working with ACCDE files — including how to combine it with all the previous security steps — is covered in detail in the next video in the SkillHeader Security Series.

Full Security Process Summary

Here is the complete layered security process from this video, in the order you should apply it:

1

Set database password in Exclusive Mode
Encrypts the file with AES-256. Nobody can open it without the password. Apply to both frontend and backend.

2

Split into frontend and backend
Separates data from interface. Users get the frontend; the raw data file stays on a controlled location.

3

Password-protect the backend and relink tables
Backend data is encrypted. Frontend re-links with embedded password — users never see a backend prompt.

!

Understand the import drawback
The embedded link password can be used to import tables via a new blank database. Address this with the next layers.

4

Hide the navigation pane and all objects
Users see only your application interface. Tables, queries, and code are not visible in normal use.

!

F11 and Shift bypass — both expose your objects
F11 toggles the nav pane. Shift key bypasses all startup settings. Both must be addressed.

5

Disable the Shift bypass with VBA
Set AllowBypassKey = False in a VBA module. Run it once. Shift key no longer bypasses your startup settings.

6

Convert to ACCDE before distributing
Locks VBA code and form designs permanently. No Design View, no code reading. Compile fresh for every release.

Security LayerBlocks file openingEncrypts dataHides objectsLocks code
Database password (Exclusive Mode)YesYesNoNo
Split + password-protected backendPartialYesNoNo
Hidden navigation paneNoNoPartialNo
Shift bypass disabled (VBA)NoNoYesNo
ACCDE conversionNoNoPartialYes
All layers combinedYesYesYesYes
Security LayerBlocks file openingEncrypts dataHides objectsLocks code
Database password (Exclusive Mode)YesYesNoNo
Split + password-protected backendPartialYesNoNo
Hidden navigation paneNoNoPartialNo
Shift bypass disabled (VBA)NoNoYesNo
ACCDE conversionNoNoPartialYes
All layers combinedYesYesYesYes
  • Complete Security Checklist — Before You Publish
  • Database opened in Exclusive Mode before setting the password
  • Password backed up securely before encrypting the file
  • Database split into frontend (.accdb) and backend (_be.accdb)
  • Backend file password-protected with its own Exclusive Mode password
  • Frontend tables re-linked via Linked Table Manager with backend password
  • Import exploit risk understood — additional layers applied to mitigate
  • Navigation pane hidden via File → Options → Current Database
  • Startup form set so users land in your application interface
  • Individual objects hidden where needed (right-click → View Properties → Hidden)
  • F11 toggle risk addressed by disabling Shift bypass
  • AllowBypassKey set to False via VBA module — Shift bypass disabled
  • Developer copy kept separate — bypass enabled for your own editing
  • Database compiled and saved as ACCDE for final distribution
  • ACCDE tested by downloading it fresh and opening on a clean machine

Frequently Asked Questions

What happens if I forget to open in Exclusive Mode before setting the password?

The “Encrypt with Password” option will be greyed out in the File → Info menu. Access will not let you set a password on a database that is open in shared mode. Close it, reopen it using “Open Exclusive” from the Open dialog dropdown, and the option will become available.

Can the Shift key bypass still work after I disable it with VBA?

No — once you set AllowBypassKey = False and save the database, the Shift key has no effect when opening. The bypass is completely blocked. The only way to re-enable it is to run the VBA code again with the value set back to True — which requires opening the database and accessing the VBA editor, which requires the password.

Does hiding the navigation pane affect how my forms and queries work?

Not at all. Hiding the navigation pane is purely a visual change. All your forms, queries, reports, and macros continue to function exactly as before — they just are not listed visibly for users to click on directly. Your code can still open any form, run any query, and call any function normally.

Why should I split the database if I am only sharing it with one or two people?

Even with a small team, splitting is good practice for two reasons: it allows you to update the frontend (fix bugs, change the interface) without touching the data, and it keeps the raw data file in a controlled location separate from the application code. It also makes moving to a SQL Server backend much easier when your team grows.

Is the ACCDE conversion covered in this video?

The video introduces ACCDE as the next security step and explains what it does — but the full ACCDE process is covered in the next video in the SkillHeader Security Series. This video focuses on building the foundation: password, split, hiding, and Shift bypass — before ACCDE is applied on top.

What if a user already knows the database password and the Shift bypass is disabled — can they still see the VBA code?

Yes — if you have not yet compiled to ACCDE. In a regular .accdb file, pressing Alt + F11 opens the VBA editor where all your code is readable. This is why ACCDE conversion is the essential final step — it permanently removes the source code from the distributed file so it cannot be read even by someone with full password access.

Learn MS Access with SkillHeader

Watch step-by-step tutorials, complete project builds, and practical database courses on the SkillHeader YouTube channel and website. From beginner basics to advanced VBA automation — all free.