Self-adaptive systems have received great attention in the last decade. In the context of self-adaptive systems, adaptive security concerns with adjusting protection mechanisms at runtime while changes occur in the operating environment. One of the challenges with self-adaptation paradigm is that the reasoning engine must leverage existing requirements and constraints and at the same time deal with different types of imperfections due to absence of knowledge or data. The problem arises when the existing runtime requirements models offer no explicit support for imperfections. By imperfections, we mean the values of some attributes of interest are not available at certain points. To address this problem, we propose uncertain reasoning based on imperfect requirements using non-monotonic logic. We model security requirements, system executions and changes in operation environment through non-monotonic logic that explicitly represents imperfect information and accounts for uncertainty.