ac-us-06-LDAP Stored Procedures and Triggers arrive in...

44
LDAP Stored Procedures and LDAP Stored Procedures and Triggers arrive in ApacheDS Triggers arrive in ApacheDS •Originally presented at ApacheCon US 2006 in Austin •Latest presentation materials are at http://people.apache.org/~ersiner •Presented by Ersin Er, [email protected]

Transcript of ac-us-06-LDAP Stored Procedures and Triggers arrive in...

Page 1: ac-us-06-LDAP Stored Procedures and Triggers arrive in ...people.apache.org/~jim/ApacheCons/ApacheCon2006/slides/FR14/F… · LDAP Stored Procedures and Triggers arrive in ApacheDS

LDAP Stored Procedures and LDAP Stored Procedures and

Triggers arrive in ApacheDSTriggers arrive in ApacheDS

•Originally presented at ApacheCon US 2006 in Austin

•Latest presentation materials are at http://people.apache.org/~ersiner

•Presented by Ersin Er, [email protected]

Page 2: ac-us-06-LDAP Stored Procedures and Triggers arrive in ...people.apache.org/~jim/ApacheCons/ApacheCon2006/slides/FR14/F… · LDAP Stored Procedures and Triggers arrive in ApacheDS

ApacheDS Access Control

Administration; The X.500 Way2

Agenda

• Stored Procedures– Why do we need them in LDAP?

– Representing Stored Procedures

– Executing Stored Procedures

– Demos

• Triggers– Why do we need them in LDAP?

– Model of LDAP Triggers

– Integration with LDAP Stored Procedures

– Demos (including a complete case study)

Page 3: ac-us-06-LDAP Stored Procedures and Triggers arrive in ...people.apache.org/~jim/ApacheCons/ApacheCon2006/slides/FR14/F… · LDAP Stored Procedures and Triggers arrive in ApacheDS

ApacheDS Access Control

Administration; The X.500 Way3

Stored Procedures for LDAP

(Why?)

• Bulk processing

• Controlled by user

• Extending server’s capability easily

• LDAP Extended Operations?

Page 4: ac-us-06-LDAP Stored Procedures and Triggers arrive in ...people.apache.org/~jim/ApacheCons/ApacheCon2006/slides/FR14/F… · LDAP Stored Procedures and Triggers arrive in ApacheDS

ApacheDS Access Control

Administration; The X.500 Way4

Model of LDAP Stored

Procedures

• Implementation technology

• Storage place

• Storage format

• Storage method

• Calling– Parameters

– Return value

• Security

Page 5: ac-us-06-LDAP Stored Procedures and Triggers arrive in ...people.apache.org/~jim/ApacheCons/ApacheCon2006/slides/FR14/F… · LDAP Stored Procedures and Triggers arrive in ApacheDS

ApacheDS Access Control

Administration; The X.500 Way5

What’s an LDAP stored

procedure?

• A piece of code

• Implemented in any technology

• Stored in the Directory Information Tree

• Represented with schema elements

• Manipulated by standard LDAP operations

(add, delete)

Page 6: ac-us-06-LDAP Stored Procedures and Triggers arrive in ...people.apache.org/~jim/ApacheCons/ApacheCon2006/slides/FR14/F… · LDAP Stored Procedures and Triggers arrive in ApacheDS

ApacheDS Access Control

Administration; The X.500 Way6

Stored Procedures in ApacheDS

• “Java” scheme realization of the generic

model

• A “Java” LDAP stored procedure is

– A public static method of a Java class

– Represented by two attributes and an object class

– Stored with its class (as expected) in compiled

form (byte-code)

Page 7: ac-us-06-LDAP Stored Procedures and Triggers arrive in ...people.apache.org/~jim/ApacheCons/ApacheCon2006/slides/FR14/F… · LDAP Stored Procedures and Triggers arrive in ApacheDS

ApacheDS Access Control

Administration; The X.500 Way7

DEMO 1

• Let’s load the following SP on the DIT!

public class HelloWorldpublic class HelloWorldpublic class HelloWorldpublic class HelloWorld

{{{{

public static void helloWorld()public static void helloWorld()public static void helloWorld()public static void helloWorld()

{{{{

System.out.println( "Hello World!" );System.out.println( "Hello World!" );System.out.println( "Hello World!" );System.out.println( "Hello World!" );

}}}}

}}}}

