db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Mamta A. Satoor (JIRA)" <derby-...@db.apache.org>
Subject [jira] Commented: (DERBY-1539) As per the functional spec attached to DERBY-1330, a trigger should be dropped when a privilege required by the trigger is revoked.
Date Sat, 22 Jul 2006 03:49:14 GMT
    [ http://issues.apache.org/jira/browse/DERBY-1539?page=comments#action_12422810 ] 
            
Mamta A. Satoor commented on DERBY-1539:
----------------------------------------

Dan, the answer to your question "Why does the PermissionDescriptor the dependency manager
is working with only have a UUID? " is that the Dependency Manager while working on finding
dependents calls DDdependableFinder.getDependable with just the UUID of the PermissionDescriptor(BTW,
this is generic logic and not specific to PermissionDescriptor). And from that UUID, DDdependableFinder
gets the PermissionDescriptor using dd.getTablePermissions (dependableObjectID); on line 354.
The code for dd.getTablePermissions(UUID) goes through the hashing code to find out if a PermissionDescriptor
for UUID alreadys exists in the hashtable(at this point in the code path, we do not know tableUUID
and that is why I had to change hashCode to use UUID for generating the hash key). 

One way to get around this hashing key issue for revoke privileges would be to bypass the
hash table and go straight to the system tables to get the PermissionDescriptor using the
UUID. So, we will bypass hash table only in case of revoke privilege statement when the dependency
manager is working on sending revoke related actions to the PermissionDescriptor's dependents.


This can be implemented by changing following method in DataDictionary
    public TablePermsDescriptor getTablePermissions( UUID tablePermsUUID)
    throws StandardException
	{
        TablePermsDescriptor key = new TablePermsDescriptor( this, tablePermsUUID);
        return (TablePermsDescriptor) getPermissions( key);
	}
New implementation for the method above will look as follows
    public TablePermsDescriptor getTablePermissions( UUID tablePermsUUID)
    throws StandardException
	{
        TablePermsDescriptor key = new TablePermsDescriptor( this, tablePermsUUID);
        return getUncachedTablePermsDescriptor(key);
	}
With this change, we will not need the changes suggested by me on DERBY-1539, patch DERBY1539V1hashCodeEqualsDiff.txt

The good thing about this change would be that we will not use 2 different hash codes for
the same object. The bad thing is that for revoke privilege, dependency manager will need
to always goto system tables for PermissionDescriptor before it can send actions to dependents.


> As per the functional spec attached to DERBY-1330, a trigger should be dropped when a
privilege required by the trigger is revoked.
> -----------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: DERBY-1539
>                 URL: http://issues.apache.org/jira/browse/DERBY-1539
>             Project: Derby
>          Issue Type: New Feature
>          Components: SQL
>    Affects Versions: 10.2.0.0
>            Reporter: Mamta A. Satoor
>         Assigned To: Mamta A. Satoor
>             Fix For: 10.2.0.0
>
>         Attachments: DERBY1539V1hashCodeEqualsDiff.txt, DERBY1539V1hashCodeEqualsStat.txt
>
>
> A trigger tracks its privileges requirements using Derby's Dependency Manager. If any
one of those required privileges are revoked, the trigger should be dropped automatically.

> I am just creating a new jira entry here so it is easier to track sub items of DERBY-1330.
Will link this Jira entry to DERBY-1330.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Mime
View raw message