Previous article

Next article


Object-oriented Access Control in Jarrah

Mark Evered, University of New England, Australia

space REFEREED
ARTICLE


PDF Icon
PDF Version

Abstract

Given the sensitivity of the data stored in many information systems and the use of networks to support distributed applications, it is increasingly important to enable precise control of who can access the data in what way. Standard per-method access control lists are not sufficient to capture the complexity of the access constraints which arise if the concept of minimal access is taken seriously. In this paper we describe and justify the design of the access control aspect of the persistent object-oriented language Jarrah, a Java extension for programming secure distributed applications.


1 INTRODUCTION

In general, the information stored within the components of an information system will require some form of access control. This is particularly important when networks are used to implement distributed information systems and as the threat from hackers and malicious software continues to grow. As well as protecting a system from external threats, the access control must also ensure compliance with privacy laws and ideally, should guarantee that each user with access to the system has the minimal access required for their role within the organisation. Although distributed information systems are increasingly used for sensitive applications such as E-commerce and Health Information Systems, surprisingly little attention has been paid to handling the complexities of real-world access constraints. Much attention has been given to the security of encryption techniques but, while encryption is certainly important, it protects only the communication and authentication in the system. It provides only the basis for a secure access control mechanism.

Traditional file access control is based on a simple read/write privilege for defined groups of users. Access control in database systems is similarly based on read/write access to the fields of the stored records. In an object-oriented system, the components of an information system can be implemented as objects, with each object containing data hidden by encapsulation and accessible only via interface methods. These interface methods can be meaningful, high-level operations associated with the object in the real world rather than low-level data access operations. One advantage of an object-oriented approach is that the access control can be based on these high-level interface methods and the access rights can be formulated in terms of who can invoke which of the high-level operations on the data encapsulated within the object. The following interface, for example, defines an object for storing bank account information.

As can be seen, the interface contains methods for creating a new account, depositing some amount in one of the accounts, checking the balance in one of the accounts etc. The access control associated with this object may allow software executing on behalf of a bank teller to invoke the deposit and withdraw methods whereas the bank manager may also have access to the method for setting the interest rate. This idea goes back as far as Jones’ and Liskov’s suggestion of a static type-based constraint mechanism [13] and the ‘protected subsystems’ of Multics [18] and it has been adopted in most contemporary component frameworks for heterogeneous distributed systems.

OMG’s Corba [2], Microsoft’s COM+ [4] and Sun’s Enterprise Java Beans [12] all support a form of per-method access control list (ACL). These kinds of mechanism limit the access to an object by returning an error message if certain methods are invoked by certain principals. However, as has been demonstrated in a number of recent case studies [6, 7], this is not the only kind of access restriction which is possible or useful in controlling access to an object in a real information system. In fact, even in terms of per-method access control, the standard mechanisms are not ideal since all the methods of the object are still known to all the users even if they cannot be called. Ideally, in a need-to-know security environment, a principal who is not allowed to invoke an object should not know of the existence of that object and a principal who is not allowed to invoke a particular method should not know of the existence of that method.

In this paper we outline the development of an access control construct for the persistent object-oriented programming language Jarrah. The following section describes the management of persistent objects in Jarrah using object capabilities. Section 3 investigates requirements for access control both in terms of expressiveness and in terms of generic criteria such as clarity and efficiency. In section 4 we use these criteria to develop an access control construct for use in Jarrah while section 5 describes the implementation of the persistence and access control in Jarrah using the Opsis component framework. Finally, in section 6, we relate this approach to other work on persistent objects and object-oriented access control.

2 PERSISTENT OBJECTS IN JARRAH

The programming language Jarrah is an extension of Java which supports secure persistent objects and, through the work presented in this paper, supports fine-grained access control to these objects. Unlike the light-weight persistence of Java, Jarrah supports persistent objects which can be concurrently shared by multiple processes and which need not be explicitly stored and loaded. These aims are similar to those of PJama [1] and database-based approaches such as JDBC [11]. Jarrah differs in that it focuses on security, allows multiple realisations of persistence within a single application and supports distributed object systems. The persistence interface of Jarrah is very simple. It consists of the predefined class Capability and the predefined interface type Persistent.

