如何保护存储过程代码

作者:无名 - 数据库 -

介绍

每个开发人员都特别关心她/他如何制作/他的sql代码对象的最佳安全性。 出于这个原因,我们将进行加密。 加密是一个好的但不是完全成立的过程。 在本文中,我将向你展示一些保护 sql server 代码对象的最佳实践。

除非绝对必要,不要加密

当你将基于 sql server的应用程序分发给客户和它的他第三方时,你可能会尝试对存储过程。函数和类似的对象。 显然这可以保护代码免窥探,防止人们在没有你的知识的情况下改变你的代码。

也就是说,除非你对被盗的机密或者专有信息有真正的关注,我建议不要加密 sql server 对象。 对我来说,加密 sql server 对象通常比它所需要的麻烦。 将源代码加密为 sql server 对象有许多缺点。 让我们来讨论其中的几个。

一个,加密对象不能是脚本,即使是企业管理器。 也就是说,一旦过程或者函数被加密,你就不能从 sql server 中检索它的源。 在 sql server 早期版本中解码加密源的已经知但未记录的方法不再工作,它的他方法也不支持。 但是如果你尝试使用默认选项编写一个加密对象,那么新脚本会有一个针对对象的drop 语句,而不是一个 create。 相反,你将看到一个有用的注释,通知你脚本加密的对象不受( 然而显然除去它们) 支持。 如果运行这里脚本,则对象将丢失。 将被删除,但不会重新创建。

两个,加密对象不能作为 sql server 复制的一部分发布。 如果你的客户设置了复制操作以保持多个服务器同步,则如果你加密代码,则会遇到。

3,你无法检查版本信息( 例如由源代码管理系统插入的)的源代码。 因为客户可以在较新的版本上重新安装旧版本的备份,因这里可以在客户服务器上查看版本信息。 如果代码已经加密,则不能轻松执行这里操作。 如果不是,并且在源代码中包含版本信息,应该能够轻松确定客户正在使用的对象版本。

如何保护存储过程代码?

当将应用程序部署到客户端服务器或者共享 sql server 时,常常会关注你的业务逻辑。 由于存储过程中的代码经常是专有的,因这里我们可以能希望保护我们的sql工作。 在 sql server 中有一个简单的方法来实现这个目的,而不是:

createprocedure dbo.example asbeginselect'sql statements'endgo

你可以使用 with encryption 选项:

createprocedure dbo.example with encryption asbegin 

select'sql statements'end

现在,在保存过程之后,确保保存存储过程的逻辑在安全的地方。

现在你会注意到,当你尝试在管理器的企业gui中打开过程时,你将收到以下错误:

microsoft sql-dmo 

error 20585: [sql-dmo]

/******

encrypted object is not transferable,

and script can not be generated.

******/

当你尝试使用 sp_helptext 来检查代码时。

exec sp_helptext 'example'

。你将得到以下错误:

the object comments have been encrypted. 

不幸的是,至少有两种方法可以克服这种。 一个是在执行存储过程时运行sql探查器;这通常可以显示过程本身的文本( 比如 )。 如果它有批处理,动态 sql,等等 )。 如果未初始安装,用户可以删除存储过程或者删除数据库,启动分析器跟踪,并要求你创建它们,然后再重新创建。 你可以通过在代码中嵌入 sp_password 来防止探查器将文本显示为 snoopers,作为注释:

createprocedure dbo.example with encryption asbegin 

select'sql statements'

-- comment: sp_password end

引用

有关这里主题的更多信息,请参见链接。

结束语

我希望这篇文章对你有帮助。 enjoy!

历史记录

  • 30th 2009年07月: 初始帖子



文章标签:codprocstore过程protect

IT人知识库 该篇知识地址:http://www.itpeo.net/12720/4630559.html





rfedfre

如何创建你的第一个 SQL Server 集成服务( SSIS ) 包第 1部分

ssis_example.zip 23.82 kb目录介绍什么是ssis包?功能ssis导入/导出向导创建或者维护ssi ...

