`
zhuqinglin
  • 浏览: 27588 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

存储过程之权限复制

阅读更多

CREATE OR REPLACE PROCEDURE "P_PERMISSION_COPY"

(

  V_FROM_RES_ID VARCHAR2,

  V_TO_RES_ID   VARCHAR2,

  V_RETCODE     OUT VARCHAR2,

  V_RETINFO     OUT VARCHAR2

) IS

  /* ------------------------------------------------

   *名称 --%@NAME:  权限管理-角色赋权 复制 v_from_res_id 权限到 v_to_res_id

   *功能描述 --%@COMMENT:  权限管理

   *参数 --%@PARAM:v_from_res_id    

   *参数 --%@PARAM:v_to_res_id     

   *参数 --%@PARAM:V_RETCODE     过程执行返回参数

   *参数 --%@PARAM:V_RETINFO     过程执行错误日志

   *创建人 --%@CREATOR:admin

   *创建时间 --%@CREATED_TIME:

   *备注 --%@REMARK:

   *修改记录 --%@MODIFY:

  -------------------------------------------------*/

 

  V_USERNAME  VARCHAR2(40);

  V_PROCDESC  VARCHAR2(40);

  V_PROCNAME  VARCHAR2(40);

  V_TELE_TYPE VARCHAR2(10);

  V_ROW_NUM   NUMBER;

 

  V_RES_ID   VARCHAR2(30);

  V_SQL      VARCHAR2(1000);

  V_COUNT    NUMBER;

 

  BEGIN

  V_USERNAME  := 'HN_DSS'; --用户名

  V_PROCDESC  := '权限管理'; --过程描述

  V_PROCNAME  := 'P_PURE_USER_PERMISSION'; --过程名

  V_TELE_TYPE := 'ALL'; --网别

  V_ROW_NUM   := 0;

 

  

  -- 获取资源角色权限

  FOR CC_ROLE IN (SELECT *

         FROM HN_DSS.PURE_ROLE_PERMISSION T

         WHERE T.RESOURCES_ID = V_FROM_RES_ID) LOOP

  --先判断该角色是否已有该资源权限

  SELECT COUNT(1)

      INTO V_COUNT

      FROM HN_DSS.PURE_ROLE_PERMISSION A

     WHERE A.ROLE_ID = CC_ROLE.ROLE_ID

       AND A.RESOURCES_ID = V_TO_RES_ID;

  --没有 复制权限

  IF V_COUNT <= 0 THEN

     INSERT INTO HN_DSS.PURE_ROLE_PERMISSION

      (ROLE_ID,

       RESOURCES_ID,

       AUTH_CREATE,

       AUTH_READ,

       AUTH_UPDATE,

       AUTH_DELETE)

     SELECT CC_ROLE.ROLE_ID, V_TO_RES_ID, 0, 1, 0, 0 FROM DUAL;

     V_ROW_NUM := V_ROW_NUM + 1;

     --每复制100条 提交

     IF V_ROW_NUM >= 100 THEN

        COMMIT;

        V_ROW_NUM := 0;

     END IF;

   END IF;

  END LOOP;

  --获取资源用户权限

  FOR CC_USER_PERMISSION IN (SELECT *

       FROM HN_DSS.PURE_USER_PERMISSION T

      WHERE T.RESOURCES_ID = V_FROM_RES_ID) LOOP

   --判断该用户是否已有该资源权限

    SELECT COUNT(1)

      INTO V_COUNT

      FROM HN_DSS.PURE_USER_PERMISSION A

     WHERE A.USER_ID = CC_USER_PERMISSION.USER_ID

       AND A.RESOURCES_ID = V_TO_RES_ID;

   --没有 复制权限

    IF V_COUNT <= 0 THEN

      INSERT INTO HN_DSS.PURE_USER_PERMISSION

        (USER_ID,

         RESOURCES_ID,

         AUTH_CREATE,

         AUTH_READ,

         AUTH_UPDATE,

         AUTH_DELETE)

        SELECT CC_USER_PERMISSION.USER_ID,

               V_TO_RES_ID RESOURCES_ID,

               0,

               1,

               0,

               0

          FROM DUAL;

      V_ROW_NUM := V_ROW_NUM + 1;

     --每复制100条 提交

      IF V_ROW_NUM >= 100 THEN

        COMMIT;

        V_ROW_NUM := 0;

      END IF;

   END IF;

  END LOOP;

  --最后不满100条 提交

  COMMIT;

  V_RETCODE := 'SUCCESS';

  

  EXCEPTION

        WHEN OTHERS THEN

    V_RETCODE := 'FAIL';

    V_RETINFO := SQLERRM;

END P_PURE_USER_PERMISSION;

 

分享到:
评论

相关推荐

    存储过程学习资料

    如果一个用户具有对某个存储过程的执行权限,那么这个用户就可以执行该存储过程,即使他对存储过程中涉及的某些表或其他数据库对象没有权限。这进一步增强了数据库的安全性,因为可以控制不同用户对数据库的操作范围...

    将一个文件夹复制到另一个文件夹中并保留其权限

    当源文件夹为NTFS格式时,如果目标文件夹为FAT格式,那么复制过程中可能无法完全保留原有的文件权限,因为FAT文件系统本身不支持复杂的权限管理机制。 **3. 系统文件和隐藏文件** 默认情况下,`Xcopy`命令不会复制...

    解决SQL下数据库修改删除用户未能找到存储过程问题

    1. **存储过程未被正确复制或导入**:在从一个数据库复制到另一个数据库的过程中,如果存储过程没有被正确地复制或导入,就会导致这种错误。 2. **数据库版本不兼容**:不同的SQL Server版本之间可能存在一定的差异...

    数据库方面存储过程教程

    - `FOR REPLICATION`:表示该存储过程可用于复制。 #### 五、示例:创建一个简单的存储过程 假设我们需要创建一个存储过程,用于查询员工表中的所有记录: ```sql CREATE PROCEDURE GetEmployees AS BEGIN ...

    oracle存储过程unwrap解密工具.zip

    Oracle存储过程unwrap解密工具主要用于处理Oracle数据库中的加密存储过程。在Oracle数据库系统中,为了保护敏感代码或数据,开发人员有时会选择对存储过程进行加密。然而,当需要查看、调试或恢复这些加密的存储过程...

    深入学习存储过程--存储过程精解

    存储过程的优点包括提高性能(因为SQL语句预编译并缓存)、增强安全性(通过权限控制访问)、简化复杂操作(将多条SQL语句封装在一起)以及减少网络流量(一次性发送和执行整个过程)。 在实际应用中,存储过程可以...

    Oracle_PLSQL_存储过程

    - **存储过程作用:** 在Oracle中,存储过程可以用于封装这些规则和逻辑,使之成为可重用的组件。 **创建权限:** - **CREATE PROCEDURE权限:** 允许用户创建存储过程。 - **CREATE ANY PROCEDURE权限:** 允许...

    sql2005存储过程解密工具

    1. 访问权限:解密工具需要具有足够的SQL Server权限,才能读取和解密存储过程。 2. 法律合规:在解密他人的存储过程时,必须确保拥有适当的授权,遵循版权和隐私法规。 3. 数据安全:虽然解密工具可以帮助理解存储...

    存储过程以及视图关键字搜索工具

    3. 内容复制:方便用户复制存储过程或视图的定义,以便在其他地方使用或进一步编辑。 4. 结果保存:可以保存搜索结果,便于后续参考或与其他团队成员共享。 综上所述,掌握存储过程和视图的使用以及如何有效地搜索...

    Mysql手册20-存储过程和函数

    MySQL存储过程和函数是数据库编程的重要组成部分,它们提供了在数据库服务器上执行特定任务的能力。本部分详细介绍了存储程序和函数的各个方面,包括它们的创建、语法、权限控制以及与性能优化相关的概念。 首先,...

    精通MySQL存储过程和函数

    3. **增强安全性:** 可以通过限制对存储过程的访问权限来提高系统的安全性。 4. **事务处理:** 在存储过程中可以很容易地实现复杂的事务处理逻辑。 5. **性能优化:** 服务器可以缓存存储过程的执行计划,减少资源...

    SQL SERVER 存储过程学习笔记(摘自网络)

    4. **安全性**:通过权限控制,可以限制某些用户只能访问特定的存储过程,从而提高数据的安全性。 创建存储过程使用`CREATE PROCEDURE`语句,其基本语法如下: ```sql CREATE PROCEDURE procedure_name @...

    VB.NET中调试存储过程

    此外,为了调试T-SQL,需要在服务器端的sp_sdidebug扩展存储过程中赋予EXECUTE权限。这是位于master数据库中的一个过程,通常只有系统管理员才有权执行。正确设置权限后,用户就能在服务器的任何数据库中调试存储...

    SQLSERVER存储过程大总结.doc

    同时,存储过程也可以增强安全性,因为可以控制对它们的访问权限,而不是直接访问底层表。 总之,SQL Server的存储过程是数据库开发中的重要工具,它们允许开发者创建可重复使用的、灵活的、高效的数据处理逻辑,有...

    oracle存储过程学习经典[语法+实例+调用]

    - `AUTHID DEFINER`:表示存储过程内的操作权限与创建存储过程的用户相同。 #### 四、Oracle存储过程中的常见问题 1. **数据表别名**:在Oracle中,定义数据表别名时不能使用`AS`关键字。 2. **SELECT INTO**:在...

    SQL Server常用的系统存储过程应用实例

    最后,`sp_column_privileges`存储过程用于查询数据库中表或视图列的权限信息。它可以提供关于哪些用户或角色对特定列具有何种级别的访问权限的详细报告。 总的来说,这些系统存储过程是SQL Server管理中不可或缺的...

    linux下mysql的操作与存储过程

    在提供的文件中,`创建存储过程.txt`可能包含了一个或多个存储过程的创建示例,可以将其内容复制到MySQL客户端执行。`table.txt`可能是描述数据库表结构的文件,通常包含`CREATE TABLE`语句,用于创建数据表。 四、...

    存储过程精解,主要将的存储过程的用法

    `FOR REPLICATION`选项用于创建在复制过程中使用的存储过程,这些过程不能在订阅服务器上直接执行。 5. **执行存储过程**:使用`EXECUTE`或`EXEC`语句调用存储过程,例如`EXEC procedure_name @param1=value1, @...

    MSSQL用户表、视图、存储过程转SQL

    确保在新环境中正确设置权限,以便用户表、视图和存储过程能够正常工作。同时,如果你在迁移过程中涉及数据,记得也要考虑数据迁移的策略,如是否需要完全复制数据,或者只保留结构。 总之,将MSSQL的用户表、视图...

Global site tag (gtag.js) - Google Analytics