diff --git a/modules/user/user.module b/modules/user/user.module
index 1593468d21a32d28af8a0ba1199cf8ea3623ff41..cf1db1f1e00cd36eb35d81f759e863d3d337382d 100644
--- a/modules/user/user.module
+++ b/modules/user/user.module
@@ -3213,17 +3213,15 @@ function user_modules_installed($modules) {
   // Assign all available permissions to the administrator role.
   $rid = variable_get('user_admin_role', 0);
   if ($rid) {
+    $permissions = array();
     foreach ($modules as $module) {
-      if ($permissions = module_invoke($module, 'permission')) {
-        foreach (array_keys($permissions) as $permission) {
-          db_insert('role_permission')
-            ->fields(array(
-              'rid' => $rid,
-              'permission' => $permission,
-            ))->execute();
-        }
+      if ($module_permissions = module_invoke($module, 'permission')) {
+        $permissions = array_merge($permissions, array_keys($module_permissions));
       }
     }
+    if (!empty($permissions)) {
+      user_role_grant_permissions($rid, $permissions);
+    }
   }
 }