-- 针对 A 用户创建表 test,有两个列 id ,name SQL>create table a.test (id number,name varchar2(20));
Table created. -- 插入两条数据 SQL>insert into a.test values (1,'a');
1row created.
SQL>insert into a.test values (2,'b');
1row created.
SQL>commit;
Commit complete. -- 连接 B 用户查询 A.TEST 表,没有权限 SQL> conn b/b Connected. SQL>select*from a.test; select*from a.test * ERROR at line 1: ORA-00942: tableorview does not exist -- 切换到 SYS 用户 SQL> conn /as sysdba Connected. -- 针对 A.TEST 表中的 NAME 列创建一个视图 A.TEST_NAME SQL>createview a.test_name asselect name from a.test;
View created. -- 连接 B 用户查询 A.TEST_NAME 视图,没有权限 SQL> conn b/b Connected. SQL>select*from a.test_name; select*from a.test_name * ERROR at line 1: ORA-00942: tableorview does not exist
-- 切换到 SYS 用户 SQL> conn /as sysdba Connected. -- 授予视图 A.TEST_NAME 查询权限给 B 用户 SQL>grantselecton a.test_name to b;
Grant succeeded. -- 连接 B 用户查询 A.TEST_NAME 视图,可以查到数据 SQL> conn b/b Connected. SQL>select*from a.test_name;
NAME -------------------- a b -- 同时,B 用户依然没有查询 A.TEST 基表的权限 SQL>select*from a.test; select*from a.test * ERROR at line 1: ORA-00942: tableorview does not exist
SQL>select id from a.test; select id from a.test * ERROR at line 1: ORA-00942: tableorview does not exist