首页 > 数据库 >oracle 创建中间用户,并授权

oracle 创建中间用户,并授权

时间:2023-11-04 10:34:09浏览次数:28  
标签:execute -- 创建 OBJECT var sql oracle 授权 select

1.当前状况 系统正式用户:ecp 开发用户需求:按工号新增用户,开发以后不使用ecp,而使用工号登录,工号用户需要可以查看ecp所有的对象,但是无法进行删除,修改的动作

2.工号用户:BAC7000370 3.权限授予说明 table----select view ----select trigger ---- debug table(trigger 没有单独的权限,因为trigger是依赖在表上面) package ---- execute (execute/debug 权限都可以看到但是无法修改,下同,只有execute权限,无法查看 package body 的内容,需要 debug权限) package body ---- debug package procedure ---- execute type -----execute type body ---- debug type function ---- execute sequence ---- select (可以调用) 以上所有对象权限都可以在 dba_tab_privs 视图里面查找到(trigger除外,检查trigger是否能被看到,只要检查是否有debug table权限即可)

3.执行

select * from dba_tab_privs a where a.owner='ECP';

--如果量少可以手动拼接语句,手动执行
select 'grant select,delete,insert,update,debug on '||a.owner||'.'||a.table_name||' to BAC7000370;' from dba_tables a where a.owner='ECP';
select 'grant execute,debug on '||a.owner||'.'|| a.object_name||' to BAC7000370;' 
from dba_objects a where a.owner='ECP' and a.object_type='PACKAGE';
....
--如果还需要进一步方便,可以创建同义词
select 'CREATE OR REPLACE SYNONYM BAC7000370.'||a.table_name||' for ecp.'||a.table_name||' ;' from dba_tables a where a.owner='ECP';

4.使用存储过程 前提 有部分ecp的对象调用了其他用户的对象,这部分需要提前连带授权

select * from dba_tab_privs a where a.grantee='ECP';
select 'grant '||a.privilege||' on '||a.owner||'.'||a.table_name||' to '||a.grantee||' with grant option;' from dba_tab_privs a where a.grantee='ECP';
--grant select on pcp.VIEW_SCM_AMOUNT to ecp with grant option;
--grant EXECUTE on pcp.DS_FUNC_DECRYPT_DES to ecp with grant option;
create or replace noneditionable procedure dba_grant_user(var_username in varchar2,var_gonghao in varchar2)
as
num number;
v_table_sql varchar2(4000) ;
--v_table_debug_sql varchar2(4000) ;
v_view_sql varchar2(4000) ;
v_procedure_sql varchar2(4000) ;
v_type_sql varchar2(4000) ;
--v_type_body_sql varchar2(4000) ;
v_function_sql varchar2(4000) ;
v_package_sql varchar2(4000) ;
--v_package_body_sql varchar2(4000) ;

---------------select
--view 
--table

--------------debug table
---trigger 

-------------- execute
--package  procedure FUNCTION TYPE 

------------  debug  
--package body  TYPE BODY

---前提 有部分ecp的对象调用了其他用户的对象,这部分需要提前连带授权

cursor v_table_name is select OBJECT_NAME from dba_objects a where owner =upper(var_username)  and a.OBJECT_TYPE in ('TABLE') ;
cursor v_view_name is select OBJECT_NAME from dba_objects a where owner =upper(var_username)  and a.OBJECT_TYPE in ('VIEW') ;
cursor v_procedure_name is select OBJECT_NAME from dba_objects a where owner =upper(var_username)  and a.OBJECT_TYPE in ('PROCEDURE') ;
cursor v_type_name is select OBJECT_NAME from dba_objects a where owner =upper(var_username)  and a.OBJECT_TYPE in ('TYPE') ;
--cursor v_type_body_name is select OBJECT_NAME from dba_objects a where owner =upper(var_username)  and a.OBJECT_TYPE in ('TYPE BODY') ;
cursor v_function_name is select OBJECT_NAME from dba_objects a where owner =upper(var_username)  and a.OBJECT_TYPE in ('FUNCTION') ;
cursor v_package_name is select OBJECT_NAME from dba_objects a where owner =upper(var_username)  and a.OBJECT_TYPE in ('PACKAGE') ;
--cursor v_objects_name is select OBJECT_NAME from dba_objects a where owner ='ECP'  and a.OBJECT_TYPE in ('JAVA SOURCE') ;



