Hi Hiranya,

Thanks for continuing to push this project forward. Some comments inline...

Hiranya Jayathilaka wrote:
Hi Rick,

Thanks for the explanation. See my comments inline.

On Mon, Jul 20, 2009 at 9:45 PM, Rick Hillegas <[email protected] <mailto:[email protected]>> wrote:

    Hiranya Jayathilaka wrote:

        One more question.
        We initially intended to use a dependency graph to capture the
        dependencies among different roles. But looking at the
        SYSROLES table and the existing role handling code I'm not
        sure whether we really need that. Isn't creating all the roles
        in one swoop and then performing all the grants (also recorded
        in SYSROLES table) sufficient? I can't seem to realize how
        this will break any inter-dependencies among roles.

    Hi Hiranya,

    I think that the creating of roles and granting of roles to roles
can all be done at once.

+1. This is handled by the existing code as well (According to DERBY-3877 it was implemented by Dag). So I should be able to reuse it as it is. All the role creation and granting of roles will be carried out as the DBO.
    It is the granting of privileges to the roles that has to be
interleaved with the creation of other objects.

I'm a little bit confused about this requirement. From the discussion in DERBY-3877 I got the impression that if all the objects are created by its actual owner with the proper roles set, then object should get created correctly with all dependencies intact. Isn't that sufficient?
Or the confusion may be mine. To help us understand one another, I am attaching a script. In this script:

1) the select_role is granted select privilege on table t1
2) alice sets herself to select_role in order to create a view on t1

At the end of the script, I revoke the select privilege from the role. This causes alice's view to be dropped. I am including this step because we may need to explore this issue later on. For the moment, assume that the last set of actions by the administrator don't happen. That is, lop off the end of the script so that the view is not dropped and it must be recreated by dblook.

Here is what I don't understand about your proposal: In the dblook script, where did you envision doing step (1)?

Use this command to run the script:

java -\
 -Dderby.connection.requireAuthentication=true  \
 -Dderby.authentication.provider=BUILTIN \
 -Dderby.user.admin=adminpassword \
 -Dderby.user.alice=alicepassword \
 -Dderby.user.ruth=ruthpassword \
 -Dderby.database.sqlAuthorization=true \
 org.apache.derby.tools.ij script.sql

Here is script.sql:

--
-- Original script to create a view which depends on a role grant.
--
connect 'jdbc:derby:memory:temp;create=true;user=admin;password=adminpassword' as admin_conn;

create role select_role;

grant select_role to ruth;
grant select_role to alice;

connect 'jdbc:derby:memory:temp;user=ruth;password=ruthpassword' as ruth_conn;

create table t1( a int );
insert into t1( a ) values ( 1 );

connect 'jdbc:derby:memory:temp;user=alice;password=alicepassword' as alice_conn;

-- fails because alice does not have select privilege on t1
create view v1 ( a ) as select * from ruth.t1;

set connection ruth_conn;

grant select on t1 to select_role;

set connection alice_conn;

set role select_role;

-- now works because alice has set herself to a role which
-- has the correct privilege
create view v1 ( a ) as select * from ruth.t1;

set role none;

--
-- This is the optional end of the script.
--
set connection admin_conn;

-- as a super user, the admin can select from the view
select * from alice.v1;

-- now revoke alice's rights. this drops the view.
revoke select_role from alice;

-- note that the view has been dropped
select * from alice.v1;


Do I need to explicitly grant privileges to roles at different stages of the script? Where in the system tables these privileges are recorded so I can retrieve them in dblook?

The privileges (including grants to roles) are recorded in a number of system tables: SYSCOLPERMS, SYSROUTINEPERMS, SYSTABLEPERMS. In all of these tables, the grantee could be a role or a user.

Thanks,
-Rick

Reply via email to