• Note: ApacheDS expects SPs under “ou=Stored Procedures,ou=system” by default

Page 8: ac-us-06-LDAP Stored Procedures and Triggers arrive in ...people.apache.org/~jim/ApacheCons/ApacheCon2006/slides/FR14/F… · LDAP Stored Procedures and Triggers arrive in ApacheDS

ApacheDS Access Control

Administration; The X.500 Way8

So we want to call it?

• Call from where?

– Client side

– Server side

• No standard SP Call operation

• For calling any LDAP stored procedure from

client side

– Use Stored Procedure Execution (Extended)

Operation

Page 9: ac-us-06-LDAP Stored Procedures and Triggers arrive in ...people.apache.org/~jim/ApacheCons/ApacheCon2006/slides/FR14/F… · LDAP Stored Procedures and Triggers arrive in ApacheDS

ApacheDS Access Control

Administration; The X.500 Way9

Stored Procedure Execution

(Extended) Operation

• Name of the stored procedure

• Where to find the stored procedure (optional)

– A base search context (DistinguishedName)

– Search scope: base, one, whole (Optional)

• SP impl. language (scheme) (optional)

• Parameters (optional)

– type information (optional)

– value

Page 10: ac-us-06-LDAP Stored Procedures and Triggers arrive in ...people.apache.org/~jim/ApacheCons/ApacheCon2006/slides/FR14/F… · LDAP Stored Procedures and Triggers arrive in ApacheDS

ApacheDS Access Control

Administration; The X.500 Way10

DEMO 2

• Let’s call the stored procedure

• SP name: “HelloWorld.helloWorld”

• Search context not given (it’s under the default container)

• SP language scheme “Java” is not given, as it’s default for ApacheDS

• No parameters (yet!)

Page 11: ac-us-06-LDAP Stored Procedures and Triggers arrive in ...people.apache.org/~jim/ApacheCons/ApacheCon2006/slides/FR14/F… · LDAP Stored Procedures and Triggers arrive in ApacheDS

ApacheDS Access Control

Administration; The X.500 Way11

DEMO 3

• Let’s load the following stored procedure

• public class Greeter• {• public static String sayHello( String who, Integer times )• {• StringBuffer buffer = new StringBuffer();

• for ( int i = 0; i < times.intValue(); i++ )• {• buffer.append( "Hello " );• }

• buffer.append( who );• buffer.append( '!' );

• return buffer.toString();• }• }

Page 12: ac-us-06-LDAP Stored Procedures and Triggers arrive in ...people.apache.org/~jim/ApacheCons/ApacheCon2006/slides/FR14/F… · LDAP Stored Procedures and Triggers arrive in ApacheDS

ApacheDS Access Control

Administration; The X.500 Way12

DEMO 3 (continued)

• Let’s call the stored procedure

• Parameters– who:String: “ApacheCon”

– times:Integer: 3

• And the return value

– An Object!

Page 13: ac-us-06-LDAP Stored Procedures and Triggers arrive in ...people.apache.org/~jim/ApacheCons/ApacheCon2006/slides/FR14/F… · LDAP Stored Procedures and Triggers arrive in ApacheDS

ApacheDS Access Control

Administration; The X.500 Way13

“Java” SP execution progress

(A reflection story)

• Find the SP entry– Use the SP name (what) and search context (where)

• Extract class name from SP name

• Load the class

• Extract method name from SP name

• Find the method in the class– Use method name and check parameters for assignment

compatibility

• Call the method supplying parameters

• Return back the result Object

Page 14: ac-us-06-LDAP Stored Procedures and Triggers arrive in ...people.apache.org/~jim/ApacheCons/ApacheCon2006/slides/FR14/F… · LDAP Stored Procedures and Triggers arrive in ApacheDS

ApacheDS Access Control

Administration; The X.500 Way14

A special SP parameter

• type: “ldapContext”

• value: A distinguished name (as a String

object)

• ApacheDS supplies a JNDI context at the

specified DN with the user’s credentials

• Why do we need it?

Page 15: ac-us-06-LDAP Stored Procedures and Triggers arrive in ...people.apache.org/~jim/ApacheCons/ApacheCon2006/slides/FR14/F… · LDAP Stored Procedures and Triggers arrive in ApacheDS