begin
  num :=1;
  loop
  if num=1 then  
    for i in v_table_name loop
     v_table_sql := 'grant select,delete,update,insert,debug on "'||var_username||'"."' || i.OBJECT_NAME|| '" to "'||var_gonghao||'"';
     --v_table_debug_sql := 'grant debug on '||var_username||'.' || i.OBJECT_NAME|| ' to "'||var_gonghao||'"';
     dbms_output.put_line(v_table_sql);
     execute immediate v_table_sql;
     --dbms_output.put_line(v_table_debug_sql);
     --execute immediate v_table_debug_sql;
     end loop;
     
  elsif num=2 then
      for i in v_view_name loop
      v_view_sql := 'grant select on '||var_username||'.' || i.OBJECT_NAME|| ' to "'||var_gonghao||'"';
      dbms_output.put_line(v_view_sql);
      execute immediate v_view_sql;
      end loop;
      
  elsif num=3 then
      for i in v_procedure_name loop
      v_procedure_sql := 'grant execute on '||var_username||'.' || i.OBJECT_NAME|| ' to "'||var_gonghao||'"';
      dbms_output.put_line(v_procedure_sql);
      execute immediate v_procedure_sql;
      end loop;      
      
  elsif num=4 then
     for i in v_type_name loop
     v_type_sql := 'grant execute,debug on '||var_username||'.' || i.OBJECT_NAME|| ' to "'||var_gonghao||'"';
     --v_type_body_sql := 'grant debug on '||var_username||'.' || i.OBJECT_NAME|| ' to "'||var_gonghao||'"';
     dbms_output.put_line(v_type_sql);
     execute immediate v_type_sql;
     --dbms_output.put_line(v_type_body_sql);
     --execute immediate v_type_body_sql;
      end loop;      
  
  elsif num=5 then
     for i in v_function_name loop
     v_function_sql := 'grant execute on '||var_username||'.' || i.OBJECT_NAME|| ' to "'||var_gonghao||'"';
     dbms_output.put_line(v_function_sql);
     execute immediate v_function_sql;
      end loop;   
              
  elsif num=6 then
     for i in v_package_name loop
     v_package_sql := 'grant execute,debug on '||var_username||'.' || i.OBJECT_NAME|| ' to "'||var_gonghao||'"';
     --v_package_body_sql := 'grant debug on '||var_username||'.' || i.OBJECT_NAME|| ' to "'||var_gonghao||'"';
     dbms_output.put_line(v_package_sql);
     execute immediate v_package_sql;
     --dbms_output.put_line(v_package_body_sql);
     --execute immediate v_package_body_sql;
      end loop;     
        
  end if;
    
    num:=num+1;
    exit when num=7;
  end loop;  
end;

说明: 1.因为很多对象都是sys用户的,用system建procedure不方便,需要授权一堆,因此,如果想要system执行,可用sys建立,授权给system执行权限即可,不是system能查到这些视图,就能建立存储过程 grant execute ,debug on sys.dba_grant_user to system;

2.因为有些用户的对象特别的,所以调用时加上dbms_output.enable(buffer_size => null),不然会报错,PLSQL放不下 begin dbms_output.enable(buffer_size => null);

3.v_table_sql := 'grant select,delete,update,insert,debug on "'||var_username||'"."' || i.OBJECT_NAME|| '" to "'||var_gonghao||'"'; 最后是故意没有分号,有分号执行报错,没有分号才行,和拼接语句再执行不太一样,原因不太了解

标签:execute,--,创建,OBJECT,var,sql,oracle,授权,select
From: https://blog.51cto.com/u_15367384/8179634

