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

Daniel Dai commented on HIVE-15120:
-----------------------------------

Create external table do require write permission for the directory, here is 
the stack if not:
{code}
        StorageBasedAuthorizationProvider.checkPermissions(FileSystem, 
FileStatus, EnumSet<FsAction>, String) line: 412 
        StorageBasedAuthorizationProvider.checkPermissions(Configuration, Path, 
EnumSet<FsAction>) line: 377    
        StorageBasedAuthorizationProvider.authorize(Path, Privilege[], 
Privilege[]) line: 350   
        StorageBasedAuthorizationProvider.authorize(Table, Privilege[], 
Privilege[]) line: 195  
        AuthorizationPreEventListener.authorizeCreateTable(PreCreateTableEvent) 
line: 265       
        AuthorizationPreEventListener.onEvent(PreEventContext) line: 140        
        HiveMetaStore$HMSHandler.firePreEvent(PreEventContext) line: 2148       
        HiveMetaStore$HMSHandler.create_table_core(RawStore, Table, 
EnvironmentContext, List<SQLPrimaryKey>, List<SQLForeignKey>) line: 1354    
        HiveMetaStore$HMSHandler.create_table_with_environment_context(Table, 
EnvironmentContext) line: 1442    
        NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not 
available [native method]  
        NativeMethodAccessorImpl.invoke(Object, Object[]) line: 57      
        DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 43  
        Method.invoke(Object, Object...) line: 606      
        RetryingHMSHandler.invokeInternal(Object, Method, Object[]) line: 140   
        RetryingHMSHandler.invoke(Object, Method, Object[]) line: 99    
        $Proxy20.create_table_with_environment_context(Table, 
EnvironmentContext) line: not available   
        
ThriftHiveMetastore$Processor$create_table_with_environment_context<I>.getResult(I,
 create_table_with_environment_context_args) line: 10939     
        
ThriftHiveMetastore$Processor$create_table_with_environment_context<I>.getResult(Object,
 TBase) line: 10923     
        
ThriftHiveMetastore$Processor$create_table_with_environment_context<I>(ProcessFunction<I,T>).process(int,
 TProtocol, TProtocol, I) line: 39     
        TUGIBasedProcessor$1.run() line: 110    
        TUGIBasedProcessor$1.run() line: 106    
        AccessController.doPrivileged(PrivilegedExceptionAction<T>, 
AccessControlContext) line: not available [native method]   
        Subject.doAs(Subject, PrivilegedExceptionAction<T>) line: 415   
        UserGroupInformation.doAs(PrivilegedExceptionAction<T>) line: 1628      
        TUGIBasedProcessor<I>.process(TProtocol, TProtocol) line: 118   
        TThreadPoolServer$WorkerProcess.run() line: 286 
        ThreadPoolExecutor.runWorker(ThreadPoolExecutor$Worker) line: 1145      
        ThreadPoolExecutor$Worker.run() line: 615       
        Thread.run() line: 745  
{code}

Only at deletion time, we distinguish external table and managed table, which 
is inconsistent. Not sure why we do that initially, but to maintain backward 
compatibility, I will still use a flag for this.

> Storage based auth: allow option to enforce write checks for external tables
> ----------------------------------------------------------------------------
>
>                 Key: HIVE-15120
>                 URL: https://issues.apache.org/jira/browse/HIVE-15120
>             Project: Hive
>          Issue Type: Bug
>          Components: Authorization
>            Reporter: Thejas M Nair
>            Assignee: Daniel Dai
>
> Under storage based authorization, we don't require write permissions on 
> table directory for external table create/drop.
> This is because external table contents are populated often from outside of 
> hive and are not written into from hive. So write access is not needed. Also, 
> we can't require write permissions to drop a table if we don't require them 
> for creation (users who created them should be able to drop them).
> However, this difference in behavior of external tables is not well 
> documented. So users get surprised to learn that drop table can be done by 
> just any user who has read access to the directory. At that point changing 
> the large number of scripts that use external tables is hard. 
> It would be good to have a user config option to have external tables to be 
> treated same as managed tables.
> The option should be off by default, so that the behavior is backward 
> compatible by default.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to