实现目标:DM7 E8800用户下数据与XOPENS用户下数据实现相互查询
一、 创建用户及表空间:
1、创建XOPENS表空间及用户:
create tablespace “XOPENS” datafile ‘/dbdata/dmdata/LSS/xopens_1.dbf’ size 128 autoextend on maxsize 67108863 CACHE = NORMAL;
create user XOPENS identified by dameng123 default tablespace XOPENS;
2、创建E8800表空间及用户:
create tablespace “XOPENS” datafile ‘/dbdata/dmdata/LSS/xopens_1.dbf’ size 128 autoextend on maxsize 67108863 CACHE = NORMAL;
create user E8800 identified by dameng123 default tablespace E8800;
二、 测试用户下数据:
1、 在XOPENS用户下创建测试表XOPENS_TEST
create table XOPENS.XOPENS_TEST(ID INT,NAME VARCHAR(32));
insert into XOPENS.XOPENS_TEST values(1,‘tom’);
2、 在E8800用户下创建测试表E8800_TEST
create table E8800.E8800_TEST(ID INT,NAME VARCHAR(32));
insert into E8800.E8800_TEST values(1,‘keivn’);
3、 在XOPENS用户下测试数据权限:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210414092600545.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI2Njk4OTI1,size_16,color_FFFFFF,t_70
!](https://img-blog.csdnimg.cn/20210414092713535.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI2Njk4OTI1,size_16,color_FFFFFF,t_70)
4、 在E8800用户下测试数据权限:
三、 为了实现两个用户下表项目访问,编写存储过程如下:
CREATE OR REPLACE PROCEDURE GRANT_ROLE_PRIVILEGE(READ_SCHEMA VARCHAR(128),ROLE_NAME VARCHAR(128),TYPE_NAME VARCHAR(128)) AS
DECLARE
SQL_TEXT VARCHAR(30000);
TAB_NAME VARCHAR(128);
V_CUR CURSOR;
BEGIN
OPEN V_CUR FOR SELECT TABLE_NAME FROM DBA_TABLES WHERE OWNER= READ_SCHEMA;
LOOP
FETCH V_CUR INTO TAB_NAME;
EXIT WHEN V_CUR%NOTFOUND;
SQL_TEXT='GRANT ’ || TYPE_NAME || ’ ON ’ || READ_SCHEMA || ‘."’ ||TAB_NAME|| '" TO ’ || ROLE_NAME;
–PRINT SQL_TEXT;
EXECUTE IMMEDIATE SQL_TEXT;
END LOOP;
CLOSE V_CUR;
END;
call GRANT_ROLE_PRIVILEGE(‘XOPENS’,‘E8800’,‘SELECT’);
call GRANT_ROLE_PRIVILEGE(‘E8800’,‘XOPENS’,‘SELECT’);
四、 测试数据访问结果:
1、 在XOPENS用户下访问E8800用户下表数据:
2、 在E8800用户下访问XOPENS用户下表数据: