Rob, another way to do this is using a startup option. The following function looks for /cmd "word" as a startup option on the shortcut. There are two words set - one to disable the Shift key, and one to enable it. Your AutoExec macro needs to call this function prior to doing anything else. In your macro, if CheckCommandLine = True, quit Access.
To disable the Shift key, your administrators create a shortcut to your database followed by /cmd "lock". To enable the Shift key again, you replace this with /cmd "debug".
If you secure your database properly, you may also want to test for the "Admin" user. Once you've demoted this to basic user level, it usually indicates that someone has tried to open the database bypassing the security. Your routine could quit the database if the Admin user attempts to open it, rather than a valid user from the workgroup file.
Function CheckCommandLine() as Boolean
Dim dbs As Database
Dim prp As Property
Dim ysnValue As Boolean
Dim strProperty As String
Dim strMessage As String
Const conPropNotFoundError = 3270
CheckCommandLine = False
' Check value returned by Command function.
' Create property if it doesn't exist
Set dbs = CurrentDb
strProperty = "AllowBypassKey"
On Error GoTo Change_Err
Select Case UCase(Command)
Case "DEBUG"
ysnValue = True
strMessage = "Database is now unlocked. Remove the '/cmd' option from the " & _
"startup line and launch the database again."
Case "LOCK"
ysnValue = False
strMessage = "Database is now locked. Remove the '/cmd' option from the " & _
"startup line and launch the database again."
Case Else
GoTo Change_Bye
End Select
CheckCommandLine = True
dbs.Properties(strProperty) = ysnValue
MsgBox strMessage, vbInformation
Change_Bye:
Exit Function
Change_Err:
' Property not found.
If Err = conPropNotFoundError Then
Set prp = dbs.CreateProperty(strProperty, dbBoolean, ysnValue)
dbs.Properties.Append prp
Resume Next
End If
End Function