def METHOD_NAME(self, privilege, grant_target_name, user_name, node=None):
    """Check that user is only able to execute `SHOW CREATE USER` when they have the necessary privilege.
    """
    exitcode, message = errors.not_enough_privileges(name=user_name)
    if node is None:
        node = self.context.node
    with Scenario("SHOW CREATE USER without privilege"):
        target_user_name = f"target_user_{getuid()}"
        with user(node, target_user_name):
            with When("I grant the user NONE privilege"):
                node.query(f"GRANT NONE TO {grant_target_name}")
            with And("I grant the user USAGE privilege"):
                node.query(f"GRANT USAGE ON *.* TO {grant_target_name}")
            with Then("I check the user can't use SHOW CREATE USER"):
                node.query(f"SHOW CREATE USER {target_user_name}", settings=[("user",user_name)],
                    exitcode=exitcode, message=message)
    with Scenario("SHOW CREATE USER with privilege"):
        target_user_name = f"target_user_{getuid()}"
        with user(node, target_user_name):
            with When(f"I grant {privilege}"):
                node.query(f"GRANT {privilege} ON *.* TO {grant_target_name}")
            with Then("I check the user can use SHOW CREATE USER"):
                node.query(f"SHOW CREATE USER {target_user_name}", settings = [("user", f"{user_name}")])
    with Scenario("SHOW CREATE USER with revoked privilege"):
        target_user_name = f"target_user_{getuid()}"
        with user(node, target_user_name):
            with When(f"I grant {privilege}"):
                node.query(f"GRANT {privilege} ON *.* TO {grant_target_name}")
            with And(f"I revoke {privilege}"):
                node.query(f"REVOKE {privilege} ON *.* FROM {grant_target_name}")
            with Then("I check the user cannot use SHOW CREATE USER"):
                node.query(f"SHOW CREATE USER {target_user_name}", settings=[("user",user_name)],
                    exitcode=exitcode, message=message)