Hi,

we're having heavy performance problems with Rhino Security. We use:
- Rhino Security from trunk as of 2009-03-25
- Sybase SQL Anywhere 10.0.1 as DB with latest updates (10.0.1.3835)

The produced (slow, ~ 7 sec.) SQL is:

SELECT
    count(*)
FROM
    Adressen this_
WHERE
    1 = (
        SELECT TOP 1 START AT 1
            this_0_.Allow as y0_
        FROM
            security_Permissions this_0_
        inner join
            security_Operations op1_
                on this_0_.Operation=op1_.Id
        left outer join
            security_EntitiesGroups entitygrou2_
                on this_0_.EntitiesGroup=entitygrou2_.Id
        left outer join
            security_EntityReferencesToEntitiesGroups entities7_
                on entitygrou2_.Id=entities7_.GroupId
        left outer join
            security_EntityReferences entitykey3_
                on entities7_.EntityReferenceId=entitykey3_.Id
        WHERE
            op1_.Name in ('/DataAccess/Address/Select', '/DataAccess/
Address', '/DataAccess')
            and this_0_.UsersGroup =
'a99075b1-05c7-4fe0-91e5-9bd80112ff11'
            and (
                (this_.fldsecurityid = this_0_.EntitySecurityKey or
this_.fldsecurityid = entitykey3_.EntitySecurityKey)
                or (this_0_.EntitySecurityKey is null and
this_0_.EntitiesGroup is null)
                                )
        ORDER BY
            this_0_.Level desc, this_0_.Allow asc
    )


But the only one that's fast enough (< 0.1 sec) is:

SELECT
    count(*) as c
FROM
    Adressen this_
WHERE
    1 = (
        SELECT TOP 1 START AT 1
            t.y0_
        from (
                        SELECT
                                this_0_.Allow as y0_, this_0_.Level , 
this_0_.Allow
                        FROM
                                security_Permissions this_0_
                        inner join
                                security_Operations op1_
                                        on this_0_.Operation=op1_.Id
                        left outer join
                                security_EntitiesGroups entitygrou2_
                                        on this_0_.EntitiesGroup=entitygrou2_.Id
                        left outer join
                                security_EntityReferencesToEntitiesGroups 
entities7_
                                        on entitygrou2_.Id=entities7_.GroupId
                        left outer join
                                security_EntityReferences entitykey3_
                                        on 
entities7_.EntityReferenceId=entitykey3_.Id
                        WHERE
                                op1_.Name in ('/DataAccess/Address/Select', 
'/DataAccess/Address',
'/DataAccess')
                                and this_0_.UsersGroup = 
'a99075b1-05c7-4fe0-91e5-9bd80112ff11'
                                and (
                                        (this_.fldsecurityid = 
entitykey3_.EntitySecurityKey)
                                )
                        UNION
                        SELECT
                                this_0_.Allow as y0_, this_0_.Level , 
this_0_.Allow
                        FROM
                                security_Permissions this_0_
                        inner join
                                security_Operations op1_
                                        on this_0_.Operation=op1_.Id
                        left outer join
                                security_EntitiesGroups entitygrou2_
                                        on this_0_.EntitiesGroup=entitygrou2_.Id
                        left outer join
                                security_EntityReferencesToEntitiesGroups 
entities7_
                                        on entitygrou2_.Id=entities7_.GroupId
                        left outer join
                                security_EntityReferences entitykey3_
                                        on 
entities7_.EntityReferenceId=entitykey3_.Id
                        WHERE
                                op1_.Name in ('/DataAccess/Address/Select', 
'/DataAccess/Address',
'/DataAccess')
                                and this_0_.UsersGroup = 
'a99075b1-05c7-4fe0-91e5-9bd80112ff11'
                                and (
                                        (this_0_.EntitySecurityKey is null and 
this_0_.EntitiesGroup is
null)
                                )
                )
                as t
        order by
                t.Level desc, t.Allow asc
        )

The main problem is that the OR operator at this position is very
slow ...
Any idea how we can modify Rhino Security to produce the second SQL
statement?

Regards,
Mark Junker

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Rhino Tools Dev" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/rhino-tools-dev?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to