ApacheDS Access Control

Administration; The X.500 Way15

DEMO 4

• Let’s do a real world example

• With delete operation a single entry can be deleted

at once

• It’s a common requirement to delete a subtree at

once

• There is an delete operation control for this

• But let’s write our own DelSubtree, load and call it

Page 16: ac-us-06-LDAP Stored Procedures and Triggers arrive in ...people.apache.org/~jim/ApacheCons/ApacheCon2006/slides/FR14/F… · LDAP Stored Procedures and Triggers arrive in ApacheDS

ApacheDS Access Control

Administration; The X.500 Way16

Security Issues

• Directory operations on stored procedures

– Who can do what on stored procedures

• Permissions used during execution

– Executor’s verses owner’s

• Authorization for executing stored

procedures

• Stored procedures’ capabilities within the

server

Page 17: ac-us-06-LDAP Stored Procedures and Triggers arrive in ...people.apache.org/~jim/ApacheCons/ApacheCon2006/slides/FR14/F… · LDAP Stored Procedures and Triggers arrive in ApacheDS

ApacheDS Access Control

Administration; The X.500 Way17

Security Issues and ApacheDS

• Stored procedures

– are standard user objects

– any operation on them is possible

– and subject to access control

• Stored procedures are executed with executor’s

permissions

• Currently, who is authorized to read an SP is also

authorized to execute it

• Currently, execution is not sandboxed

Page 18: ac-us-06-LDAP Stored Procedures and Triggers arrive in ...people.apache.org/~jim/ApacheCons/ApacheCon2006/slides/FR14/F… · LDAP Stored Procedures and Triggers arrive in ApacheDS

ApacheDS Access Control

Administration; The X.500 Way18

Stored Procedures - Briefly

• LDAP stored procedures allow users to

effectively define their own extended

operations without requiring any server

software extensions

Page 19: ac-us-06-LDAP Stored Procedures and Triggers arrive in ...people.apache.org/~jim/ApacheCons/ApacheCon2006/slides/FR14/F… · LDAP Stored Procedures and Triggers arrive in ApacheDS

ApacheDS Access Control

Administration; The X.500 Way19

Triggers for LDAP (Why?)

• Tracking DN references (referential integrity)

• Custom action needs upon some operations

on some entries (logging, firing an external

process)

• Existing solutions lacks some capabilities or

are hard to use (e.g. requires server side plug-

ins)

• It’s better to keep it simple and powerful ;-)

Page 20: ac-us-06-LDAP Stored Procedures and Triggers arrive in ...people.apache.org/~jim/ApacheCons/ApacheCon2006/slides/FR14/F… · LDAP Stored Procedures and Triggers arrive in ApacheDS

ApacheDS Access Control

Administration; The X.500 Way20

A Trigger

<Trigger Specification> :

<Action Time>

<Trigger Event>

<Triggered Action>

Page 21: ac-us-06-LDAP Stored Procedures and Triggers arrive in ...people.apache.org/~jim/ApacheCons/ApacheCon2006/slides/FR14/F… · LDAP Stored Procedures and Triggers arrive in ApacheDS

ApacheDS Access Control

Administration; The X.500 Way21

An LDAP Trigger

• Action Time: AFTER

• Trigger Event: Change inducing LDAP operations

• Triggered Action: LDAP Stored Procedures!

• Which entries is a trigger defined on?– A specific entry

– Trigger Execution Domains

• All these information are stored as regular schema objects (so can be browsed, replicated, etc.)

Page 22: ac-us-06-LDAP Stored Procedures and Triggers arrive in ...people.apache.org/~jim/ApacheCons/ApacheCon2006/slides/FR14/F… · LDAP Stored Procedures and Triggers arrive in ApacheDS

ApacheDS Access Control

Administration; The X.500 Way22

Trigger Specification Examples

• AFTER Delete

CALL “BackupUtilities.backupDeletedEntry”

($ldapContext(“”),$name,$deletedEntry)

• AFTER Add

CALL “Logger.logAddOperation”

($entry,$attributes,$operationPrincipal)

Page 23: ac-us-06-LDAP Stored Procedures and Triggers arrive in ...people.apache.org/~jim/ApacheCons/ApacheCon2006/slides/FR14/F… · LDAP Stored Procedures and Triggers arrive in ApacheDS

