前天在数据仓库建立同义词后,把同义词select权限授权给用户stg时,遇到了“ORA-01031: 权限不足”的问题。
让我觉得奇怪的是,该同义词所在的对象本来就是属于stg。  下面演示具体过程:
 
  
  1. sqlplus / as sysdba  
  2. SQL>  create   user  stg identified  by  stg  default  tablespace  "TBSPACE0530" ;  
  3.  
  4. 用户已创建。  

  5.  
  6. SQL>  grant   connectcreate   table   to  stg;  
  7.  
  8. 授权成功。  
  9.  
  10. SQL>  alter   user  stg quota unlimited  on   "TBSPACE0530" ;  
  11.  
  12. 用户已更改。  
  13.  
  14. SQL>  create   user  tar identified  by  tar ;  
  15.  
  16. 用户已创建。  
  17.  
  18. SQL>  grant   connect   to  tar;  
  19.  
  20. 授权成功。 
 
 
  
  1. sqlplus stg/stg@tian  
  2. SQL>  create   table  stg.tmp_test(a number, b varchar2(20));  
  3.  
  4. 表已创建。  
  5.  
  6. SQL>  grant select on stg.tmp_test to tar;  
  7.  
  8. 授权成功。  
 
 
  
  1. sqlplus tar/tar@tian  
  2. SQL>  create  synonym tar.tmp_test  for  stg.tmp_test;  
  3.  
  4. 同义词已创建。  
  5.  
  6. SQL>  grant   select   on  tar.tmp_test  to  stg;  
  7. grant   select   on  tmp_test  to  stg  
  8.                 *  
  9. 第 1 行出现错误:  
  10. ORA-01031: 权限不足  
出现这个问题后,我把授权语句“ grant   select   on  stg.tmp_test  to  tar”加上了"with grant option"后,就可以了。 
 
  
  1. sqlplus stg/stg@tian  
  2. SQL>  grant select on stg.tmp_test to tar with grant option;  
  3.  
  4. 授权成功。
 
 
  
  1. sqlplus tar/tar@tian  
  2. SQL>  grant   select   on  tar.tmp_test  to  stg;  
  3.  
  4. 授权成功。 
 
 
  
  1. sqlplus stg/stg@tian  
  2. SQL>  select  *  from  tar.tmp_test;  
  3.  
  4. 未选定行 
可见,Oracle对权限控制还是很严格的!