首页 > 其他分享 >用户所有表迁移到另外单独用户

用户所有表迁移到另外单独用户

时间:2023-11-08 12:03:43浏览次数:39  
标签:dba object 用户 单独 select owner 迁移 where DCP

1.背景 此前开发申请建立DB用户,dba都是只建立一个给开发使用,权限过大,现在要收缩权限,进行分离,新要求如下: Schema Owner:系统对象所有者(收归dba) --DDL、DQL、DML权限 AP User:系统程式使用 ---DQL、DML权限 Select User:系统维运人员用户--select权限 Mid User:其他系统调用---select权限

2.当前状况: dcp用户需要进行拆分,所有表迁移到dcpdbo下面,禁止dcp用户对表进行异动

3.对象状态检查 查看所有object状态----不只是dcp用户,与DCP相关用户都需要查看,因为可能连带受影响,因为迁移导致失效的,需要手动编译,迁移前就失效的,迁移后不一定能编译成功,能编译的就顺带了。

--总数
select count(*) from dba_objects a where a.owner='DCP';
-- valid invalid 数量
select a.status,count(*) from dba_objects a where a.owner='DCP' group by a.status;
--invalid 类型和数量
select a.owner,a.object_type,count(object_type) from dba_objects a where a.owner='DCP' and a.status='INVALID' group by a.owner,a.object_type  order by a.owner,a.object_type;
--所有invalid详情
select * from dba_objects a where a.owner='DCP' and a.status='INVALID' order by a.owner,a.object_type;

---对user所有object进行编译
select 'alter '||a.object_type ||' '||a.owner||'.'||a.object_name||' compile;' from dba_objects a where a.owner='DCP' and a.status='INVALID' ;

--锁定用户
alter user DCP account lock;

---DCP权限同步赋予DCPdbo
select * from dba_sys_privs a where a.grantee='DCP';
CREATE VIEW

select * from dba_role_privs a where a.grantee='DCP';
RESOURCE_NEW
CONNECT

4.创建新的dcpdbo用户,表空间

create tablespace ndx_dcpdbo datafile '/u02/oradata/SCMGSTDB/ndx_dcpdbo01.dbf' size 20M autoextend on next 16M maxsize 30G;
create tablespace tbs_dcpdbo datafile '/u02/oradata/SCMGSTDB/tbs_dcpdbo01.dbf' size 30G;
alter tablespace tbs_dcpdbo add datafile '/u02/oradata/SCMGSTDB/tbs_DCPdbo02.dbf' size 1G autoextend on next 128M maxsize 30G;


create user DCPdbo identified by "dcpdbo" default tablespace tbs_dcpdbo;
alter user DCPdbo quota unlimited on  tbs_dcpdbo  ;
alter user DCPdbo quota unlimited on  ndx_DCPdbo  ;

grant CREATE VIEW to dcpdbo;
grant RESOURCE_NEW to dcpdbo;
grant CONNECT to dcpdbo;

5.授权收集

--其他用户授权给dcp用户的权限 
select  'grant '||a.privilege||' on '||a.OWNER||'.'||a.TABLE_NAME||' to '||a.GRANTEE||' ;'  from dba_tab_privs a where a.GRANTEE='DCP';

--DCP授权给其他用户的权限,虽然表导入的时候会自动授权,还是需要手动检查一下
select 'grant '||a.privilege||' on '||a.OWNER||'.'||a.TABLE_NAME||' to '||a.GRANTEE||' ;' from dba_tab_privs a where a.owner='DCP';

6.导出导入 --导出DCP 所有表

expdp \'/ as sysdba\' directory=DUMP dumpfile=scmgstdb_dump_DCP_tables_2023_11_06_%U.dmp logfile=scmgstdb_dump_DCP_tables_2023_11_06_exp.log schemas=DCP parallel=4 compression=data_only

impdp \'/ as sysdba\' directory=DUMP dumpfile=scmgstdb_dump_DCP_tables_2023_11_06_%U.dmp logfile=scmgstdb_dump_DCP_tables_2023_11_06_imp.log schemas=DCP parallel=4 remap_schema=DCP:DCPDBO remap_tablespace=TBS_DCP:TBS_DCPDBO,NDX_DCP:NDX_DCPDBO include=table

7.把第五步收集的权限手动执行一下 其他用户授权给pcp权限 DCP 表授权给其他用户的部分 dcpdbo 表增删改查授权给DCP 删除原用户pcp下面的表 创建同义词给dcp(表要先删除,否则同义词创建失败)

select 'grant select,delete,insert,update on DCPDBO.'||a.table_name||' to DCP;' from dba_tables a where a.owner='DCPDBO';

select 'drop table DCP.'||a.table_name||' ;' from dba_tables a where a.owner='DCP';

select 'CREATE OR REPLACE SYNONYM DCP.'||a.table_name||' for DCPDBO.'||a.table_name||' ;' from dba_tables a where a.owner='DCP';


8.问题: 触发器是建立在表上面的,表别删除后,触发器还在吗? --触发器没有了,但是导出导入,触发器会同步导入,如果需要查看trigger内容太,需要给dubug table权限

--补充,部分表使用到sequence作为自增列,需要把DCP sequence授权给DCPdbo,否则后续使用会有问题,