Given an expression x which returns an object reference, the call:

creates a new persistent object which is a copy of the object to which x refers, where ‘copy’ is taken in the sense of Java’s serialization and de-serialization. The call returns a Capability object which is later used for gaining access to the persistent object. The capability is essentially a 128-bit password which can be passed to users who are to have access to the object.

An example of the most common form for the call is:

to create a new object as a persistent object, in this case an Accounts object implemented by the class AccountsImpl. The persistent object is always accessed via its interface definition, in this case Accounts. The create method can also be invoked with further parameters specifying the form of persistence to be used, the location at which the object is to reside and the protocol for remote invocation. Defaults are used if any of these is not given.

In order to use the object, a call to the open method of the capability is made. Without the capability there is no way to gain access to the persistent object. The open call returns a reference which can be used as if referring directly to the object. (In fact this occurs via a stub object and the underlying Opsis system which takes care of activation, remote access and sharing). For example:

As well as implementing its defining interface, a persistent object also automatically implements the standard interface Persistent which provides a number of generic methods for persistent objects:

So, for example, the object created above can be deleted as follows:

Parameters to methods of persistent objects are passed with copy semantics. For primitive types this is as expected. For transient objects, a copy of the object is made via serialization. Persistent objects can be passed as references by passing a capability object.

It is in this context we now wish to define a programming language construct for defining restricted access to persistent objects. We begin by examining the requirements for such a construct.

3 ACCESS CONTROL REQUIREMENTS

3.1 General criteria

Before we examine access control requirements from the point of view of expressiveness, we first list a number of criteria which we claim should be fulfilled by any mechanism concerned with security.

Concise

Access control is no use if it is not correct and if it is possible to express complex constraints only in an awkward or long-winded way, then errors are likely to be made. Our first criterion is therefore that the mechanism should allow the constraints to be expressed in an easy, concise way. This is especially important for the most common kinds of constraints.

Clear

Closely related to concise expression is the clarity of the mechanism. Access constraints must be not only expressed but also checked. Ideally, at least for the most common cases, it should be apparent at a glance what the rule is saying and therefore whether it is correct in terms of the desired policy.

Non-repetitious

Mechanical repetition, extraneous effort or the use of ‘copy and paste’ in the expression of the rules are indications that something is amiss. A single concept should be expressed in a single place to avoid errors of omission.

Incremental

Persistent objects in real applications can have very many methods on their interfaces. A good mechanism will allow the access rules for these to be grouped into manageable subsets of related methods and then combined.

Aspect-oriented

Access control information should be separated from the functionality of a method, not embedded into or mixed up with it. This corresponds to the idea of aspect-oriented programming [14] where separate aspects of a program such as security and synchronisation are formulated separately and then combined automatically by an ‘aspect weaver’. This separation makes both the application code and the access control easier to understand and also allows the same application object to be used in different security contexts with different access rules.

Fundamental

Ideally, an access control mechanism is integrated at a fundamental level within a system. rather than being an optional add-on. One advantage of this is that developers are forced to address access control questions from the very start. Another advantage is that it is then more difficult for hackers to ‘get around’ the mechanism.

Parameterisable

Often the access constraints for a number of principals are similar and can be expressed by a single parameterised access rule. If this is not possible then it leads to repetition and copying which are susceptible to errors.

Positive

The access rights of a principal should be expressed in terms of what that principal is allowed to do rather than what he/she is not allowed to do. This ensures that the default is that no access at all is allowed and that each permission must be explicitly listed. A strict need-to-know approach to access control is not only desirable in military environments. Financial transactions and the manipulation of sensitive personal data are increasingly being performed electronically via distributed systems and people have a right to expect that no more of their data is being revealed than is absolutely necessary for a particular service.

Dynamic

It is often not sufficient to define all aspects of the access constraints statically. It may be necessary to add a new kind of access or revoke access dynamically. It may also be desirable to modify an existing kind of access.

Composable

It may also be desirable to base a restricted form of access on a previously defined restricted access, ie. to further restrict a restricted access. Amongst other possibilities, this is useful in supporting the concept of hierarchical roles within an organisation.

Efficient

