diff --git a/catalogue/CatalogueTest.cpp b/catalogue/CatalogueTest.cpp
index ee4d2a6fb0955f37e0bfbd0dd8f832f86b47957d..22bc3c292444ab6d6f617918136ffdad7d640b5a 100644
--- a/catalogue/CatalogueTest.cpp
+++ b/catalogue/CatalogueTest.cpp
@@ -3359,6 +3359,105 @@ TEST_P(cta_catalogue_CatalogueTest, deleteRequesterMountRule_non_existant) {
     exception::UserError);
 }
 
+TEST_P(cta_catalogue_CatalogueTest, modifyRequesterMountPolicy) {
+  using namespace cta;
+
+  ASSERT_TRUE(m_catalogue->getRequesterMountRules().empty());
+
+  const std::string mountPolicyName = "mount_policy";
+  const uint64_t archivePriority = 1;
+  const uint64_t minArchiveRequestAge = 4;
+  const uint64_t retrievePriority = 5;
+  const uint64_t minRetrieveRequestAge = 8;
+  const uint64_t maxDrivesAllowed = 9;
+
+  m_catalogue->createMountPolicy(
+    m_cliSI,
+    mountPolicyName,
+    archivePriority,
+    minArchiveRequestAge,
+    retrievePriority,
+    minRetrieveRequestAge,
+    maxDrivesAllowed,
+    "Create mount policy");
+
+  const std::string anotherMountPolicyName = "another_mount_policy";
+
+  m_catalogue->createMountPolicy(
+    m_cliSI,
+    anotherMountPolicyName,
+    archivePriority,
+    minArchiveRequestAge,
+    retrievePriority,
+    minRetrieveRequestAge,
+    maxDrivesAllowed,
+    "Create another mount policy");
+
+  const std::string comment = "Create mount rule for requester";
+  const std::string diskInstanceName = "disk_instance";
+  const std::string requesterName = "requester_name";
+  m_catalogue->createRequesterMountRule(m_cliSI, mountPolicyName, diskInstanceName, requesterName, comment);
+
+  {
+    const std::list<common::dataStructures::RequesterMountRule> rules = m_catalogue->getRequesterMountRules();
+    ASSERT_EQ(1, rules.size());
+
+    const common::dataStructures::RequesterMountRule rule = rules.front();
+
+    ASSERT_EQ(requesterName, rule.name);
+    ASSERT_EQ(mountPolicyName, rule.mountPolicy);
+    ASSERT_EQ(comment, rule.comment);
+    ASSERT_EQ(m_cliSI.username, rule.creationLog.username);
+    ASSERT_EQ(m_cliSI.host, rule.creationLog.host);
+    ASSERT_EQ(rule.creationLog, rule.lastModificationLog);
+  }
+
+  m_catalogue->modifyRequesterMountPolicy(m_cliSI, diskInstanceName, requesterName, anotherMountPolicyName);
+
+  {
+    const std::list<common::dataStructures::RequesterMountRule> rules = m_catalogue->getRequesterMountRules();
+    ASSERT_EQ(1, rules.size());
+
+    const common::dataStructures::RequesterMountRule rule = rules.front();
+
+    ASSERT_EQ(requesterName, rule.name);
+    ASSERT_EQ(anotherMountPolicyName, rule.mountPolicy);
+    ASSERT_EQ(comment, rule.comment);
+    ASSERT_EQ(m_cliSI.username, rule.creationLog.username);
+    ASSERT_EQ(m_cliSI.host, rule.creationLog.host);
+    ASSERT_EQ(rule.creationLog, rule.lastModificationLog);
+  }
+}
+
+TEST_P(cta_catalogue_CatalogueTest, modifyRequesterMountPolicy_nonExistentRequester) {
+  using namespace cta;
+
+  ASSERT_TRUE(m_catalogue->getRequesterMountRules().empty());
+
+  const std::string mountPolicyName = "mount_policy";
+  const uint64_t archivePriority = 1;
+  const uint64_t minArchiveRequestAge = 4;
+  const uint64_t retrievePriority = 5;
+  const uint64_t minRetrieveRequestAge = 8;
+  const uint64_t maxDrivesAllowed = 9;
+
+  m_catalogue->createMountPolicy(
+    m_cliSI,
+    mountPolicyName,
+    archivePriority,
+    minArchiveRequestAge,
+    retrievePriority,
+    minRetrieveRequestAge,
+    maxDrivesAllowed,
+    "Create mount policy");
+
+  const std::string diskInstanceName = "disk_instance";
+  const std::string requesterName = "requester_name";
+
+  ASSERT_THROW(m_catalogue->modifyRequesterMountPolicy(m_cliSI, diskInstanceName, requesterName, mountPolicyName),
+    exception::UserError);
+}
+
 TEST_P(cta_catalogue_CatalogueTest, createRequesterGroupMountRule) {
   using namespace cta;
 
diff --git a/catalogue/RdbmsCatalogue.cpp b/catalogue/RdbmsCatalogue.cpp
index 0cde6508ce9b67568777e9e19b8e7bfb0334bc52..c6c9ed92e9d91079020042027853033566e8f0a1 100644
--- a/catalogue/RdbmsCatalogue.cpp
+++ b/catalogue/RdbmsCatalogue.cpp
@@ -2091,8 +2091,38 @@ void RdbmsCatalogue::modifyTapeComment(const common::dataStructures::SecurityIde
 //------------------------------------------------------------------------------
 // modifyRequesterMountPolicy
 //------------------------------------------------------------------------------
-void RdbmsCatalogue::modifyRequesterMountPolicy(const common::dataStructures::SecurityIdentity &cliIdentity, const std::string &instanceName, const std::string &requesterName, const std::string &mountPolicy) {
-  throw exception::Exception(std::string(__FUNCTION__) + " not implemented");
+void RdbmsCatalogue::modifyRequesterMountPolicy(const common::dataStructures::SecurityIdentity &cliIdentity,
+  const std::string &instanceName, const std::string &requesterName, const std::string &mountPolicy) {
+  try {
+    const time_t now = time(nullptr);
+    const char *const sql =
+      "UPDATE REQUESTER_MOUNT_RULE SET "
+        "MOUNT_POLICY_NAME = :MOUNT_POLICY_NAME,"
+        "LAST_UPDATE_USER_NAME = :LAST_UPDATE_USER_NAME,"
+        "LAST_UPDATE_HOST_NAME = :LAST_UPDATE_HOST_NAME,"
+        "LAST_UPDATE_TIME = :LAST_UPDATE_TIME "
+      "WHERE "
+        "DISK_INSTANCE_NAME = :DISK_INSTANCE_NAME AND "
+        "REQUESTER_NAME = :REQUESTER_NAME";
+    auto conn = m_connPool.getConn();
+    auto stmt = conn->createStmt(sql, rdbms::Stmt::AutocommitMode::ON);
+    stmt->bindString(":MOUNT_POLICY_NAME", mountPolicy);
+    stmt->bindString(":LAST_UPDATE_USER_NAME", cliIdentity.username);
+    stmt->bindString(":LAST_UPDATE_HOST_NAME", cliIdentity.host);
+    stmt->bindUint64(":LAST_UPDATE_TIME", now);
+    stmt->bindString(":DISK_INSTANCE_NAME", instanceName);
+    stmt->bindString(":REQUESTER_NAME", requesterName);
+    stmt->executeNonQuery();
+
+    if(0 == stmt->getNbAffectedRows()) {
+      throw exception::UserError(std::string("Cannot modify requester mount rule ") + instanceName + ":" +
+        requesterName + " because it does not exist");
+    }
+  } catch(exception::UserError &) {
+    throw;
+  } catch (exception::Exception &ex) {
+    throw exception::Exception(std::string(__FUNCTION__) + " failed: " + ex.getMessage().str());
+  }
 }
 
 //------------------------------------------------------------------------------