ApacheDS Access Control

Administration; The X.500 Way23

Stored Procedures – Triggers

Integration

• SPs can be suplied parameters like:

– operation specific standard request parameters ($entry for

Add, $name for Delete, ...)

– operation specific usefull parameters ($deletedEntry for

Delete, ...)

– generic parameters ($ldapContext, $operationPrincipal, ...)

• All available parameters have predefined

corresponding Java types

• SP call options are supported as specified in the SP

Execution Operation

Page 24: ac-us-06-LDAP Stored Procedures and Triggers arrive in ...people.apache.org/~jim/ApacheCons/ApacheCon2006/slides/FR14/F… · LDAP Stored Procedures and Triggers arrive in ApacheDS

ApacheDS Access Control

Administration; The X.500 Way24

DEMO 1

• Let’s backup an entry when it’s deleted

• Write a Java stored procedure and load it

• Put an entryTriggerSpecification attribute

in an entry– AFTER Delete

– CALL “BackupUtilities.backupDeletedEntry”

– ($ldapContext(“”),$name,$deletedEntry)

Page 25: ac-us-06-LDAP Stored Procedures and Triggers arrive in ...people.apache.org/~jim/ApacheCons/ApacheCon2006/slides/FR14/F… · LDAP Stored Procedures and Triggers arrive in ApacheDS

ApacheDS Access Control

Administration; The X.500 Way25

Was it impressive?

• Not very much!

• The trigger was effective only on a single entry

• And even our trigger specification has been deleted!

• Well, the trigger specification might be effective in

the new location of the entry too

– What if the entry is deleted from the backup context?

– Has anyone said infinite loop?

Page 26: ac-us-06-LDAP Stored Procedures and Triggers arrive in ...people.apache.org/~jim/ApacheCons/ApacheCon2006/slides/FR14/F… · LDAP Stored Procedures and Triggers arrive in ApacheDS

ApacheDS Access Control

Administration; The X.500 Way26

Trigger Execution Domains (DACD)

• X.500 Subentries and subtreeSpecification– A Subentry holds a subtreeSpecification attribute

– subtreeSpecification allows specifying a subtree of entries with chop specifications and refinements

– Other attributes in the Subentry are applied to the selection of entries

– A building block of X.500 Administrative Model

– RFC 3672 - Subentries in the Lightweight Directory Access Protocol

• Trigger Execution Domains

– Instead of entryTriggerSpecification,

– use prescriptiveTriggerSpecification in triggerExecutionSubentry

– to define triggers on a set of entries

Page 27: ac-us-06-LDAP Stored Procedures and Triggers arrive in ...people.apache.org/~jim/ApacheCons/ApacheCon2006/slides/FR14/F… · LDAP Stored Procedures and Triggers arrive in ApacheDS

ApacheDS Access Control

Administration; The X.500 Way27

X.500 Administrative Model

EntriesSubentries

Subentry

RDN attribute

subtreeSpecification attribute

objectClass attribute

(has subentry, ...)

Attributes to be applied to the entries in the subtree (refinement)

Inside a Subentry

Administrative Entry

Page 28: ac-us-06-LDAP Stored Procedures and Triggers arrive in ...people.apache.org/~jim/ApacheCons/ApacheCon2006/slides/FR14/F… · LDAP Stored Procedures and Triggers arrive in ApacheDS

ApacheDS Access Control

Administration; The X.500 Way28

X.500 Administrative Model –

Trigger Execution Aspect

Entries Trigger Execution Subentries

Trigger Execution Subentry

RDN attribute

subtreeSpecificationattribute of Trigger Execution Domain

objectClass attribute

(has subentry and triggerExecutionSubentry

)

prescriptiveTrigger-Specifications to be

applied to the entries in the Trigger Execution Domain

Inside a Trigger Execution Subentry

Trigger Execution Administrative Entry

Page 29: ac-us-06-LDAP Stored Procedures and Triggers arrive in ...people.apache.org/~jim/ApacheCons/ApacheCon2006/slides/FR14/F… · LDAP Stored Procedures and Triggers arrive in ApacheDS

ApacheDS Access Control

Administration; The X.500 Way29

What can be specified(How a TED can be specified)

with a subtreeSpecification ? (1)

Administrative Point