Clearly, a certain overhead will always be involved in performing access control checks but this overhead should be kept at a reasonable level. The temptation will otherwise be there to compromise on the degree of security to improve system performance.

3.2 Expressiveness

The per-method access control lists of standard object-based access control offer a significantly finer control than simple read/write mechanisms but we question whether they are sufficient to express the complexities of real information systems while fulfilling the additional criteria of the previous section. A number of case studies by the authors have shown that even relatively simple information systems can require very complex access rules if the need-to-know principle is taken seriously.

In this section we look at the kinds of access constraints which an access control construct needs to be able to express. We will restrict our discussion to the bank accounts example from above but for a detailed discussion of these kinds of access constraints in a Health Information System the reader is referred to [7].

Subset of methods

This is the fundamental kind of access restriction in an object-based approach to access control. So, for example, nobody but the bank manager may be allowed to invoke the setInterestRate method of the Accounts object. The need-to-know principle implies that methods which are not allowed to be invoked should not even be visible to a principal.

A particularly interesting use of this kind of restriction is in realising signatures. If the access control mechanism can guarantee that only a single person can invoke a method, then the fact that it has been invoked can be utilised as a signature.

Access dependent on data values

Sometimes the question of whether an access should be allowed to proceed depends on the information stored in the object. So, for example, a trainee teller may only be allowed to access accounts with a balance less than a certain limit.

Access based on call history

Like the constraints in the previous category, this kind of constraint depends on the state of the object but here the relevant factor is not the attributes of the information being stored but the allowed sequence of method invocations. A special case of access based on call history is the permission to invoke a method only once. So, for example, we may give someone the right to transfer a certain amount of money from an account to their own account as a payment. This right should expire after it has been used.

Access with restricted parameter values

Sometimes the question of whether an access should be allowed to proceed depends not on the information stored in the object but on the value passed as a parameter. So, for example, a trainee teller may only be allowed to perform a transfer between accounts for an amount less than a certain limit.

Access with missing parameter

An account owner can be allowed to invoke any of the methods which return information stored about him/her but, of course, should have no access to information stored about other account owners. This implies that an account owner only be allowed to invoke methods with a particular value of the accountNumber parameter. Since only a single value for the parameter is allowed, we can, in fact, hide the parameter entirely from the principal and have the appropriate value supplied automatically by the access control mechanism for that principal. This is again in correspondence with the need-to-know principle.

Access based on external information

For added security, we may want to restrict accesses to a certain time of day. The access check will then need to refer to some other object in the system to obtain the current time when a method is invoked. In general, information from other objects in the system may be relevant in deciding whether an access is to be allowed.

Access with external side-effect

This is clearly not desirable in the general case but is necessary for the purpose of logging accesses. Sometimes it is desirable to keep a record of who has done what and when with a persistent object. In a high-security context it may even be necessary to record every invocation of an object but in most information systems this would result in a flood of data which would tend to hide rather than expose the accesses of interest.

Logging may be required both for successful and for unsuccessful method invocations. For example, the manager may need to be informed if a bank employee repeatedly attempts to perform some operation on an object for which he/she has no permission.

4 A LANGUAGE CONSTRUCT FOR ACCESS CONSTRAINTS

4.1 The Jarrah ‘access’ construct

Access to persistent objects in Jarrah can be controlled via the access construct. We introduce this construct progressively by using the examples discussed in the previous section. The first example involves allowing only a subset of the interface methods. We use a normal Java interface type to describe the interface as it is to be viewed by a certain principal or for a certain role. For example:

The access construct can then be used in its minimal form to define the access to the underlying object using this view:

As well as omitting methods from a certain view, we can also omit method parameters. For example, for an account owner we can define the view as:

Here the accountNumber parameter is omitted since only a single value is allowed for each account owner. The view then appears to be giving access to a single bank account. In this case the access construct must supply the value to be used for the missing parameter. One way to do this is to declare a constant in the access construct with the same name as the missing parameter. The access provided for the owner of account number 12345 can then be defined as:

Of course, as mentioned in section 3.1, it would be tiresome and error-prone to write a new access definition for every account owner. We therefore require a parameterisable access definition. This can be achieved by allowing variable declarations in the access construct and a constructor method for their initialisation. Just as with constants, such a variable is substituted for a missing parameter of the same name. The general account owner access can then be defined as:

