diff --git a/security/Security.php b/security/Security.php
index df4fb5ac6..df93e9461 100644
--- a/security/Security.php
+++ b/security/Security.php
@@ -832,6 +832,8 @@ class Security extends Controller {
 	
 	/**
 	 * Checks the database is in a state to perform security checks.
+	 * See {@link DatabaseAdmin->init()} for more information.
+	 * 
 	 * @return bool
 	 */
 	public static function database_is_ready() {
@@ -839,10 +841,21 @@ class Security extends Controller {
 		$requiredTables[] = 'Group';
 		$requiredTables[] = 'Permission';
 		
-		foreach($requiredTables as $table) if(!ClassInfo::hasTable($table)) return false;
+		foreach($requiredTables as $table) {
+			// if any of the tables aren't created in the database
+			if(!ClassInfo::hasTable($table)) return false;
 		
-		return (($permissionFields = DB::fieldList('Permission')) && isset($permissionFields['Type'])) &&
-			(($memberFields = DB::fieldList('Member')) && isset($memberFields['RememberLoginToken']));
+			// if any of the tables don't have all fields mapped as table columns
+			$dbFields = DB::fieldList($table);
+			if(!$dbFields) return false;
+			
+			$objFields = DataObject::database_fields($table);
+			$missingFields = array_diff_key($objFields, $dbFields);
+			
+			if($missingFields) return false;
+		}
+		
+		return true;
 	}
 	
 	/**
diff --git a/tests/security/SecurityTest.php b/tests/security/SecurityTest.php
index 5adf20c5e..00ef762a2 100644
--- a/tests/security/SecurityTest.php
+++ b/tests/security/SecurityTest.php
@@ -261,6 +261,19 @@ class SecurityTest extends FunctionalTest {
 		$this->assertEquals($attempt->Email, 'sam@silverstripe.com');
 		$this->assertEquals($attempt->Member(), $member);
 	}
+	
+	function testDatabaseIsReadyWithInsufficientMemberColumns() {
+		// Assumption: The database has been built correctly by the test runner,
+		// and has all columns present in the ORM
+		DB::getConn()->renameField('Member', 'Email', 'Email_renamed');
+		
+		// Email column is now missing, which means we're not ready to do permission checks
+		$this->assertFalse(Security::database_is_ready());
+		
+		// Rebuild the database (which re-adds the Email column), and try again
+		$this->resetDBSchema(true);
+		$this->assertTrue(Security::database_is_ready());
+	}
 
 	/**
 	 * Execute a log-in form using Director::test().