相关文章

  • 【HTML】第六讲:表格的创建
    熟能生巧@放纵lili一、表格标签的基本介绍。1、<table>标签<table>标签可以用于定义表格对象,同事可以使用其标签设置表格的宽度、对齐方式、背景颜色等样式。其常用的属性有:width宽度、height高度、bgcolor背景颜色、align=“left(左)/center(居中)right(右)”文字水平对齐、valign......
  • 如何从一个标签创建一个新的分支?
    内容来自DOChttps://q.houxu6.top/?s=如何从一个标签创建一个新的分支?我想从一个已有的标签创建一个新的主要分支。比如说我有一个标签v1.0。如何从这个标签创建一个新分支?哇,这比我想象的简单多了:gitcheckout-bnewbranchv1.0如果你运行上面的命令,会得到一个错误:......
  • Oracle 性能检查SQL 语句 转载 https://blog.csdn.net/wan212000/article/details/13
    目录1.Oracle查询SQL语句1.1.性能查询常用SQL1.1.1.查询最慢的SQL1.1.2.列出使用频率最高的5个查询1.1.3.消耗磁盘读取最多的sqltop51.1.4.找出需要大量缓冲读取(逻辑读)操作的查询1.1.5.查询每天执行慢的SQL1.1.6.从V$SQLAREA中查询最占用资源的查询1.1.7.......
  • 用vite创建vue3项目
    打算用vite创建vue3项目1.安装npminitvite-app<项目名称>cd<项目名称>npminstallnpmrundev##执行完以上命令,就意味着你的vue3.0项目已经用上了vite了提示  deprecated 改为:npminit@vitejs/app又提示deprecated  改为:npmcreatevite@latest2输......
  • Oracle中B-tree索引的访问方法(一)-- 索引逻辑结构
    B-tree索引的逻辑结构1.1B-tree索引依据不同的维度,我们可以对索引进行相应的分类。比如,根据索引键值是否允许有重复值,可以分为唯一索引和非唯一索引;根据索引是由单个列,还是由多个列构成,又可以分为单列索引和组合索引(也称之为联合索引);而从索引的数据组织结构上来分类,则最常见的是B-......
  • 创建自定义美颜滤镜:使用第三方美颜SDK的步骤指南
    美颜滤镜在现代移动应用和直播平台中变得越来越受欢迎。它们可以让用户在自拍照片、视频聊天或实时直播中看起来更加美丽和自信。如果您是一位应用开发者,想要增加美颜滤镜功能,但又不想从头开始构建整个系统,那么使用第三方美颜SDK可能是一个明智的选择。第1步:选择适合的第三方美颜SD......
  • 无涯教程-MongoDB - 创建数据库
    在本章中,无涯教程将看到如何在MongoDB中创建数据库。MongoDB使用DATABASE_NAME用于创建数据库,该命令将创建一个新数据库(如果不存在),否则将返回现有数据库。CreateDatabase-语法useDATABASE语句的基本语法如下-useDATABASE_NAMECreateDatabase-示例如果您要使......
  • oracle异常问题ORA-01116、ORA-01110、ORA-27041:无法打开文件
    select*fromdba_data_files;ORA-01116:打开数据文件3出错ORA-01110:数据文件3:'/home/oracle/dmpfile20200903/test_xfh_db.dbf'ORA-27041:无法打开文件Linux-x86_64Error:2:NosuchfileordirectoryAdditionalinformation:301116.00000-"errorinopening......
  • mysql新建库&用户&授权
    1.创建数据库CREATEDATABASEccsacldbCHARACTERSETutf8mb4COLLATEutf8mb4_general_ci;2.创建用户CREATEUSER'usr_ccsacl'@'%'IDENTIFIEDBY'1qaz@WSX';3.授权#开发者权限GRANTSELECT,INSERT,UPDATE,DELETE,CREATE,ALTER,DROPONccsacldb.*TO�......
  • mysql创建systemd管理项
    vim/usr/lib/systemd/system/mysqld.service写入system配置:[Unit]Description=MySQLServerDocumentation=mysqld##mysql参考手册Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.htmlAfter=network.targetAfter=syslog.target[Install]WantedBy=multi-u......