A job even if triggered by the by the job scheduler or some other event is always associated with a user - this user is called the job owner. When the job is triggered the system runs this job with the privileges of the job owner, even though this user does not necessarily have an active session at that point in time. The job engine is therefore impersonates the job owner when it executes a job. If the job owner does not have the system permission Create and modify jobs the job will not be executed.
Jobs that the system itself (e.g. cache clearing) run as a special user called system.