and can be instantiated as required.

Many forms of access control require some checks or actions to be performed before and/or after a method invocation. These include access dependent on data values, call history or external information, access dependent on parameter values and access with logging. For these cases, the access construct can include a pre and/or a post section containing code which is executed before/after the call to the underlying persistent object. If the code in the pre or post section uses a parameter name then the code is only executed for methods having a parameter with that name.

For example, for the case of the trainee teller we can define the access as:

to ensure that this teller performs only transactions with an amount less than $10000. Similarly, we can define an access with logging by passing to the constructor of the access definition a reference to an object which records information about the method invocations. The pre and/or post sections can then contain calls to this object.

Finally, as mentioned in section 3.1, the access control may need to be dynamic. For example, we may want the transaction limit for a trainee teller to be changeable rather than fixed at $10000. This requires an administrative method for setting the limit value. Therefore, in addition to constants, variables and a constructor, the access construct must also allow method definitions. For clarity, these can be declared in an interface type such as:

with the access now defined as:

It can be seen that, in order to provide the flexibility to handle complex access constraints, the access construct must be able to contain constants, variables, methods and a constructor. In fact, we define it to have the full functionality of a Java class with the addition of the to, provides, pre and post clauses. This includes the possibility of using inheritance via the extends clause to provide an access definition as an extension of a previously defined access definition. This fulfils the criterion of incremental definition from section 3.1 which is important for expressing clear access control to objects with many interface methods.

An access definition in Jarrah can be used just as any class in Java. Objects can be created and manipulated as ordinary objects but can additionally be used to create a restricted form of access to a persistent object. The next section described how this is done.

4.2 The ‘restrictBy’ and ‘admin’ methods

We extend the definition of Persistent to include a number of further methods:

The restrictBy method is passed an object created from an access definition and returns a new capability object which allows access to the underlying persistent object with the restrictions defined for that definition. For example:

The capability can then be given to principals who are to have this kind of access, in this case the owner of account 12345, and can be used to gain access to the object via the appropriate view:

In fact, the exact definition of the restrictBy method is that a copy of the access object given as a parameter is used to control the access. This is because the access object is held together with the persistent object and this may reside on a network node other than the one where the restrictBy call is made.

The only other requirement is that it is somehow possible for the principal who creates a new capability to gain access to the administrative methods associated with that new form of access. This is accomplished via the admin method. This is called with the new capability as a parameter and returns a reference which enables the administrative interface to be called. For example:

and then at some later time:

The possessor of a capability which provides a restricted access to a persistent object can create further capabilities with a more restricted form of access. This is in accordance with the criterion of composability. So, for example, an account owner can create a capability which allows a certain amount to be transferred from his/her account to some other account. This capability is in effect an electronic cheque. It can be achieved as follows:

The post clause invalidates the capability which was used to gain access and so ensures that the cheque can only be used once. A cheque for $100 can, for example, be created by the code:

and can then be passed to the recipient and used by code such as:

5 IMPLEMENTATION

5.1 The Opsis system

The Jarrah compiler translates the access construct and the calls to Persistent and Capability methods into standard Java with calls to the Opsis component framework system. Opsis is a Java-based system for constructing distributed applications based on the mechanism of bracket capabilities [6]. The two main features of the system are:

  • fine-grained access control through the use of bracket capabilities as object identifiers
  • flexibility and transparency in the mechanisms used for both remote invocation and persistence

A bracket capability is a 256-bit sparse capability which consists of a 128-bit capability-server identifier (CSID) and a 128-bit password. The CSID identifies a server which knows the location of the persistent object while the 128-bit password is a random (unguessable) value which acts as the permission to access a certain persistent object in a certain way (ie. with a certain view and a certain access (or bracketing) object).

The information stored on a capability server includes the interface type (the view) with which an object is to be accessed when opened with a certain capability, the location of the object, its name and the mechanism to be used in remote invocations of the object's methods. When an object is created, it is registered with a server and the location of that server is stored in the new capability. Capability servers are given only the lowest 64-bits of the capability’s password as an index rather than the whole 128-bits. This is because otherwise, the server would essentially own a copy of the capability and therefore have all the associated access rights.

