2021年9月

1、技术是为业务服务的,很多时候,技术上是没有障碍的,事情无法推动的真正原因在技术之外,所以从业者应该思考事情的发展,而不是这局限于技术层面。

一、概述
由于XX数据库,各区用户数据都在一个表中,为保护数据安全,需要给不同的区运维人员不同的角色,访问同一张表的不同数据。

二、实现方式
1.给每个区建立一个只读用户
2.给每个需要访问的表建立一个视图,按用户所属区进行筛选
3.授予只读用户访问指定视图的权限

三、操作步骤
--1.建立各区查询用户 --system用户下执行
用户命名格式:区标识_readonly
以宝安区为例:ba_readonly

create user ba_readonly identified by ba_readonly;

--2.赋权限 -连接数据库--system用户下执行

grant connect to ba_readonly

--3.赋权限--建立11个自定义普通视图(system用户执行)
视图格式:OWNERNAME.TABLENAME_地区标识_vw
具体需要建立多少个视图,根据工单申请进行操作。
(如果全部表都需要建立,建议用excel进行拼接,自动生成数据库建表语句)

create view OWNERNAME.TABLENAME_地区标识_vw(name,minsal,maxsal,avgsal)
     AS SELECT e.dname,e.sal,e.sal,e.sal
        FROM    emp e
        WHERE e.deptno=“地区标识”
        GROUP BY e.dname;

授予用户访问普通视图的权限

grant select on OWNERNAME.TABLENAME_地区标识_vw to ba_readonly

--创建按区分类的临时表空间,用于排序

create temporary tablespace 地区_temp
tempfile 'C:\app\Administrator\oradata\orcl\地区_temp.dbf' 
size 500m  
autoextend on  
next 50m maxsize 20480m  
extent management local;  

进一步考虑,需求是否合理,如果大量的表需要手动建立视图,则视图的维护成本很高,是否应该分用户,分表,重新规划数据结构。