查看默认值是否有使用sequence的表
SELECT a.OWNER,a.TABLE_NAME,a.COLUMN_NAME,a.DATA_TYPE,a.DEFAULT_LENGTH,a.DATA_DEFAULT FROM dba_TAB_COLUMNS a where a.OWNER='DCPDBO' and a.DATA_DEFAULT is not null;

9.invalid重新编译

对比迁移前object 状态,重新去编译
--总数
select count(*) from dba_objects a where a.owner='DCP';
-- valid invalid 数量
select a.status,count(*) from dba_objects a where a.owner='DCP' group by a.status;
--invalid 类型和数量
select a.owner,a.object_type,count(object_type) from dba_objects a where a.owner='DCP' and a.status='INVALID' group by a.owner,a.object_type  order by a.owner,a.object_type;
--所有invalid详情
select * from dba_objects a where a.owner='DCP' and a.status='INVALID' order by a.owner,a.object_type;

---对user所有object进行编译
select 'alter '||a.object_type ||' '||a.owner||'.'||a.object_name||' compile;' from dba_objects a where a.owner='DCP' and a.status='INVALID' ;

10.dcp还有truncate表的需求,目前没有直接权限可以实现,通过存储过程来完成,开发需要该代码

create or replace procedure sys.pro_truncate_dcpdbo_table (table_name in varchar2)is
begin
  execute immediate 'truncate table dcpdbo.'||table_name ;
end;
/

grant execute on pro_truncate_dcpdbo_table to dcp;

标签:dba,object,用户,单独,select,owner,迁移,where,DCP
From: https://blog.51cto.com/u_15367384/8247780

相关文章

  • 用户管理
    一、用户/组概览1.用户标识:UID与GID(1)Linux系统是多用户、多任务的分时操作系统,系统上每一个进程都有一个特定的文件,每个文件都被一个特定的用户所拥有。(2)每个用户都属于一个用户组或多个组,系统可以对一个用户组中的所以用户进行集中管理。(3)id命令可查看当前用户登录信息,UID为......
  • Linux命令之用户管理
    Linux系统时多用户、多任务的分时操作系统,所以说对于多用户的管理也是十分重要的,每个用户都属于一个用户组或多个组,系统可以对一个用户组中的所有用户进行集中管理。组与组的控制权限时不同的,系统根据不同的需求,把用户分别放在不同的组中。1.id命令查看当前用户登录信息:[root@h......
  • 1、Flutter把内容单独抽离成一个组件
    //代码块importMimport'package:flutter/material.dart';voidmain(){runApp(MaterialApp(   theme:ThemeData(     primarySwatch:Colors.yellow //导航栏颜色    ),home:Scaffold(appBar:AppBar(title:co......
  • Azure CLI创建管理员用户
    azadusercreate--display-namead--passwordxxxx--user-principal-namead@abc.inkazroleassignmentcreate--assigneead@abc.ink--roleOwner--scope/subscriptions/xxxxxxxx/Body="{\"principalId\":\"xxxx\",\"roleD......
  • 用户签到
    用户签到1、用户签到-BitMap功能演示用户一次签到,就是一条记录,假如有1000万用户,平均每人每年签到次数为10次,则这张表一年的数据量为1亿条每签到一次需要使用(8+8+1+1+3+1)共22字节的内存,一个月则最多需要600多字节我们如何能够简化一点呢?其实可以考虑小时候一个挺常见的......
  • 如何防止用户阅读Python代码?
    内容来自DOChttps://q.houxu6.top/?s=如何防止用户阅读Python代码?我正在使用Python开发一款软件,该软件将被分发给我雇主的客户。我的雇主希望通过受限时许可证文件来限制软件的使用。如果我们分发.py文件或甚至.pyc文件,那么将很容易(反编译和)删除检查许可证文件的代码。另一......
  • 如何在Vue.js中添加headers(标头) 使用 axios,单独请求,所有请求 添加请求头
    如何在Vue.js中添加headers(标头)使用axios,单独请求,所有请求添加请求头Vue.js是一个流行的前端框架,它以其简单易用的API和高度可组合的架构而闻名。当你构建一个Web应用时,你通常会使用一个HTTP客户端来与API交互。该客户端可以是一个浏览器内部的XMLHttpRequest,也可以......
  • MTK 平台单独编译指令
    记录一下MTK平台单独编译指令,方便后期调试MTK平台编译指令先全编译source环境:sourcebuild/envsetup.shlunch对应编译工程:lunchfull_XXXXX项目-eng(eng可以换成user/userdebug)全部编译:make-j322>&1|teeout/build.log-j32表示使用32个线程来编译该工程,......
  • 昇腾迁移丨4个TensorFlow模型训练案例解读
    本文分享自华为云社区《TensorFlow模型训练常见案例》,作者:昇腾CANN。基于TensorFlow的PythonAPI开发的训练脚本默认运行在CPU/GPU/TPU上,为了使这些脚本能够利用昇腾AI处理器的强大算力,需要将其迁移到昇腾平台。本期分享几个TensorFlow网络迁移到昇腾平台后执行失败或者执行性......
  • sql数据库文件的迁移mdf操作方法
    http://www.pcxitongcheng.com/shujuku/MsSql/2022-11-11/32457.htmlmdf文件很特殊能接触到他的小伙伴很少,但也还是有不少会遇到关于mdf的问题,今天就给你们带来了数据库mdf文件转换为sql文件的详细方法,一起看看吧。sql数据库文件的迁移mdf:1、打开sqlserver控制台。2、选中要......