As mentioned above, the Opsis system supports multiple mechanisms for remote invocation and (orthogonally) multiple mechanisms for persistence. In all cases, the mechanisms used for the invocation and the persistence remain completely transparent to the client object. The path of a method call from a client to a server object can be visualised as in Fig 1.

Fig. 1: A method call in Opsis

The communication management uses the appropriate mechanism for securely passing the method call and parameters to the remote system and returning a result. It supports multiple concurrent invocations.

The capability management on the client side is responsible for providing the right view of the persistent object to the client and for appending the capability used to open the object to each method invocation as an extra parameter. The capability management on the server side is responsible for checking that the access proceeds only as allowed for that capability. Nothing that can be done on the client system can increase the access rights to the remote object. The persistence management is responsible for making the persistent data available and sharable, and presenting it in the form of an object of the appropriate type.

Possible mechanisms for remote invocation are:

  • Java's RMI
  • a web-based CGI mechanism
  • a mechanism using 'ssh', the secure shell protocol

Possible mechanisms for persistence are:

  • Java's built-in light-weight persistence (using inter-process communication to achieve sharing)
  • wrapper objects around a ‘Postgres’ database

5.2 Compilation

The access construct is translated by the Jarrah compiler to three Java classes. One is a stub class for use in the capability management on the client side. Its interface is the interface type declared in the provides clause. An object of this class is created when a persistent object is opened using the open method of a capability.

The second generated class is for a ‘bracketing object’ through which calls will pass on the server side before reaching the underlying object. The bracketing object is created and initialised when the capability is created and it is made persistent together with the underlying object. The capability management on the server side maps the capability password to this object when a method invocation takes place. It is this class which contains the code of the pre and post clauses for each method and which substitutes variable or constant values for parameters when passing on calls.

The third generated class is again a for stub object but this time for the client who has created a capability and now wants to gain access to the administrative methods associated with that capability. The interface of the class is the interface type declared in the implements clause of the access construct. The object is created when the admin method of a persistent object is called. Invocations of the methods on this interface are transmitted across to the capability management on the server side and are then directed to the appropriate bracketing object.

The create method of the class Capability is translated to a method invocation on a special persistent object residing at the location where the new persistent object is to be created. This ‘creator’ object does all the work of setting up the new object with a particular implementation, a particular form of persistence and a particular remote procedure protocol. In order to create a new persistent object at a certain location, a principal requires a capability for the ‘creator’ object at that location. The run-time system automatically looks for this capability in a defined place in the environment of the principal invoking the create method.

5.3 Optimisation

The parameter to the create method of Capability and the parameter to the restrictBy method of a persistent object are both expressions which return a reference to an object. In both cases the definition for the general case is that a copy of the parameter object is made. This definition is necessary because the node where the parameter will be used may be different from the node on which the call is being made.

The most usual case for both calls, however, is that a newly created object is passed as the parameter. Either:

to create a new persistent object or

to create a new form of access to an existing persistent object. In this case, it is very inefficient to create a new object on one node, serialize it, send it to another node, de-serialize it and then discard the original object (since there is no remaining reference to it). The compiler optimises this case by translating to a different call to the Opsis system which directly creates the object on the target node.

6 RELATED WORK

Much work on persistent programming languages has followed the principle of persistence by reachability whereby an object is persistent if and only if it is reachable via one or more ‘persistent roots’. Examples are systems such as PJama [1] and PerDiS [9] which provide a special persistent object store to manage persistence transparently according to this principle. This approach has a number of problems in terms of information security and access control since a piece of data cannot be considered to be ‘held inside’ a persistent container object as is the case with Jarrah. Many references to a piece of data can be passed around and stored in the system. One problem with this is that the data cannot be explicitly deleted. As long as one reference via a persistent root still exists, the data will continue to exist. The problem in terms of access control is that it cannot be guaranteed that an access to the data will occur via a well-defined high-level interface method and so access constraints cannot be formulated or enforced in terms of these methods. In addition, these systems cannot support different realisations of persistence for different components of an application.