subtreeSpecification= { }

Page 30: ac-us-06-LDAP Stored Procedures and Triggers arrive in ...people.apache.org/~jim/ApacheCons/ApacheCon2006/slides/FR14/F… · LDAP Stored Procedures and Triggers arrive in ApacheDS

ApacheDS Access Control

Administration; The X.500 Way30

What can be specified(How a TED can be specified)

with a subtreeSpecification ? (2)

Administrative Point

subtreeSpecification=

{ base “ou=A” }

ou=A

Page 31: ac-us-06-LDAP Stored Procedures and Triggers arrive in ...people.apache.org/~jim/ApacheCons/ApacheCon2006/slides/FR14/F… · LDAP Stored Procedures and Triggers arrive in ApacheDS

ApacheDS Access Control

Administration; The X.500 Way31

What can be specified(How a TED can be specified)

with a subtreeSpecification ? (3)

Administrative Point

subtreeSpecification=

{ specificExclusions { chopAfter: “ou=A” } }

ou=A

Page 32: ac-us-06-LDAP Stored Procedures and Triggers arrive in ...people.apache.org/~jim/ApacheCons/ApacheCon2006/slides/FR14/F… · LDAP Stored Procedures and Triggers arrive in ApacheDS

ApacheDS Access Control

Administration; The X.500 Way32

What can be specified(How a TED can be specified)

with a subtreeSpecification ? (4)

Administrative Point

subtreeSpecification=

{ specificExclusions { chopBefore: “ou=A” } }

ou=A

Page 33: ac-us-06-LDAP Stored Procedures and Triggers arrive in ...people.apache.org/~jim/ApacheCons/ApacheCon2006/slides/FR14/F… · LDAP Stored Procedures and Triggers arrive in ApacheDS

ApacheDS Access Control

Administration; The X.500 Way33

What can be specified(How a TED can be specified)

with a subtreeSpecification ? (5)

Administrative Point

subtreeSpecification=

{ base “ou=A”, minimum 1, maximum 3 }

ou=A

Page 34: ac-us-06-LDAP Stored Procedures and Triggers arrive in ...people.apache.org/~jim/ApacheCons/ApacheCon2006/slides/FR14/F… · LDAP Stored Procedures and Triggers arrive in ApacheDS

ApacheDS Access Control

Administration; The X.500 Way34

What can be specified(How a TED can be specified)

with a subtreeSpecification ? (6)

Administrative Point

subtreeSpecification=

{ specificationFilter item:student }

Page 35: ac-us-06-LDAP Stored Procedures and Triggers arrive in ...people.apache.org/~jim/ApacheCons/ApacheCon2006/slides/FR14/F… · LDAP Stored Procedures and Triggers arrive in ApacheDS

ApacheDS Access Control

Administration; The X.500 Way35

What can be specified(How a TED can be specified)

with a subtreeSpecification ? (7)

Administrative Point

subtreeSpecification=

{ specificationFilter or: { item:student, item:faculty } }

Page 36: ac-us-06-LDAP Stored Procedures and Triggers arrive in ...people.apache.org/~jim/ApacheCons/ApacheCon2006/slides/FR14/F… · LDAP Stored Procedures and Triggers arrive in ApacheDS

ApacheDS Access Control

Administration; The X.500 Way36

DEMO 2 (Extensive)

• Think about mail lists whose configurations

are stored in a directory

• Mail list members can be added/removed

manually, or according to specific conditions

like being in a specific subtree (or not)

• If a mail list member (likely a person’s entry)

is deleted from DIT, it should also be

unsubscribed from the lists it was member of

Page 37: ac-us-06-LDAP Stored Procedures and Triggers arrive in ...people.apache.org/~jim/ApacheCons/ApacheCon2006/slides/FR14/F… · LDAP Stored Procedures and Triggers arrive in ApacheDS

ApacheDS Access Control

Administration; The X.500 Way37

dc=example,dc=comdc=example,dc=com

ou=Peopleou=People ou=Mailing Listsou=Mailing Lists

ou=Managersou=Managers ou=Engineersou=Engineers

cn=Jimcn=Jim

cn=Johncn=John

cn=Bencn=Ben

cn=Bobcn=Bob

cn=Board

member: cn=Jim,ou=Managers,...

member: cn=John,ou=Managers,...

...

