|
Spec-Zone .ru
спецификации, руководства, описания, API
|
Список управления доступом (ACL) является структурой данных, которая охраняет доступ к ресурсам. java.security.acl пакет обеспечивает интерфейс для такой структуры данных, и sun.security.acl пакет обеспечивает реализацию по умолчанию интерфейсов, определенных в java.security.acl пакете.
Отметьте: Этот API не используется внутренне для безопасности системы JDK. Это было представлено в JDK 1.1, и остается для назад совместимости. Это может подвергнуться существенной версии и расширению или даже замене в будущих выпусках. Этот документ описывает текущие интерфейсы.
ACL может считаться структурой данных с многократными записями ACL. Каждая запись ACL, AclEntry типа интерфейса, содержит ряд полномочий, связанных с определенным принципалом. (Принципал представляет объект, такой как отдельный пользователь или группа). Дополнительно, каждая запись ACL определяется как являющийся или положительным или отрицательным. Если положительный, полномочия нужно предоставить связанному принципалу. Если отрицание, полномочия должны отрицаться.
Список управления доступом независим от схемы аутентификации, используемой, чтобы проверить законность принципала. Это также независимо от схемы шифрования, используемой, чтобы передать данные по сети. С ACL консультируются после фазы аутентификации. После того, как принципал проверяется, чтобы быть аутентифицируемым пользователем в системе, принципал мог бы получить доступ к ресурсам. Для каждого такого ресурса принципал мог бы или не мог бы быть предоставленным доступом в зависимости от полномочий, которые предоставляют принципалу в ACL, который охраняет ресурс. Сам ACL независим от ресурса, который он охраняет. С ACL можно консультироваться, чтобы найти список полномочий, которые определенный принципал имеет или узнать, предоставляют ли принципалу определенное разрешение.
ACL является объектом, который реализует java.security.acl. Интерфейс Acl. Каждый Acl является списком объектов AclEntry. Каждый AclEntry связывает Принципал или Групповой объект к списку Объектов полномочий. (Отметьте: Группа является подклассом Принципала.) Каждый AclEntry может также определяться как положительная запись или отрицательная запись. Положительная запись предоставляет список полномочий в записи в принципал или группу, и отрицательная запись отрицает список полномочий к принципалу или группе.
Вычисляя сетевые полномочия принципал предоставляют, следующие правила используются.
Предположите, что принципал P принадлежит группам G1 и G2. Таблица ниже показывает 5 столбцов, используя некоторые примеры полномочий, данных G1, G2 и P. Получающиеся полномочия, предоставленные P, показывают в последнем столбце.
| Группа Полномочия G1 | Группа Полномочия G2 | Объединение (G1, G2) перманент | Отдельные Полномочия | Получающиеся Полномочия | ||
|---|---|---|---|---|---|---|
| Положительный | A | B | A+B | C | A+B+C | |
| Отрицательный | пустое множество | пустое множество | пустое множество | пустое множество | A+B+C | |
| Положительный | A | B | B | C | B+C | |
| Отрицательный | -C | -A | -C | пустое множество | B+C | |
| Положительный | A | B | A+B | C | B+C | |
| Отрицательный | пустое множество | пустое множество | пустое множество | -A | B+C | |
| Положительный | A | C | A | B | B | |
| Отрицательный | -C | -B | -B | -A | B |
/* Note: This sample program is meant just as an example
* of the types of things that can be done with an
* implementation of the java.security.acl interfaces.
* This example uses the implementation supplied by the
* sun.security.acl package. Please note that sun.* classes
* are unsupported and subject to change.
*/
import java.security.Principal;
import java.security.acl.*;
import sun.security.acl.*;
import java.util.Enumeration;
public class AclEx {
public static void main(String argv[])
throws Exception
{
Principal p1 = new PrincipalImpl("user1");
Principal p2 = new PrincipalImpl("user2");
Principal owner = new PrincipalImpl("owner");
Permission read = new PermissionImpl("READ");
Permission write = new PermissionImpl("WRITE");
System.out.println("Creating a new group with two members: user1 and
user2");
Group g = new GroupImpl("group1");
g.addMember(p1);
g.addMember(p2);
//
// create a new acl with the name "exampleAcl"
//
System.out.println("Creating a new Acl named 'exampleAcl'");
Acl acl = new AclImpl(owner, "exampleAcl");
//
// Allow group all permissions
//
System.out.println("Creating a new Acl Entry in exampleAcl for the
group, ");
System.out.println(" with read & write permissions");
AclEntry entry1 = new AclEntryImpl(g);
entry1.addPermission(read);
entry1.addPermission(write);
acl.addEntry(owner, entry1);
//
// Take away WRITE permissions for
// user1. All others in groups still have
// WRITE privileges.
//
System.out.println("Creating a new Acl Entry in exampleAcl for user1");
System.out.println(" without write permission");
AclEntry entry2 = new AclEntryImpl(p1);
entry2.addPermission(write);
entry2.setNegativePermissions();
acl.addEntry(owner, entry2);
//
// This enumeration is an enumeration of
// Permission interfaces. It should return
// only "READ" permission.
Enumeration e1 = acl.getPermissions(p1);
System.out.println("Permissions for user1 are:");
while (e1.hasMoreElements()) {
System.out.println(" " + e1.nextElement());
};
//
// This enumeration should have "READ" and"WRITE"
// permissions.
Enumeration e2 = acl.getPermissions(p2);
System.out.println("Permissions for user2 are:");
while (e2.hasMoreElements()) {
System.out.println(" " + e2.nextElement());
};
// This should return false.
boolean b1 = acl.checkPermission(p1, write);
System.out.println("user1 has write permission: " + b1);
// This should all return true;
boolean b2 = acl.checkPermission(p1, read);
boolean b3 = acl.checkPermission(p2, read);
boolean b4 = acl.checkPermission(p2, write);
System.out.println("user1 has read permission: " + b2);
System.out.println("user2 has read permission: " + b3);
System.out.println("user2 has write permission: " + b4);
}
}