Another approach in persistent programming is to couple an existing language to a database system as with Java’s JDBC [11]. In this case the access constraints could be programmed into a wrapper object as a kind of ACL. Assuming access to the data is only possible through this object and that principals can be identified, the expressiveness criteria can be met but the generic criteria of section 3.1 would not be fulfilled. In particular, the aims of clarity and conciseness would not be met.

As mentioned above, standard component frameworks such as Corba, COM+ and EJB include the possibility of a per-method, role-based access control list for limiting the access of principals to interfaces or objects. In some cases, fixed forms of rule-based access, such as access at certain times of day, are supported. These correspond only to simple, special cases of access control. No direct equivalent of the complex restrictions required for the case studies are supported. No direct equivalent of a restricted view of the object is supported for hiding the existence of unallowed methods and parameters from the principals. In all of these component technologies, the use of ACLs instead of capabilities makes the security mechanism an add-on feature rather than fundamental and detracts from the security.

Object capabilities have been used in a number of research systems, most notably in Multics’ protected subsystems [18] and in the Monads system [17] but these capabilities require architectural support (or at least a special operating system kernel) and so are not appropriate for heterogeneous networks. In a previous project, one of the authors has developed a capability-based mechanism for heterogeneous distributed applications [5]. Brose [3] has proposed a language-based extension to the Corba security model in which the allowed ‘views’ for each user are defined in terms of the methods of an object type. Like the Monads system and the ACL approaches of Corba and EJB, however, these support only simple per-method access control. In all cases, all of the methods are visible to all principals even if they may not be invoked.

The concept of ‘bracketing’ for applying access constraints has been proposed as a form of ‘design pattern’ [10] with one use of the proxy design pattern being a protection (or access) proxy. With a proxy, however, the interface is always identical to the underlying object. Bracketing objects which modify the interface offered to a client cannot be seen as strict proxies. They could be seen as special cases of the adapter pattern but whereas an adapter is usually used to provide the view the client would like to have of the underlying object, in these cases the adapter is providing the view the client is allowed to have. Again, however, the use of general program code cannot provide the clarity and conciseness we require.

The concept of providing a user with a restricted view of persistent data is reminiscent of database systems. Traditional database views are attribute-oriented and not method-oriented, however, and therefore cannot support the flexible kinds of access control required for minimal access. This attribute-orientation is true even for most object-oriented databases [15]. Notable exceptions are the method-based model of Fernandez, Larrondo-Petrie and Gudes [8] and the CACL system of Richardson, Schwarz and Cabrera [16]. The former provides an ‘Execute’ access right for invoking a method of a persistent object. This is similar to the per-method access control of contemporary middleware systems. The latter supports the concept of an ‘authorization type’ as a restricted view of an object but does not allow parameter constraints, state-dependent constraints etc. to be specified as part of the view.

7 CONCLUSION

Given the sensitivity of the data stored in information systems and the use of open networks to support distributed systems, it is increasingly important to enable precise control of access. In contrast to a coarse-grained read/write approach, object-based access control can allow the formulation of access rights in terms of the permission to invoke application-level operations. This is still not sufficient, however, to capture the complexity of the access constraints which arise if the concept of minimal access for each principal is taken seriously.

In this paper we have described and justified the design of the access control aspect of the persistent programming language Jarrah, a Java extension for supporting secure heterogeneous distributed object systems.

We have formulated a number of criteria for fine-grained access control mechanism. These include expressiveness criteria, explained here in terms of a simple E-commerce system for accounts, and general criteria such as clarity, parameterisation and composability.

Based on these criteria, we have shown that the access control construct for an object-oriented language requires at least the functionality of the class construct. The ‘access’ construct of Jarrah additionally includes a ‘to’ clause to define the underlying interface, and a ‘provides’ clause to define the view offered to a principal. This view is defined as a Java interface and it can omit methods and method parameters relative to the underlying interface. The ‘access’ construct also allows ‘pre’ and ‘post’ clauses which provide statements for bracketing the call to the underlying object in a concise, non-repetitive way.

All persistent Jarrah objects automatically implement the Persistent interface. This offers a method for creating a new capability which provides a restricted form of access to an object. It is passed the appropriate access object as a parameter. The Persistent interface also offers a method for gaining access to the administrative methods of an access object.

