您的位置:首页 > 职场人生

删除危险的存储过程

2010-05-12 19:11 127 查看
SQL Server 2005是目前企业中经常使用的数据库之一。尤其是在大中型企业中,合理的部署数据库系统将会大大提升企业的办公效率。掌握数据库中的关键技术将有利与更好的管理企业的办公系统。存储过程就是其中一项非常实用的技术。
1. [/b]存储过程的概念:[/b]
存储过程(Stored Procedure)是一组为了完成特定任务或功能的SQL语句的集合。它是经过编译的并且存储在数据库当中,当用户有需要时,可以通过指定存储过程并增加相关的参数来执行它。
SQL Server中的存储过程分为系统存储过程和自定义存储过程两类:
1). 系统存储过程
它是在安装好SQL Server时就默认存储在Master数据库系统当中的。主要是从系统表中来获取一些信息。从而方便管理员对于SQL Server的管理。这类存储过程虽然被放在Master数据库中,但并不妨碍用户在其他数据库中对它的调用。如果希望在其他数据库中调用系统存储过程,只需要直接调用系统存储过程的名称就可以了。不需要再在存储过程名前增加数据库名。系统存储过程是以SP_为前缀的。
2).自定义存储过程
自定义存储过程是用户根据自己的需要创建的存储过程。主要是为了完成一些特定的功能。
2. [/b]使用存储过程的优点:[/b]
1). 执行速度和效率高
存储过程的执行速度要快于普通的SQL语句,因为在执行存储过程之前,数据库已经对它进行了语法和句法的分析,并给出了优化执行方案。这样可以极大的改善SQL语句的性能,使存储过程能以极快的速度执行。
2). 允许以标准组件式编程
由于工作需要。很多SQL语句会需要反复使用。为了避免重复编写SQL语句增加工作量,可以编写存储过程完成以上的需要。因为存储过程可以在程序使用时反复的被调用。而且可以随时根据需要对存储过程进行修改。从而也极大的提高了程序的可移植性。
3). 降低网络的通信流量
对于同一个针对数据库对象的操作(例如:增、删、改、查语句),如果操作所涉及的T-SQL语句被组织成一个存储过程,那么当在用户的计算机上调用该存储过程时,网络中传送的只是该调用语句,否则将会传送多条SQL语句,从而增大了网络流量,降低了网络的负载能力。
4). 可以被作为一种安全机制来利用
管理员通过对执行某个存储过程的权限进行限制,从而能够实现对相应的数据访问权限的限制,避免非授权用户对数据的访问,保证数据的安全性。
3. [/b]创建并调用存储过程:[/b]
存储过程的常用格式如下:
Create procedure procedure_name
[@parameter data_type][output]
[with]{recompile|encryption}
As sql_statement
注释:
Output: 表示此参数可以传回
With {recompile|encryption}
Recompile:表示每次执行存储过程都会被重新编译一次
Encryption:对创建的存储过程进行加密
案例需求:Benet公司使用SQL Server 2005搭建了数据库服务器,并创建了Employees表用来存储公司的员工信息。管理员需要经常通过查询语句来随时查看所有员工的情况,为了简化操作的步骤,需要通过存储过程来实现。
具体操作步骤如下:
1)首先要保证数据库服务器中已经存在了Benet数据库,并且在数据库中存在Employees表,如图1.1:
[align=center][/align]
[align=center]图1.1 Benet数据库中的Employees表[/align]
2)在对象资源管理器中输入如下代码;
create proc emp as select * from Employees
并执行,从而生成名为emp的存储过程,如图1.2:
[align=center][/align]
[align=center]图1.2 生成名为select_employees的存储过程[/align]
3)在对象资源管理器中输入如下代码;
Exec emp
可以得到希望查询的结果,即公司目前有三名员工,而且每名员工的情况都可以看到,如图1.3所示:
[align=center][/align]
[align=center]图1.3 执行emp存储过程的结果[/align]
4. [/b]删除危险的存储过程:[/b]
存储过程在为用户管理数据库提供了很大的方便的同时也存在着很大的安全隐患。如果不能正确的使用和管理存储过程,将会对公司的网络安全造成非常大的影响。目前常见的比较危险的存储过程主要包括:
1. xp_cmdshell
这个存储过程是系统安装好之后预先提供的。主要目的是使管理员以操作系统命令行解释器的方式执行给定的命令字符串,并以文本行方式返回任何输出。属于扩展的存储过程。一般情况下是被禁用的。该存储过程对于管理员的管理并不是必需的。但是由于微软系统设计的关联性较强。导致如果开启此存储过程,可能会导致别有用心的人很容易再破解了数据库系统之后,直接***到操作系统中,所以建议禁用该存储过程。禁用方法如下:
1) 单击“开始”-“所有程序”-“Microsoft SQL Server 2005”-“配置工具”-“SQL外围应用配置器”,如图1.4
[align=center][/align]
[align=center]图1.4 SQL Server 2005外围应用配置器[/align]
2) 单击“功能的外围应用配置器”,“xp_cmdshell”,将“启用xp_cmdshell”的勾去掉,单击“确定”,即可禁止xp_cmdshell的存储过程。如图1.5;
[align=center][/align]
[align=center]图1.5 禁用xp_cmdshell的存储过程[/align]
2.其他危险的存储过程:
微软为了系统整理操作性的考虑,在SQL Server中内置了一些对于注册表或系统操作的存储过程。它们的存在也会使系统的安全大大的讲解。所以建议一并删除掉。具体包含哪些存储过程和删除方法如下:
Drop PROCEDURE sp_makewebtask
Exec master..sp_dropextendedproc xp_dirtree
Exec master..sp_dropextendedproc xp_fileexist
Exec master..sp_dropextendedproc regredad
Exec master..sp_dropextendedproc regwrite
Exec master..sp_dropextendedproc regremovemultistring
。。。。。。。。

请注意
一般的扩展存储过程在SQL Server 2005中不建议删除,禁用就可以了。因为SQL Server 2005需要使用一些扩展存储过程。

[align=center] [/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  职场 删除 危险