rfedfre

SQL Server 存储过程概述

目录概述什么是存储过程?系统存储过程用户存储过程创建存储过程性能注意事项网络注意事项存储过程的工作原理。参数使用情况调用 ...

如何将 DevExpress XAF SecuritySystemUser迁移到 PermissionPolicyUser

介绍我花时间迁移xaf现有安全系统到新改进的策略许可系统,我想分享我的经验和代码,任何人谁可能决定这个endevour的 ...

在Ubuntu 16.04上,如何备份和还原PostgreSQL数据库

介绍postgresql是一个免费的开源数据库管理系统,可用于存储与网站相关的信息,它也被称为postgres ,软件本 ...

请在Centos 7上会Mariadb从5.50版本升级到10.2版本

本文是为plesk 12.5和plesk onyx 17.x编写的,在这些版本中,plesk附带mariadb v5.5 ...

在Ubuntu 16.04上,如何安装Apache,MySQL和PHP

注意:本文中的命令需要sudo访问。步骤1:安装apache首先,更新软件包管理器。sudo apt-get updat ...

在Ubuntu 17.04上,如何安装Apache,MySQL和PHP

在本文中,我会介绍如何在ubuntu 17.04上创建一个lamp堆栈。注意:本文中的命令需要sudo或root访问,如 ...

在Ubuntu 14.04和16.04上,如何安装和安全的phpMyAdmin

前提条件一个新的ubuntu 14.04或16.04服务器实例,静态服务器ip (这是你的主服务器ip ),有sudo权 ...

关于Ubuntu 16.04,如何备份恢复或传输mysql/MariaDB数据库

备份是处理数据库的重要部分,无论你是运行企业站点,还是只运行wordpress,备份数据库都是很重要的,云服务商会提供免 ...

使用Docker编写一个PHP应用

php应用程序通常由web服务器,关系数据库系统和语言解释器本身组成,在本教程中,我们会利用docker实现一个完整的p ...

获得允许的扩展storedProcedures列表,供常用使用

下载脚本- 820介绍对于你拥有多少扩展 storedprocedures,你可以在自己的sql查询/storedpro ...

在你的数据库中,有多少个记录?

介绍数据库中有多少条记录? 你可能认为你需要编写一个巨大的sql语句。 本文将向你展示,你可以轻松地做到这一点。不是很有 ...

收缩数据库事务日志的过程

下载脚本 2.54 kb介绍什么是收缩数据库? 实际上,为了增加 sql server 磁盘空间,收缩数据库的任务被使用 ...

使用事务SQL从用户定义文件路径中获取文件名或者文件扩展名的简便方法

下载脚本- 865介绍本文将演示如何使用事务sql获取文件名或者文件扩展名。背景几次,开发人员只需要将文件名或者文件扩展 ...

rfedfre

SQL案例表达式的简单用法

下载脚本 1.11 kb目录简介什么是案例表达式?案例表达式的语法sql案例语句的示例示例使用案例表达式基本在存储过程中 ...

rfedfre

自动生成 C# 数据访问层

从sourceforge下载项目源码,exe和用户手册内容简介初步设计背景信息使用图形用户界面的开始一个新项目。输入一个 ...

自定义业务对象 helper 类

下载源文件 14.22 kb介绍在花费了很多时间输入从 datareader 返回的值以分配值之后,我开始认为有一个更好 ...

持久排列

下载 pl/sql源代码和演示 5.47 kb。介绍从关系数据库获取有序数据集的常用方法是使用sql子句 order b ...

rfedfre

在关系数据库中,一般树保持不变

下载源代码 8.58 kb抽象画本文提出了一些常用的子父父格式下在关系数据库中实现计算的技术。 另一种更好的格式。介绍关 ...

rfedfre

将MySQL迁移到 Microsoft SQL Server

介绍本文介绍了将mysql迁移到 sql server 2005中的几个简单步骤。 这种技术非常简单,但如果你计划从my ...