diff --git a/modules/update/update.install b/modules/update/update.install
index 70fb6c3..612fbcf 100644
--- a/modules/update/update.install
+++ b/modules/update/update.install
@@ -188,3 +188,23 @@ function update_update_7001() {
 /**
  * @} End of "addtogroup updates-6.x-to-7.x"
  */
+
+/**
+ * Implements hook_update_N().
+ *
+ * Grant 'update notification' permission to users with permission to
+ * 'administer site configuration'.
+ *
+ * Up to now everyone with 'administer site configuration' permission
+ * receives error messages on admin pages whenever there are security updates
+ * to Drupal or contrib projects. As of update 7002, these notifications can be
+ * enabled or disabled by granting/revoking 'update notification' permission.
+ * This update grants 'update notification' permission to anyone who has had
+ * this permission through 'administer site configuration' in the past.
+ */
+function update_update_7002() {
+  $roles = user_roles(FALSE, 'administer site configuration');
+  foreach (array_keys($roles) as $rid) {
+    user_role_grant_permissions($rid, array('update notification'));
+  }
+}
diff --git a/modules/update/update.module b/modules/update/update.module
index a2d705a..a7bf4b8 100644
--- a/modules/update/update.module
+++ b/modules/update/update.module
@@ -131,25 +131,29 @@ function update_init() {
     }
     module_load_install('update');
     $status = update_requirements('runtime');
-    foreach (array('core', 'contrib') as $report_type) {
-      $type = 'update_' . $report_type;
-      if (!empty($verbose)) {
-        if (isset($status[$type]['severity'])) {
-          if ($status[$type]['severity'] == REQUIREMENT_ERROR) {
-            drupal_set_message($status[$type]['description'], 'error');
-          }
-          elseif ($status[$type]['severity'] == REQUIREMENT_WARNING) {
-            drupal_set_message($status[$type]['description'], 'warning');
+    // If user has permission 'update notification', display any relevant
+    // messages with drupal_set_message().
+    if (user_access('update notification')) {
+      foreach (array('core', 'contrib') as $report_type) {
+        $type = 'update_' . $report_type;
+        if (!empty($verbose)) {
+          if (isset($status[$type]['severity'])) {
+            if ($status[$type]['severity'] == REQUIREMENT_ERROR) {
+              drupal_set_message($status[$type]['description'], 'error');
+            }
+            elseif ($status[$type]['severity'] == REQUIREMENT_WARNING) {
+              drupal_set_message($status[$type]['description'], 'warning');
+            }
           }
         }
-      }
-      // Otherwise, if we're on *any* admin page and there's a security
-      // update missing, print an error message about it.
-      else {
-        if (isset($status[$type])
-            && isset($status[$type]['reason'])
-            && $status[$type]['reason'] === UPDATE_NOT_SECURE) {
-          drupal_set_message($status[$type]['description'], 'error');
+        // Otherwise, if we're on *any* admin page and there's a security
+        // update missing, print an error message about it.
+        else {
+          if (isset($status[$type])
+              && isset($status[$type]['reason'])
+              && $status[$type]['reason'] === UPDATE_NOT_SECURE) {
+            drupal_set_message($status[$type]['description'], 'error');
+          }
         }
       }
     }
@@ -259,6 +263,19 @@ function update_manager_access() {
 }
 
 /**
+ * Implements hook_permission().
+ */
+function update_permission() {
+  return array(
+    'update notification' => array(
+      'title' => t('Update notification'),
+      'description' => t('Access update notification message. This notification '
+        . 'is displayed on all admin pages when security updates are available for Drupal.'),
+    ),
+  );
+}
+
+/**
  * Implements hook_theme().
  */
 function update_theme() {
diff --git a/modules/update/update.settings.inc b/modules/update/update.settings.inc
index 60ac3ca..c2e5a67 100644
--- a/modules/update/update.settings.inc
+++ b/modules/update/update.settings.inc
@@ -43,7 +43,12 @@ function update_settings($form) {
       'all' => t('All newer versions'),
       'security' => t('Only security updates'),
     ),
-    '#description' => t('You can choose to send e-mail only if a security update is available, or to be notified about all newer versions. If there are updates available of Drupal core or any of your installed modules and themes, your site will always print a message on the <a href="@status_report">status report</a> page, and will also display an error message on administration pages if there is a security update.', array('@status_report' => url('admin/reports/status')))
+    '#description' => t('You can choose to send e-mail only if a security update is available, or to be notified about all newer versions. If there are updates available of Drupal core or any of your installed modules and themes, your site will always print a message on the <a href="@status_report">status report</a> page. Users with permission to receive <a href="@update_notifications">update notifications</a> will see an error message on administration pages if there is a security update.',
+      array(
+        '@status_report' => url('admin/reports/status'),
+        '@update_notifications' => url('admin/people/permissions',
+                                   array('fragment' => 'module-update')),
+      )),
   );
 
   $form = system_settings_form($form);
diff --git a/modules/update/update.test b/modules/update/update.test
index f0c214e..8a6f334 100644
--- a/modules/update/update.test
+++ b/modules/update/update.test
@@ -64,7 +64,7 @@ class UpdateCoreTestCase extends UpdateTestHelper {
 
   function setUp() {
     parent::setUp('update_test', 'update');
-    $admin_user = $this->drupalCreateUser(array('administer site configuration', 'administer modules'));
+    $admin_user = $this->drupalCreateUser(array('administer site configuration', 'administer modules', 'update notification'));
     $this->drupalLogin($admin_user);
   }
 
@@ -226,6 +226,49 @@ class UpdateCoreTestCase extends UpdateTestHelper {
 
 }
 
+class UpdateLimitedPermissionsCoreTestCase extends UpdateTestHelper {
+
+  public static function getInfo() {
+    return array(
+      'name' => 'Update permissions',
+      'description' => "Confirm users without 'update notification' permission will not see security update warnings",
+      'group' => 'Update',
+    );
+  }
+
+  function setUp() {
+    parent::setUp('update_test', 'update');
+    $admin_user = $this->drupalCreateUser(array('access administration pages', 'administer site configuration'));
+    $this->drupalLogin($admin_user);
+  }
+
+  /**
+   * Check the messages at admin page when missing a security update.
+   */
+  function testAdminPageSecurityUpdate() {
+    $this->setSystemInfo7_0();
+
+    // Instead of using refreshUpdateStatus(), set these manually.
+    variable_set('update_fetch_url', url('update-test', array('absolute' => TRUE)));
+    variable_set('update_test_xml_map', array('drupal' => '2-sec'));
+    $this->drupalGet('admin/reports/updates/check');
+
+    // Make sure admin page does NOT warn you you're missing a security update.
+    $this->drupalGet('admin');
+    $this->assertNoText(t('There are updates available for your version of Drupal.'));
+    $this->assertNoText(t('There is a security update available for your version of Drupal.'));
+  }
+
+  protected function setSystemInfo7_0() {
+    $setting = array(
+      '#all' => array(
+        'version' => '7.0',
+      ),
+    );
+    variable_set('update_test_system_info', $setting);
+  }
+}
+
 class UpdateTestContribCase extends UpdateTestHelper {
 
   public static function getInfo() {
@@ -598,7 +641,7 @@ class UpdateTestUploadCase extends UpdateTestHelper {
   public function setUp() {
     parent::setUp('update', 'update_test');
     variable_set('allow_authorize_operations', TRUE);
-    $admin_user = $this->drupalCreateUser(array('administer software updates', 'administer site configuration'));
+    $admin_user = $this->drupalCreateUser(array('administer software updates', 'administer site configuration', 'update notification'));
     $this->drupalLogin($admin_user);
   }
 
