热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

Oracle中加密PL/SQL代码

加密一个PLSQL单元就是隐藏PLSQL代码的过程。可以使用oracle提供的wrap工具和DBMS_DDL进行加密。wrap工具在命令行运行来处理一

加密一个PL/SQL单元就是隐藏PL/SQL代码的过程。可以使用oracle提供的wrap工具和DBMS_DDL进行加密。wrap工具在命令行运行来处理一

下面不才根据Oracle官方文档讲解一下如何加密PL/SQL代码,希望大家共同学习:

主要内容包含以下三块:

  • 一、什么叫加密(二进制文件的混淆技术混淆 Obfuscation)?

    加密一个PL/SQL单元就是隐藏PL/SQL代码的过程。可以使用oracle提供的wrap工具和DBMS_DDL进行加密。

    wrap工具在命令行运行来处理一个输入的SQL 文件,例如SQL*PLUS的安装脚本。DBMS_DDL子程序加密单个动态生成的PL/SQL 单元,例如一个‘CREATE PROCEDURE’声明。

    加密的优点:

    1. 防止其他开发人员滥用你的应用或者商业竞争者偷看你的逻辑。

    2. 加密后即使通过USER_SOURCE、ALL_SOURCE或者DBA_SOURCE数据字典看不见源代码 。

    3. SQL*PLUS可以处理加密后的程序。

    4. 导入导出工具也支持加密代码,你可以备份或者移动已经加密的存储过程。

    对加密的一些提示:

    1. 当加密一个包或者对象类型,只加密包体不加密声明。这就允许开发人员看见将要使用的包或类型的声明,但是看不到实现。

    2. 加密后的源码不可以编辑,如果要修改可以编辑源代码,然后再加密。你也可以推迟加密操作到源代码最终被应用。

    3. 为了确保所有重要的源代码都被加密,最好加密后在编辑器中查看确认。

    加密方法的局限性:

    1. 虽然加密帮助隐藏源程序的逻辑并且使解密变的异常困难,Oracle并不推荐使用该方法加密用户密码和表名。

    加密PL/SQL代码不能绝对阻止一切试图查看源代码的操作。

    2. 加密不支持触发器,为了隐藏一个触发器的工作,我们可以写一个one-line触发器来调用已经加密的存储过程。

    3. 加密的过程并不会去检查PL/SQL代码中的语法或者语义上的错误,例如表或视图不存在。这些错误只有在编译或执行的时候才会检查被发现。

    4. 被加密的PL/SQL程序不能导入到低版本的数据库中,Oracle支持是向上兼容,不支持向下兼容。例如,你能装载在V8.15上加密过的文件到

    V8.16,但是反过来就不行!

    5. 由于源代码是PL/SQL编译器解析,而不是SQL*PLUS,,所以要使用wrap工具加密的PL/SQL代码中不能使用SQL*PLUS符号声明的替代变量。

    6. 绝大多数的注释将在加密的文件中去处。See .

    7.如果调用DBMS_SQL.PARSE方法解析已通过DBMS_DDL.WRAP加密的PL/SQL单元时遇到语句使用了超过32767的VARCHAR2文本类型 ,需要设置LFFLG参数为

    FALSE。否则DBMS_SQL.PARSE往加密的单元中新增行将会破坏程序单元!

    二、使用WRAP工具加密PL/SQL代码:

    wrap工具介绍:

    1.warp只处理PL/SQL块,不会处理匿名块或者触发器或者非PL/SQL块。

    2. 语法如下:

    wrap iname=input_file [Oname=output_file] 注:等号左右不能有空格

    input_file 是包含SQL语句的文件名,扩展名不写默认为.sql,也可以使用其他扩展格式:

    例如:

    wrap iname=/mydir/myfile
    wrap iname=/mydir/myfile.sql
    wrap iname=/mydir/myfile.src

    output_file 是加密后生成的文件名,扩展名为.pld。也可以使用其他扩展格式:

    例如:

    wrap iname=/mydir/myfile.sql Oname=/mydir/myfile.plb

    wrap iname=/mydir/myfile Oname=/yourdir/yourfile.out

    wrap使用案例:

    For example, assume that the wrap_test.sql file contains the following:

  • SQL> conn hr/hr
  • 已连接。
  • SQL> conn hr/hr 已连接。 PL/SQL 过程已成功完成。

    加密过程如下:

    1. 保存wraptest.sql文件到d盘根目录:

    2.命令行中输入以下语句:

    三、使用DBMS_DDL子程序加密PL/SQL代码:

    DBMS_DDL子程序介绍:

    dbms_dll包含WRAP函数和CREATE_WRAPPED存储过程来加密单独的PL/SQL块,如包声明,包体,函数,存储过程,类型声明或者类型体。这些重载的子程序提供加密动态生成的PL/SQL块的机制。

    DBMS_DDL子程序使用案例:

    声明以下语句,并调用DBMS_DDL进行加密:

    查看USER_SOURCE中 emp_actions包的源代码是否加密:

    ...............

    ---------------------------------------------------

    made by dylan.


    推荐阅读
    • 在使用 SQL Server 时,连接故障是用户最常见的问题之一。通常,连接 SQL Server 的方法有两种:一种是通过 SQL Server 自带的客户端工具,例如 SQL Server Management Studio;另一种是通过第三方应用程序或开发工具进行连接。本文将详细分析导致连接故障的常见原因,并提供相应的解决策略,帮助用户有效排除连接问题。 ... [详细]
    • 七款高效编辑器与笔记工具推荐:KindEditor自动换行功能解析
      本文推荐了七款高效的编辑器与笔记工具,并详细解析了KindEditor的自动换行功能。其中,轻笔记QingBiJi是一款完全免费的记事本软件,用户可以通过其简洁的界面和强大的功能轻松记录和管理日常事务。此外,该软件还支持多平台同步,确保用户在不同设备间无缝切换。 ... [详细]
    • Node.js 配置文件管理方法详解与最佳实践
      本文详细介绍了 Node.js 中配置文件管理的方法与最佳实践,涵盖常见的配置文件格式及其优缺点,并提供了多种实用技巧和示例代码,帮助开发者高效地管理和维护项目配置,具有较高的参考价值。 ... [详细]
    • 在Android应用开发中,实现与MySQL数据库的连接是一项重要的技术任务。本文详细介绍了Android连接MySQL数据库的操作流程和技术要点。首先,Android平台提供了SQLiteOpenHelper类作为数据库辅助工具,用于创建或打开数据库。开发者可以通过继承并扩展该类,实现对数据库的初始化和版本管理。此外,文章还探讨了使用第三方库如Retrofit或Volley进行网络请求,以及如何通过JSON格式交换数据,确保与MySQL服务器的高效通信。 ... [详细]
    • 利用源链接技术调试ASP.NET Core源代码的方法与实践
      本文详细探讨了通过源链接技术调试ASP.NET Core源代码的实用方法,旨在为开发者提供高效、准确的调试技巧,适用于学习和实际工作中遇到的相关问题。希望读者能从中获得有价值的参考和启发。 ... [详细]
    • 如何在Sublime Text 3中将文件编码格式设置为UTF-8
      本文详细介绍了在Sublime Text 3中将文件编码格式设置为UTF-8的具体步骤。通过这些方法,用户可以轻松实现文件编码的转换,确保文本在不同系统和平台上的兼容性和一致性。对于经常需要处理多语言文本的开发者来说,这一技巧尤为实用。希望本文能为读者提供有价值的参考。 ... [详细]
    • PHP与MySQL的Web应用开发技术深入解析
      PHP与MySQL的Web应用开发技术深入解析 ... [详细]
    • 在VMware虚拟机中部署带有中文图形界面的CentOS 7 Linux系统
      本文详细介绍了在VMware虚拟机中部署带有中文图形界面的CentOS 7 Linux系统的步骤。首先,通过“文件”菜单选择“新建虚拟机”并进入自定义设置。接着,在硬盘兼容性选项中选择默认设置。为了更好地进行Linux操作系统的安装练习,建议选择稍后安装操作系统,并在虚拟机安装完成后,根据实际需求删除不必要的硬件组件。此外,本文还提供了详细的配置参数和注意事项,帮助用户顺利完成整个部署过程。 ... [详细]
    • 微软近日宣布,将在Windows 10的WSL(Windows Subsystem for Linux)中引入重大更新,支持运行带有图形用户界面(GUI)的Linux应用程序。这一举措不仅提升了Windows 10在开发环境中的灵活性和兼容性,也进一步挑战了Linux在桌面领域的地位。通过此次更新,用户可以在Windows 10上无缝运行Linux GUI应用,无需额外安装虚拟机或双系统,极大地简化了开发和测试流程。这标志着微软在提升跨平台开发体验方面迈出了重要一步。 ... [详细]
    • 在 Windows Vista 及其他版本的 Windows 系统中,用户可能会遇到“组策略”无法启动的问题。组策略通过修改注册表中的特定项来实现对系统的配置,相比手动编辑注册表,它提供了更安全、便捷和灵活的管理方式,因此受到广大用户的青睐。然而,当这一重要工具失效时,用户需要采取有效的措施来解决问题,确保系统的正常运行。 ... [详细]
    • 提升开发技能的八大策略与方法
      许多前端开发人员和客户都在寻求具备创新和技术能力的专业人才,但往往由于缺乏足够的曝光度和声誉,这些人才难以被潜在客户发现。本文将介绍八种有效策略和方法,帮助开发者提升技能并增强市场竞争力。 ... [详细]
    • 如何在Mac上构建高效的本地服务器环境
      在Mac上构建高效的本地服务器环境,首先需要了解基本步骤:1. 配置目录基础;2. 启动Apache服务;3. 添加自定义文档至本地服务器;4. 查看自定义效果。此外,还可以通过手机或其他电脑访问本机服务器,以确保跨设备的兼容性和调试效果。Mac系统自带的Apache服务为本地开发提供了便捷的工具,本文将详细介绍每个步骤的具体操作方法。 ... [详细]
    • 在 openSUSE Tumbleweed 系统上搭建 51 单片机开发环境并进行编程实践。首先,通过 `sudo zypper in emacs` 命令安装文本编辑器 Emacs。接着,使用 `sudo zypper in sdcc` 安装 SDCC 编译器。最后,利用 `wget` 下载 sdcflash Python 脚本,以便于单片机的烧录和调试。此外,还介绍了如何配置开发环境,确保各组件协同工作,提高开发效率。 ... [详细]
    • 虚拟机网络设置与数据库远程连接优化指南
      本文针对个人计算机上虚拟机网络配置与数据库远程连接的问题,提供了一套详细的优化指南。在探讨远程数据库访问前,需确保网络配置正确,特别是桥接模式的设置。通过合理的网络配置,可以有效解决因虚拟机或网络问题导致的连接失败,提升远程访问的稳定性和效率。 ... [详细]
    • 在MySQL中实现时间比较功能的详细解析与应用
      在MySQL中实现时间比较功能的详细解析与应用。本文深入探讨了MySQL中时间比较的实现方法,重点介绍了`UNIX_TIMESTAMP`函数的应用。该函数可以接收一个日期时间参数,也可以不带参数使用,其返回值为Unix时间戳,便于进行时间的精确比较和计算。此外,文章还涵盖了其他相关的时间处理函数和技巧,帮助读者更好地理解和掌握MySQL中的时间操作。 ... [详细]
    author-avatar
    mobiledu2502880051
    这个家伙很懒,什么也没留下!
    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有