в чем смысл и разница между субъектом, пользователем и принципалом?

<p>в контексте систем безопасности обычно встречаются несколько терминов <strong>субъект</strong>, <strong>пользователь</strong> и <strong>принципал</strong>, из которых я не смог найти четкого определение и разница между ними.</p><p>итак, что именно означают эти термины, и почему нужны эти различия <strong>субъект</strong> и <strong>принципал</strong>?</p>

<p>они иерархичны в том смысле, что род, вид и особь иерархичны.</p><ul> <li><strong>subject</strong> - в контексте безопасности субъект <em> </em> - это любой объект, который запрашивает доступ к <em> объекта </em>. это общие термины, используемые для обозначения объекта, запрашивающего доступ, и объекта, против которого сделан запрос. когда вы входите в приложение, вы являетесь субъектом, а приложение - объектом. когда кто-то стучит в вашу дверь, посетитель является субъектом, запрашивающим доступ, а ваш дом - объектом запроса.</li> <li><strong>принципал</strong> - подмножество <em> субъекта </em>, которое представлено учетной записью, ролью или другим уникальным идентификатором. когда мы дойдем до уровня деталей реализации, принципалы - это уникальные ключи, которые мы используем в списках контроля доступа. они могут представлять пользователей, автоматизацию, приложения, соединения и т.д.</li> <li><strong>пользователь</strong> - подмножество <em> принципала </em>, обычно ссылающегося на человека-оператора. различие со временем стирается, потому что слова "пользователь" или "идентификатор пользователя" обычно взаимозаменяемы с "аккаунтом". однако, когда вам необходимо провести различие между широким классом вещей, которые являются <em> принципалами </em>, и их подмножеством, которые являются интерактивными операторами, управляющими транзакциями в не -детерминированная мода, "пользователь" - это правильное слово.</li> </ul><p>предмет/объект наследуется от тех же терминов, что и в грамматике. в предложении субъект - это субъект, а объект - это то, над чем действовал. в этом смысле использование было вокруг еще до того, как были изобретены компьютеры. в контексте безопасности субъект - это все, что может сделать запрос. как отмечалось выше, это не должно ограничиваться ит-безопасностью и поэтому является очень широкой классификацией. интересно то, что субъект подразумевает объект. без объекта нет субъекта.</p><p>принципы - вот что решают субъекты. когда вы представляете свою кредитную карту, вы - субъект, а номер счета - основной. в других случаях ваш основной идентификатор пользователя или удостоверение личности, выданное штатом. но принципы могут быть связаны со многими типами субъектов, которые не являются людьми. когда приложения делают запросы на функции системного уровня, принципал может подписать подписанный модуль исполняемого кода, но даже в этом случае пользователь, управляющий запросом, остается субъектом.</p><p>пользователь более конкретен, чем субъект или принципал в том смысле, что он обычно относится к интерактивному оператору. вот почему у нас есть графический интерфейс пользователя, а не основной графический интерфейс. пользователь является экземпляром <em> субъекта </em>, который разрешается к <em> принципалу </em>. один пользователь может разрешить любое количество участников, но ожидается, что любой участник разрешит одному пользователю (при условии, что люди соблюдают требование не предоставлять идентификаторы). в приведенном выше примере подписавшийся модуль исполняемого кода определенно <em> не </em> пользователь, но это <em> </em> действительный принципал. интерактивный оператор, пытающийся загрузить модуль, является пользователем.</p><p>как отмечается в комментариях, даже авторитетные источники не согласны с этими условиями. при подготовке этого ответа я искал nist, sans, ieee, miter и несколько "квазиавторизованных" источников, таких как руководства по проверке безопасности. ни один источник, который я нашел, который был бы, по крайней мере, квази-авторитетным, не охватывал все три термина, и все они значительно различались в их использовании. это мое понимание того, как следует использовать термины <em> </em>, но с практической точки зрения, когда вы переходите к руководству среди ночи, определения, как правило, соответствуют тому, что говорят продавцы или авторы. хотелось бы надеяться, что ответы здесь предоставят достаточно информации для навигации по водам и анализа любого документа безопасности с использованием этих терминов.</p>

<p>взгляните на мою <a href="http://telicthoughts.blogspot.com/2011/02/authentication-concept-map.html">концептуальную карту аутентификации</a> :</p><p><img src="https://i.stack.imgur.com/5bt0l.jpg" alt="enter image description here"></p>