The language Jarrah is implemented by translation to Java with calls to the Opsis system which uses a form of sparse capability and provides transparent distribution and persistence. A number of optimisations are carried out for the most common cases.

 


REFERENCES

[1] Atkinson, M.P., Daynes, L., Jordan, M.J., Printezis, T., Spence, S. (1996): An orthogonally persistent Java, ACM SIGMOD Record 25, 4.

[2] Blakley, B., Blakley, R., Soley, R.M. (2000): CORBA Security: An Introduction to Safe Computing with Objects, Addison-Wesley.

[3] Brose, G. (1999): A View-Based Access Control Model for CORBA, in: Jan Vitek, Christian Jensen (eds.), Secure Internet Programming: Security Issues for Mobile and Distributed Objects, LNCS 1603, Springer.

[4] Eddon, G. (1999): The COM+ Security Model Gets You Out of the Security Programming Business, Microsoft Systems Journal, November.

[5] Evered, M. (2000): A Two-level Architecture for Semantic Protection of Persistent Distributed Objects, Proc. Intl. Conf on Software Methods and Tools, Wollongong.

[6] Evered, M. (2002): Opsis: A Distributed Object Architecture Based on Bracket Capabilities, Proc. Conference on Technology of Object-Oriented

[7] Evered, M., Bögeholz, S. (2004): A Case Study in Access Control Requirements for a Health Information System, Australasian Information Security Workshop, Dunedin.

[8] Fernandez, E.B., Larrondo-Petrie, M.M., Gudes, E., A. (1993): Model of Methods Access Authorization in Object-oriented Databases, Proc. of the 19th VLDB Conference , Dublin.

[9] Ferreira, P., Shapiro, M., Blondel, X., Fambon, O., Garcia, J., Kloosterman, S., Richer, N., Roberts, M., Sandakly, F., Coulouris, G., Dollimore, J., Guedes, P., Hagimont, D., Krakowiak, S. (1998): PerDiS: design, implementation, and use of a PERsistent Distributed Store, Technical report, QMW TR 752, CSTB ILC/98-1392, INRIA RR 3525, INESC RT/5/98.

[10] Gamma, E. et al. (1995): Design Patterns, Addison-Wesley.

[11] Hamilton, G., Catell, R.G. (1996): JDBC: A Java SQL API., Technical report, Sun Microsystems.

[12] Hartman, B., Flinn, D.J., Benznosov, K. (2001): Enterprise Security with EJB and CORBA, Wiley.

[13] Jones, A., Liskov, B. (1978): A language extension for expressing constraints on data access. Communications of the ACM, 21(5):358-367, May.

[14] Kiczales, G. et al. (1997): Aspect-oriented programming, Proc. European Conference for Object-Oriented Programming, Finland (Lecture Notes in Computer Science, vol. 1241). Springer.

[15] Mishra, P., Eich, M.H. (1994): Taxonomy of views in OODBs, Proc. ACM Computer Science Conference.

[16] Richardson, J., Schwarz, P., Cabrera, L. (1992): CACL: Efficient Fine-Grained Protection for Objects, Proc. OOPSLA Conference.

[17] Rosenberg, J., Abramson, D. A. (1985): The MONADS Architecture: Motivation and Implementation, Proc. First Pan Pacific Computer Conference, p. 4/10-4/23.

[18] Saltzer, J.H. (1973): Protection and the Control of Information Sharing in Multics, Symposium on Operating System Principles, Yorktown Heights, NY.

 

About the author

 

Mark Evered is a Senior Lecturer in the School of Mathematics, Statistics and Computer Science at the University of New England in Armidale, Australia. He completed his PhD at the Technical University of Darmstadt in Germany. His research interests include Object-based Systems, Security, Persistence and Programming Language Design and Implementation. E-Mail: markev@mcs.une.edu.au.


Cite this article as follows: Mark Evered: “Object-oriented Access Control in Jarrah", in Journal of Object Technology, vol. 4, no. 4, May-June 2005, pp 135-153 http://www.jot.fm/issues/issue_2005_05/article3


Previous article

Next article