Oracle下用户对象的迁移,包(package),表,试图,序列

问题:       在开发系统时候,有时我们希望能够限制前端页面对数据库的访问行为,比如在Oracle数据库当中,我们采用A用户创建数据库的表结构,package,视图,序列,因此A用户具有访问这些对象的所有权限,

          如果前端页面是另一个团队(BTeam)开发,另一个团队对数据库的表结构了解不够熟悉,为了防止BTeam错误的操作导致数据的混乱,我们为BTeam用户创建一个用户B,BTeam通过用户B来访问A用户下

          创建的对象,由于BTeam通过B用户来访问数据库,此时在数据库层面可以限制B用户的访问权限,从而在一定程度上防止BTeam错误的操作导致数据库中数据的混乱。

                此时开发一个较大的系统时,A用户下可能会存在很多对象,那么如果把A用户的对象批量的授权给B用户呢? 脚本如下

        

--授权并创建同义词

 declare
       CURSOR c_tabname is
         SELECT object_name FROM user_objects
         where object_type   in(‘TABLE‘);
       v_tabname dba_tables.table_name%TYPE;
       sqlstr    VARCHAR2(200);

      CURSOR c_package IS
      SELECT object_name FROM user_objects
         where object_type   in(‘PACKAGE‘);
       r_package c_package%ROWTYPE;

      CURSOR c_view_seq IS
        SELECT object_name FROM user_objects
         where object_type   in(‘VIEW‘,‘SEQUENCE‘);

      r_view_seq  c_view_seq%ROWTYPE;

      CURSOR c_synonym IS
        select ‘ create public synonym ‘||OBJECT_NAME||‘ for userA.‘||OBJECT_NAME||‘;‘  syn_create,
               ‘ drop  public synonym ‘||OBJECT_NAME   syn_drop       

        from user_objects
          where object_type
           in(‘TABLE‘,‘VIEW‘,‘PROCEDURE‘,‘SEQUENCE‘,‘PACKAGE‘);

        r_syn c_synonym%ROWTYPE;

     begin
      open c_tabname;
      loop
         fetch c_tabname
         into v_tabname;
         exit when c_tabname%NOTFOUND;
         sqlstr := ‘grant select, update, insert on userA.‘ || v_tabname ||
                ‘ to userB;‘;
         dbms_output.put_line(sqlstr);
        execute immediate sqlstr;

    end loop;
    close c_tabname;

    FOR r_package IN c_package LOOP
       sqlstr := ‘grant execute on userA.‘ || r_package.object_name ||
                ‘ to userB;‘;
         dbms_output.put_line(sqlstr);
         execute immediate sqlstr;

    END LOOP;

  dbms_output.put_line(‘视图和序列‘);
   FOR r_view_seq IN c_view_seq LOOP
       sqlstr := ‘grant select on userA.‘ || r_view_seq.object_name ||
                ‘ to userB;‘;
         dbms_output.put_line(sqlstr);
         execute immediate sqlstr;

    END LOOP;
   --创建同义词
   dbms_output.put_line(‘创建同义词!‘);
   FOR r_syn IN c_synonym LOOP 

    BEGIN
      sqlstr := r_syn.syn_drop;
      dbms_output.put_line(sqlstr);

      EXECUTE IMMEDIATE sqlstr;  

      sqlstr := r_syn.syn_create;
      dbms_output.put_line(sqlstr);

      EXECUTE IMMEDIATE sqlstr;
     EXCEPTION
       WHEN OTHERS THEN
         NULL;
     END ;

   END LOOP;

  END;
时间: 2024-07-31 06:55:17

Oracle下用户对象的迁移,包(package),表,试图,序列的相关文章

oracle清除用户对象

在使用Oracle数据库的时候,经常会遇到需要把一个用户的所有对象重新导入的操作.这里介绍两种常用的方法,方便大家使用. 一.使用drop user cascade; 可以删除用户及所相关的所有对象,可以通过重新创建一个同名对象,然后使用imp 命令从dmp文件导入新的对象. 二.通过脚本把清空用户的所有对象,包含数据表.函数.存储过程等其他对象.采用这种方法,可以无需dba权限,在你需要完整导入一个用户数据的时候非常好用. 附:清除用户对象脚本 --PL/SQL Developer Test