<p>я думаю, что терминология взята из <a href="https://docs.oracle.com/javase/7/docs/technotes/guides/security/jaas/tutorials/generalacnandazn.html">jaas</a> .</p><blockquote> <p>когда приложение использует аутентификацию jaas для аутентификации пользователя (или другого объекта, такого как служба), в результате создается <strong> субъект </strong>. целью субъекта является представление аутентифицированного пользователя. <strong> субъект состоит из набора принципалов </strong>, где каждый принципал представляет личность для этого пользователя. например, субъект может иметь имя принципал ("сьюзан смит") и принципал номера социального страхования ("987-65-4321"), тем самым отличая этот субъект от других субъектов.</p> </blockquote>

<p><strong>subject</strong> это объект, который запрашивает услугу. это может быть пользователь или процесс. вероятно, поэтому имя пользователя было выбрано вместо пользователя.</p><p>когда субъект пытается получить доступ к услуге, субъект должен быть сначала аутентифицирован. успешная аутентификация заканчивается загрузкой <strong>security principals</strong> для этого субъекта. например, в системе контроля доступа на основе ролей прошедший проверку (вошедший в систему) пользователь обычно имеет два принципала - userid и roleid. в таких системах привилегии (то есть, кто и к чему имеет доступ) указываются как для ролей, так и для пользователей. во время авторизации (т. е. проверки, разрешена ли запрашиваемая услуга), система безопасности проверит доступность для обоих участников.</p><p>следовательно, с точки зрения авторизации, субъекты являются фактическими объектами, доступ к которым разрешен или запрещен. субъект - это просто пользователь/поток/процесс, который содержит некоторые принципы.</p>

<p>как объяснил t.rob, субъект - это любая сущность, которая запрашивает доступ к объекту. начиная с этого момента, я нашел комментарий к коду javax.security.auth.subject, который я нашел очень полезным и простым для понимания:</p><p>"субъекты могут потенциально иметь несколько идентификаторов. каждая идентичность представлена как субъект внутри субъекта. принципалы просто связывают имена с субъектом. например, субъект, являющийся человеком, алиса, может иметь два принципала: один, связывающий" "алиса бар", имя в ее водительских правах, для субъекта, и другое, которое связывает, "999-99-9999", номер на ее карточке студента, для субъекта. оба принципала относятся к одному и тому же субъекту, хотя каждый имеет другое имя. "</p><p>надеюсь, поможет.</p>

<p>это <a href="https://docs.oracle.com/javase/7/docs/technotes/guides/security/jgss/tutorials/glossary.html">ссылка</a> для приведенного ниже объяснения из oracle java документация se.</p><blockquote> <p>предметы, принципалы, аутентификация и учетные данные. для авторизации доступа к ресурсам приложения сначала должны аутентифицировать источник запроса. каркас jaas определяет термин <strong> субъект </strong> для представления источника запроса. субъектом может быть любая сущность, такая как человек или услуга. предмет представлен классом <a href="https://docs.oracle.com/javase/7/docs/api/javax/security/auth/subject.html">javax.security.auth.subject</a> .</p> <p><strong> аутентификация </strong> представляет процесс проверки личности субъекта и должна выполняться безопасным образом; в противном случае преступник может выдать себя за других, чтобы получить доступ к системе. аутентификация обычно включает в себя предмет, демонстрирующий некоторую форму доказательства, чтобы доказать свою идентичность такие доказательства могут представлять собой информацию, которую только вероятно мог бы знать или иметь только субъект (например, пароль или отпечаток пальца), или это может быть информация, которую может предоставить только субъект (например, подписанные данные с использованием личного ключа).</p> <p>после проверки подлинности субъект заполняется соответствующими идентификаторами или <strong> принципалами </strong> (типа <a href="https://docs.oracle.com/javase/7/docs/api/java/security/principal.html">java.security.principal</a> ). у субъекта может быть много принципалов. например, человек может иметь имя принципал ("джон доу") и принципал ssn ("123-45-6789"), которые отличают его от других субъектов.</p> <p>в дополнение к связанным принципалам субъект может иметь атрибуты безопасности, которые называются <strong> учетными данными </strong>. учетные данные могут содержать информацию, используемую для аутентификации субъекта новых услуг. такие учетные данные включают пароли, билеты kerberos и сертификаты открытых ключей. учетные данные могут также содержать данные, которые позволяют субъекту выполнять определенные действия. криптографические ключи, например, представляют учетные данные, которые позволяют субъекту подписывать или шифровать данные. открытые и частные учетные классы не являются частью основного api j2se. следовательно, любой класс может представлять учетные данные.</p> </blockquote>