前天在数据仓库建立同义词后,把同义词select权限授权给用户stg时,遇到了“ORA-01031: 权限不足”的问题。
让我觉得奇怪的是,该同义词所在的对象本来就是属于stg。 下面演示具体过程:
-
sqlplus / as sysdba
-
SQL> create user stg identified by stg default tablespace "TBSPACE0530" ;
-
用户已创建。
-
-
SQL> grant connect , create table to stg;
-
-
授权成功。
-
-
SQL> alter user stg quota unlimited on "TBSPACE0530" ;
-
-
用户已更改。
-
-
SQL> create user tar identified by tar ;
-
-
用户已创建。
-
-
SQL> grant connect to tar;
-
-
授权成功。
-
sqlplus stg/stg@tian
-
SQL> create table stg.tmp_test(a number, b varchar2(20));
-
-
表已创建。
-
-
SQL> grant select on stg.tmp_test to tar;
-
-
授权成功。
-
sqlplus tar/tar@tian
-
SQL> create synonym tar.tmp_test for stg.tmp_test;
-
-
同义词已创建。
-
-
SQL> grant select on tar.tmp_test to stg;
-
grant select on tmp_test to stg
-
*
-
第 1 行出现错误:
-
ORA-01031: 权限不足
出现这个问题后,我把授权语句“
grant
select
on
stg.tmp_test
to
tar”加上了"with grant option"后,就可以了。
-
sqlplus stg/stg@tian
-
SQL> grant select on stg.tmp_test to tar with grant option;
-
-
授权成功。
-
sqlplus tar/tar@tian
-
SQL> grant select on tar.tmp_test to stg;
-
-
授权成功。
-
sqlplus stg/stg@tian
-
SQL> select * from tar.tmp_test;
-
-
未选定行
可见,Oracle对权限控制还是很严格的!
转载于:https://blog.51cto.com/tianyu1102/534425