cn=Board

member: cn=Jim,ou=Managers,...

member: cn=John,ou=Managers,...

...

cn=Project Vista

member: cn=John,...

member: cn=Bob,...

cn=Project Vista

member: cn=John,...

member: cn=Bob,...

Sample LDAP Tree

Page 38: ac-us-06-LDAP Stored Procedures and Triggers arrive in ...people.apache.org/~jim/ApacheCons/ApacheCon2006/slides/FR14/F… · LDAP Stored Procedures and Triggers arrive in ApacheDS

ApacheDS Access Control

Administration; The X.500 Way38

Requirements

1. If any person entry under ou=Managers,ou=People is created (Add), add it to the Board list

2. If any person entry under ou=People is deleted, remove it from all lists

3. If any person entry is renamed under ou=People, correct membership registries in all lists

4. If any person entry is moved to ou=Managers,ou=People, add it to the Board list

5. If any person entry is moved from ou=People (to say ou=Fired subtree), remove it from all lists

Page 39: ac-us-06-LDAP Stored Procedures and Triggers arrive in ...people.apache.org/~jim/ApacheCons/ApacheCon2006/slides/FR14/F… · LDAP Stored Procedures and Triggers arrive in ApacheDS

ApacheDS Access Control

Administration; The X.500 Way39

Implementation of Requirement 1

Stored procedurepublic static void subscribeAddedManagerToBoardList(

LdapContext ctx,

Name addedEntryName ) throws NamingException

{

String boardMailListCtxName =

"cn=Board," + mailListsCtxName;

Attributes newMember = new BasicAttributes(

"member",

addedEntryName.toString(),

true );

ctx.modifyAttributes(

boardMailListCtxName,

DirContext.ADD_ATTRIBUTE,

newMember );

}

Page 40: ac-us-06-LDAP Stored Procedures and Triggers arrive in ...people.apache.org/~jim/ApacheCons/ApacheCon2006/slides/FR14/F… · LDAP Stored Procedures and Triggers arrive in ApacheDS

ApacheDS Access Control

Administration; The X.500 Way40

Implementation of Requirement 1

subtreeSpecification

• A subtreeSpecification added in a

triggerExecutionSubentry subordinate to the

domain root

• { base “ou=Managers,ou=People”,

specificationFilter item:person }

Page 41: ac-us-06-LDAP Stored Procedures and Triggers arrive in ...people.apache.org/~jim/ApacheCons/ApacheCon2006/slides/FR14/F… · LDAP Stored Procedures and Triggers arrive in ApacheDS

ApacheDS Access Control

Administration; The X.500 Way41

Implementation of Requirement 1

prescriptiveTriggerSpecification

AFTER Add

CALL “MailListManager.

subscribeAddedManagerToBoardList”

($ldapContext(“”), $entry)

Page 42: ac-us-06-LDAP Stored Procedures and Triggers arrive in ...people.apache.org/~jim/ApacheCons/ApacheCon2006/slides/FR14/F… · LDAP Stored Procedures and Triggers arrive in ApacheDS

ApacheDS Access Control

Administration; The X.500 Way42

To ease the remaining tasks...

• subtreeSpecifications can be reused in the

same subtentry as the

prescriptiveTriggerSpecification attribute is

multi-valued

• Stored procedures can be collected in the

same class and can use each other

Page 43: ac-us-06-LDAP Stored Procedures and Triggers arrive in ...people.apache.org/~jim/ApacheCons/ApacheCon2006/slides/FR14/F… · LDAP Stored Procedures and Triggers arrive in ApacheDS

ApacheDS Access Control

Administration; The X.500 Way43

What’s coming next?

• BEFORE, INSTEADOF Triggers

• Mutable parameters for stored procedure

called from Triggers

Page 44: ac-us-06-LDAP Stored Procedures and Triggers arrive in ...people.apache.org/~jim/ApacheCons/ApacheCon2006/slides/FR14/F… · LDAP Stored Procedures and Triggers arrive in ApacheDS

LDAP Stored Procedures and LDAP Stored Procedures and

Triggers arrive in ApacheDSTriggers arrive in ApacheDS

•Originally presented at ApacheCon US 2006 in Austin

•Latest presentation materials are at http://people.apache.org/~ersiner

•Presented by Ersin Er, [email protected]