[ 
https://issues.apache.org/jira/browse/DERBY-6491?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13921927#comment-13921927
 ] 

Rick Hillegas commented on DERBY-6491:
--------------------------------------

Hi Mamta,

Yes, I agree that overhauling UDT privilege management is outside the limited 
focus of this issue on the SELECT statement. Thanks.

> SELECT statements incorrectly require USAGE privilege on column types
> ---------------------------------------------------------------------
>
>                 Key: DERBY-6491
>                 URL: https://issues.apache.org/jira/browse/DERBY-6491
>             Project: Derby
>          Issue Type: Bug
>          Components: SQL
>    Affects Versions: 10.11.0.0
>            Reporter: Rick Hillegas
>         Attachments: derby-6491-aa-stopRequiringUsagePriv.diff, 
> derby-6491-ab-stopRequiringUsagePriv.diff
>
>
> A Derby SELECT requires that the user enjoy USAGE privilege on the types of 
> all columns in the tables being read. This even includes USAGE privilege on 
> the types of columns which are not being read. The latter privilege certainly 
> seems overbroad. But I don't think that USAGE privilege should even be 
> required on the types of columns being SELECTed. I can't find any language in 
> the SQL Standard requiring this.
> This interpretation is in line with the general principle that the user who 
> creates a table must enjoy privilege to use and execute functions and types 
> mentioned in the table definition, but other users who access that table only 
> need the correct INSERT/UPDATE/DELETE/SELECT privileges and otherwise operate 
> under the aegis of the table owner.
> This interpretation of the Standard agrees with the behavior of DB2, as 
> described here: 
> http://pic.dhe.ibm.com/infocenter/iseries/v7r1m0/index.jsp?topic=%2Fdb2%2Frbafzgntudtp.htm
>  I think that Derby also incorrectly requires USAGE privilege on the types of 
> arguments/return values of routines when invoking those routines. But that is 
> a separate issue which I do not want to address with this JIRA.
> The following script shows the overbroad USAGE requirements of SELECT 
> statements:
> {noformat}
> connect 'jdbc:derby:memory:db;user=test_dbo;create=true';
> call syscs_util.syscs_create_user( 'TEST_DBO', 'test_dbopassword' );
> call syscs_util.syscs_create_user( 'RUTH', 'ruthpassword' );
> connect 'jdbc:derby:memory:db;shutdown=true';
> connect 'jdbc:derby:memory:db;user=test_dbo;password=test_dbopassword' as dbo;
> create type SourceUnreferencedType_045 external name 'java.util.HashMap' 
> language java;
> create type SourceValueType_045 external name 'java.util.HashMap' language 
> java;
> create table sourceTable_045
> (
>     sourceUnreferencedColumn SourceUnreferencedType_045,
>     sourceValueColumn SourceValueType_045
> );
> grant select( sourceValueColumn ) on sourceTable_045 to ruth;
> connect 'jdbc:derby:memory:db;user=ruth;password=ruthpassword' as ruth;
> -- incorrectly fails because ruth does not have USAGE privilege on 
> SourceUnreferencedType_045
> select sourceValueColumn from test_dbo.sourceTable_045;
> set connection dbo;
> grant usage on type SourceUnreferencedType_045 to ruth;
> set connection ruth;
> -- incorrectly fails because ruth does not have USAGE privilege on 
> SourceValueType_045
> select sourceValueColumn from test_dbo.sourceTable_045;
> set connection dbo;
> grant usage on type SourceValueType_045 to ruth;
> set connection ruth;
> -- succeeds now that ruth has USAGE privilege on both types
> select sourceValueColumn from test_dbo.sourceTable_045;
> {noformat}



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to