Search Tools Links Login

Create secure Access database

Posted: 2003-06-01
By: ArchiveBot
Viewed: 101

Filed Under:

Visual Basic 6

No attachments for this post


This sample shows how to secure Access database using ADOX and SIDs. In apps where database is created on-the-fly from code its only way to prevent your database from being modified.

Original Author: Grzegorz P.

Code

Public Function SecureAccessDB( _
                ByVal DatabaseFileName As String, _
                ByVal SystemMDWFileName As String, _
                ByVal UID As String, _
                ByVal PWD As String, _
                ByVal GroupName As String, _
                ByVal GroupPID As String, _
                ByVal UserID As String, _
                ByVal UserPWD As String, _
                ByVal UserPID As String) _
                As Boolean
'********************************************************************
'Inputs:
' DatabaseFileName - DB to secure file name
' SystemMDWFileName - System.mdw file name
' UID - current owner name (usually 'admin')
' PWD - current owner password (usually empty string)
' GroupName - new group to create
' GroupPID - new group PID
' UserID - new user account to create
' UserPWD - new user password
' UserPID - new user PID
'
'Returns:
'True - if no errors occurs
'False - otherwise
'
'References:
'ADO and ADOX libraries ver. 2.8
'*********************************************************************

Dim catDatabase As ADOX.Catalog
Dim tblTemp As ADOX.Table
Dim cmdCreator As ADODB.Command
Dim strTableName As String
Dim strConnString As String
'if DB was formerly secured by us, then we can login to DB using our user account and is nothing to do
  strConnString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
          "Data Source=" & DatabaseFileName & ";" & _
          "User ID=" & UserID & ";" & _
          "Password=" & UserPWD & ";" & _
          "jet oledb:system database=" & SystemMDWFileName
  Set catDatabase = New ADOX.Catalog
  Err.Clear
  On Error Resume Next
    catDatabase.ActiveConnection = strConnString
    If Err.Number = 0 Then 'can login
      Set catDatabase = Nothing
      SecureAccessDB = True
      Exit Function
     Else 'can't login
      Set catDatabase = Nothing
      SecureAccessDB = False
    End If
    'secure DB
  On Error GoTo EH_SecureAccessDB
  'login to DB using current owner account
  strConnString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
          "Data Source=" & DatabaseFileName & ";" & _
          "User ID=" & UID & ";" & _
          "Password=" & PWD & ";" & _
          "jet oledb:system database=" & SystemMDWFileName
  'create new group and user account
  Set cmdCreator = New ADODB.Command
  cmdCreator.ActiveConnection = strConnString
  cmdCreator.CommandText = "CREATE GROUP " & GroupName & " " & GroupPID & ";"
  cmdCreator.Execute
  cmdCreator.CommandText = "CREATE USER " & UserID & " " & UserPWD & " " & UserPID & ";"
  cmdCreator.Execute
  Set cmdCreator = Nothing
  Set catDatabase = New ADOX.Catalog
  catDatabase.ActiveConnection = strConnString
  With catDatabase
    .Users(UserID).Groups.Append "Admins"
    .Users(UserID).Groups.Append GroupName
    .Users(UserID).SetPermissions "", adPermObjDatabase, adAccessGrant, adRightMaximumAllowed
    .Users(UserID).SetPermissions Null, adPermObjTable, adAccessGrant, adRightMaximumAllowed
    .Groups(GroupName).SetPermissions "", adPermObjDatabase, adAccessGrant, adRightMaximumAllowed
    .Groups(GroupName).SetPermissions Null, adPermObjTable, adAccessGrant, adRightMaximumAllowed
    'Grant/Revoke rights to user tables
    For Each tblTemp In .Tables
      If tblTemp.Type = "TABLE" Then 'keep Access and System tables unchanged
        strTableName = tblTemp.Name
        'Change owner of each table
        .SetObjectOwner strTableName, adPermObjTable, UserID
        'Grant all rights to MyUser and MyGroup
        .Users(UserID).SetPermissions strTableName, adPermObjTable, adAccessGrant, adRightMaximumAllowed
        .Groups(GroupName).SetPermissions strTableName, adPermObjTable, adAccessGrant, adRightMaximumAllowed
        'Revoke all rights to admin account and Admins/Users groups
        .Users("admin").SetPermissions strTableName, adPermObjTable, adAccessRevoke, adRightMaximumAllowed
        .Groups("Admins").SetPermissions strTableName, adPermObjTable, adAccessRevoke, adRightMaximumAllowed
        .Groups("Users").SetPermissions strTableName, adPermObjTable, adAccessRevoke, adRightMaximumAllowed
      End If
    Next 'tblTemp
    'Revoke all database rights to admin account and Admins/Users groups
    .Groups("Users").SetPermissions Null, adPermObjTable, adAccessRevoke, adRightMaximumAllowed
    .Groups("Users").SetPermissions "", adPermObjDatabase, adAccessRevoke, adRightMaximumAllowed
    .Users("admin").SetPermissions Null, adPermObjTable, adAccessRevoke, adRightMaximumAllowed
    .Users("admin").SetPermissions "", adPermObjDatabase, adAccessRevoke, adRightMaximumAllowed
    .Groups("Admins").SetPermissions Null, adPermObjTable, adAccessRevoke, adRightMaximumAllowed
    .Groups("Admins").SetPermissions "", adPermObjDatabase, adAccessRevoke, adRightMaximumAllowed
  End With 'catDatabase
  Set catDatabase = Nothing
  Set tblTemp = Nothing
  SecureAccessDB = True
Exit Function
EH_SecureAccessDB:
  Set cmdCreator = Nothing
  Set catDatabase = Nothing
  Set tblTemp = Nothing
  SecureAccessDB = False
End Function


Comments on this post

No comments have been added for this post.

You must be logged in to make a comment.