Hi Hiranya,

Thanks for tackling this project. Some comments inline...

Hiranya Jayathilaka wrote:
Hi Devs,

I have started writing code for my GSoC project (SQL authorization support for dblook). To start with I developed some basic data structures to store the information (permissions, authorization Ids etc) regarding persistent database objects. Using these basic structures I've developed a class which will act as the blueprint of the dblook dependency graph as well as the role dependency graph.

I've already done some coding related to the construction of the dependency graph. Before I go any further I would like to get a couple of things clarified.

1.The documentation on system tables implies that only views, constraints and triggers can directly depend on another persistent object. (I'm referring to the SYSDEPENDS table here) Have I understood that correctly? Won't there be any situations where, say a table, is dependent on another object?
A table can depend on a function. This is because the table could have a generated column whose generation clause invokes a user-defined function. I believe that the dependency ordering is this:

jarFiles < databaseProperties < functions+procedures < tables < constraints+views < triggers+indexes

Constraints can reference other constraints and views can reference other views. So those objects need further sub-sorting.

If you also created relevant permissions at each level, I think that you would end up with a script which would run correctly.

2.What is the DDL statement we should generate to create a database connection as a particular user and what is the statement to close it? (I'm currently saving authentication Ids associated with each object in the graph vertices and I can use that information to generate a connection establishment statement prior to actually creating the object.)
Derby doesn't have a SQL statement for creating a database connection. Connections are JDBC objects and they are obtained from the java.sql.DriverManager or from a javax.sql.DataSource or a javax.sql.ConnectionPoolDataSource. Information on how to get a Connection bound to a particular user can be found at http://db.apache.org/derby/docs/10.5/ref/ref-single.html#rrefjdbc27433

The ij tool, however, does have a CONNECT statement for obtaining a connection and giving it a name which you can reference later on: http://db.apache.org/derby/docs/10.5/tools/tools-single.html#rtoolsijcomref22318

To close a java.sql.Connection, call its close() method. If you are using the ij tool, you can use the DISCONNECT command: http://db.apache.org/derby/docs/10.5/tools/tools-single.html#rtoolsijcomref20382

Bear in mind that creating a connection owned by a user implies that you know the user's password. In general your tool will not have this information. If you need to masquerade as a particular user, you will need to override the authentication scheme.


3.It appears after creating a table we have to do two types of permission grants - Table permission grants (from SYSTABLEPERMS table) and column permission grants (from SYSCOLPERMS table). Is that correct?
Yes.

Hope this helps,
-Rick

Some insight on these matters would be most appreciated.

Thanks,
Hiranya

--
Hiranya Jayathilaka
E-mail: [email protected] <mailto:[email protected]>; Mobile: +94 77 633 3491
Blog: http://techfeast-hiranya.blogspot.com

Reply via email to