<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Identity-Management on IT Comparison</title><link>https://comparison.metacog.co.kr/tags/identity-management/</link><description>Recent content in Identity-Management on IT Comparison</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Sun, 02 Aug 2026 11:22:33 +0900</lastBuildDate><atom:link href="https://comparison.metacog.co.kr/tags/identity-management/index.xml" rel="self" type="application/rss+xml"/><item><title>RBAC vs ABAC: Role-Based vs Attribute-Based Access Control</title><link>https://comparison.metacog.co.kr/posts/2026-08-02-rbac-vs-abac-role-based-vs-attribute-based-access-control/</link><pubDate>Sun, 02 Aug 2026 11:22:33 +0900</pubDate><guid>https://comparison.metacog.co.kr/posts/2026-08-02-rbac-vs-abac-role-based-vs-attribute-based-access-control/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;RBAC and ABAC are two models for deciding whether a subject can perform an action on a resource. RBAC grants access based on a user&amp;rsquo;s assigned role and that role&amp;rsquo;s fixed permission set, while ABAC evaluates a policy against attributes of the user, resource, action, and environment at request time. The choice affects how fine-grained, dynamic, and auditable your authorization system can be.&lt;/p&gt;
&lt;h2 id="comparison-diagram"&gt;Comparison Diagram&lt;/h2&gt;
&lt;div class="compare-diagram"&gt;
&lt;svg viewBox="0 0 640 360" xmlns="http://www.w3.org/2000/svg"&gt;&lt;line x1="325" y1="40" x2="325" y2="320" style="stroke:var(--border)" stroke-width="1" stroke-dasharray="4,4"/&gt;&lt;text x="170" y="28" text-anchor="middle" style="fill:var(--primary)" font-size="18" font-weight="bold"&gt;RBAC&lt;/text&gt;&lt;text x="480" y="28" text-anchor="middle" style="fill:var(--primary)" font-size="18" font-weight="bold"&gt;ABAC&lt;/text&gt;&lt;rect x="110" y="50" width="120" height="40" rx="6" style="fill:var(--compare-a-soft);stroke:var(--compare-a)" stroke-width="1.5"/&gt;&lt;text x="170" y="75" text-anchor="middle" style="fill:var(--content)" font-size="13"&gt;User&lt;/text&gt;&lt;line x1="170" y1="90" x2="170" y2="116" style="stroke:var(--compare-a)" stroke-width="1.5"/&gt;&lt;polygon points="170,120 165,110 175,110" style="fill:var(--compare-a)"/&gt;&lt;rect x="100" y="120" width="140" height="40" rx="6" style="fill:var(--compare-a-soft);stroke:var(--compare-a)" stroke-width="1.5"/&gt;&lt;text x="170" y="145" text-anchor="middle" style="fill:var(--content)" font-size="13"&gt;Role: Editor&lt;/text&gt;&lt;line x1="170" y1="160" x2="170" y2="186" style="stroke:var(--compare-a)" stroke-width="1.5"/&gt;&lt;polygon points="170,190 165,180 175,180" style="fill:var(--compare-a)"/&gt;&lt;rect x="90" y="190" width="160" height="90" rx="6" style="fill:var(--compare-a-soft);stroke:var(--compare-a)" stroke-width="1.5"/&gt;&lt;text x="170" y="210" text-anchor="middle" style="fill:var(--content)" font-size="12" font-weight="bold"&gt;Permissions&lt;/text&gt;&lt;text x="170" y="230" text-anchor="middle" style="fill:var(--content)" font-size="12"&gt;Read&lt;/text&gt;&lt;text x="170" y="248" text-anchor="middle" style="fill:var(--content)" font-size="12"&gt;Write&lt;/text&gt;&lt;text x="170" y="266" text-anchor="middle" style="fill:var(--content)" font-size="12"&gt;Publish&lt;/text&gt;&lt;text x="170" y="305" text-anchor="middle" style="fill:var(--secondary)" font-size="11"&gt;Fixed, regardless of context&lt;/text&gt;&lt;rect x="350" y="50" width="110" height="36" rx="6" style="fill:var(--compare-b-soft);stroke:var(--compare-b)" stroke-width="1.5"/&gt;&lt;text x="405" y="72" text-anchor="middle" style="fill:var(--content)" font-size="11"&gt;User attrs&lt;/text&gt;&lt;rect x="470" y="50" width="120" height="36" rx="6" style="fill:var(--compare-b-soft);stroke:var(--compare-b)" stroke-width="1.5"/&gt;&lt;text x="530" y="72" text-anchor="middle" style="fill:var(--content)" font-size="11"&gt;Resource attrs&lt;/text&gt;&lt;rect x="410" y="96" width="140" height="36" rx="6" style="fill:var(--compare-b-soft);stroke:var(--compare-b)" stroke-width="1.5"/&gt;&lt;text x="480" y="118" text-anchor="middle" style="fill:var(--content)" font-size="11"&gt;Env attrs&lt;/text&gt;&lt;line x1="405" y1="86" x2="470" y2="158" style="stroke:var(--compare-b)" stroke-width="1.5"/&gt;&lt;line x1="530" y1="86" x2="490" y2="158" style="stroke:var(--compare-b)" stroke-width="1.5"/&gt;&lt;line x1="480" y1="132" x2="480" y2="158" style="stroke:var(--compare-b)" stroke-width="1.5"/&gt;&lt;polygon points="480,162 474,150 486,150" style="fill:var(--compare-b)"/&gt;&lt;rect x="410" y="162" width="140" height="40" rx="6" style="fill:var(--compare-b-soft);stroke:var(--compare-b)" stroke-width="1.5"/&gt;&lt;text x="480" y="187" text-anchor="middle" style="fill:var(--content)" font-size="12" font-weight="bold"&gt;Policy Engine&lt;/text&gt;&lt;line x1="480" y1="202" x2="480" y2="221" style="stroke:var(--compare-b)" stroke-width="1.5"/&gt;&lt;polygon points="480,225 475,215 485,215" style="fill:var(--compare-b)"/&gt;&lt;rect x="420" y="225" width="120" height="40" rx="6" style="fill:var(--compare-b-soft);stroke:var(--compare-b)" stroke-width="1.5"/&gt;&lt;text x="480" y="250" text-anchor="middle" style="fill:var(--content)" font-size="12"&gt;Allow / Deny&lt;/text&gt;&lt;text x="480" y="305" text-anchor="middle" style="fill:var(--secondary)" font-size="11"&gt;Evaluated per request, in context&lt;/text&gt;&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id="comparison-table"&gt;Comparison Table&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Aspect&lt;/th&gt;
&lt;th&gt;RBAC&lt;/th&gt;
&lt;th&gt;ABAC&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Access decision basis&lt;/td&gt;
&lt;td&gt;A user&amp;rsquo;s assigned role&lt;/td&gt;
&lt;td&gt;Attributes of the user, resource, action, and environment&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Permission structure&lt;/td&gt;
&lt;td&gt;Static, predefined role-to-permission mappings&lt;/td&gt;
&lt;td&gt;Dynamic policies expressed as attribute-based rules&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Administration&lt;/td&gt;
&lt;td&gt;Admin assigns users to existing roles&lt;/td&gt;
&lt;td&gt;Policy author writes rules combining attribute conditions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Runtime evaluation&lt;/td&gt;
&lt;td&gt;Check whether the user&amp;rsquo;s role includes the requested permission&lt;/td&gt;
&lt;td&gt;Policy engine evaluates rules against current attribute values&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Context sensitivity&lt;/td&gt;
&lt;td&gt;Same result regardless of time, location, or device&lt;/td&gt;
&lt;td&gt;Can factor in time, location, device, and other real-time signals&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Granularity&lt;/td&gt;
&lt;td&gt;Coarse-grained, applied per role&lt;/td&gt;
&lt;td&gt;Fine-grained, applied per request or condition&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scalability with complexity&lt;/td&gt;
&lt;td&gt;Role explosion as requirements diversify&lt;/td&gt;
&lt;td&gt;Policy complexity grows, but avoids proliferating roles&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Auditability&lt;/td&gt;
&lt;td&gt;Easy to audit — list who holds a given role&lt;/td&gt;
&lt;td&gt;Harder to audit — requires tracing policy logic across attributes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="key-differences"&gt;Key Differences&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;RBAC ties access to &lt;strong class="kw"&gt;roles&lt;/strong&gt;; ABAC ties access to &lt;strong class="kw"&gt;attributes&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;RBAC decisions are &lt;strong class="kw"&gt;static&lt;/strong&gt;; ABAC decisions are &lt;strong class="kw"&gt;context-aware&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;ABAC enables &lt;strong class="kw"&gt;fine-grained&lt;/strong&gt; control at the cost of policy complexity&lt;/li&gt;
&lt;li&gt;RBAC suffers from &lt;strong class="kw"&gt;role explosion&lt;/strong&gt; as requirements grow&lt;/li&gt;
&lt;li&gt;RBAC is generally easier to &lt;strong class="kw"&gt;audit&lt;/strong&gt; than ABAC&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="when-to-use-each"&gt;When to Use Each&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;RBAC&lt;/strong&gt;&lt;/p&gt;</description></item></channel></rss>