Oracle审计相关对象的迁移

目录 创建审计用的表空间 在线迁移 查询结果 在日常的数据库维护中,经常出现因为数据库登录审计的功能启动,导致system表空间被用满.从而出现异常,一般建议把aud$相关对象迁移到其他表空间,从而避免system被用完的风险. 步骤如下: 创建审计用的表空间 [email protected]> create tablespace audit_data logging datafile '/oracle/oradata/kyeupdbfs/audit_data.dbf' 2 size 20m

生产环境下,oracle不同用户间的数据迁移。第三部分

任务名称:生产环境下schema ELON数据迁移至schema TIAN########################################前期准备:1:确认ELON用户下的对象状态select owner,constraint_name,constraint_type,table_name,status,validated from dba_constraints where owner='ELON'owner constraint_name constraint_type ta

生产环境下,oracle不同用户间的数据迁移。第二部分

任务名称:生产环境下schema ELON数据迁移至schema TIAN######################################## 测试二:测试参数remap_tablespace 导出schema ELON的全部数据:[[email protected] ~]$expdp system/xxxxxx SCHEMAS=ELON directory=EXPDP_DIR dumpfile =ELON_`date +"%Y%m%d%H%M%S"`.dmp logfil

Oracle系列:(21)访问其他用户下的对象[授权]

声明:scott或hr叫用户名/方案名/空间名 scott--tiger hr-----lion 查询当前用户是谁 show user; 查询scott自己表空间下的所有对象时,可加,或不加用户名select * from emp; select * from emp; 或 select * from scott.emp; 以sysdba身份解锁hr普通帐户 alter user hr account unlock; 以sysdba身份设置hr普通帐户的密码 alter user hr iden

oracle下导出某用户所有表的方法

scott/tiger是用户名和密码,handson是导出的实例名 按用户方式导出数据(owner当中写的是用户名) exp scott/[email protected] file=scott_back owner=scott 按表方式导出数据(talbes当中写的是全部表的名称) exp scott/[email protected] tables=(emp, dept) file=scott_back_tab 按表空间方式导出数据(tablespaces当中写的是表空间名称) exp sy

oracle的用户创建以及要注意的权限,角色,对象等管理

创建用户; create user 例子: create user lv identified by m215957055; 其中lv是用户名,m215957055是用户名.但是要注意的是,创建之后你是连不上这个数据库的,以为你还没有赋给他权限, 下面让我们来了解一下: 一.权限分类: 系统权限:系统规定用户使用数据库的权限.(系统权限是对用户而言). 实体权限:某种权限用户对其它用户的表或视图的存取权限.(是针对表或视图而言的). 二.系统权限管理: 1.系统权限分类: DBA: 拥有全部特权

ORACLE授权用户查询另一个用户下的表与视图

实际应用中,会遇到在某个用户下需要查询另一个用户下的表数据或视图的情况,然而在没有授权时,会提示无权限操作的错误.那就需要通过授权处理后,再能进行查询操作,下面我们来看看是怎么处理的. 一.系统权限说明: 1.用户权限 CREATE SESSIOIN 连接到数据库 CREATE TABLE    在用户的方案中创建表 CREATE SEQUENCE 在用户的方案中创建序列 CREATE VIEW     在用户的方案中创视图 CREATE PROCEDURE在用户的方案中创建存储过程,函数或包

Oracle同一个用户下启动多个数据库实例

[email protected] oradata]$ export ORACLE_SID=APPDB[[email protected] oradata]$ lsnrctl startLSNRCTL for Linux: Version 11.2.0.4.0 - Production on 22-MAY-2014 11:42:15Copyright (c) 1991, 2013, Oracle.  All rights reserved.TNS-01106: Listener using li