概述

扩展存储过程是 SQL Server 实例可以动态加载和运行的 DLL。扩展存储过程是使用 SQL Server 扩展存储过程 API 编写的,可直接在 SQL Server 实例的地址空间中运行。扩展存储过程可能会产生内存泄漏或其他降低服务器的性能及可靠性的问题。固定服务器角色 sysadmin 的成员可以使用 SQL Server 实例来注册该扩展存储过程,然后授予其他用户执行该过程的权限。扩展存储过程只能添加到 master 数据库中。有一些系统自带的扩展存储过程操作的权限非常的高,包括修改注册表和修改文件的权限,比如“xp_cmdshell”。为了保证数据库的安全需要将这部分扩展存储过程给禁用。如果你们公司需要面临ICP备案的话那么这个事情是必须要做的。

需要禁用的扩展存储过程包括:

SELECT  object_name,state from  sys.system_components_surface_area_configuration
WHERE state=1 and object_name IN (
'xp_regdeletevalue',
'xp_regremovemultistring',
'xp_regwrite',
'xp_regaddmultistring',
'xp_regdeletekey',
'xp_enumerrorlogs',
'xp_enumgroups',
---不中视图中
'xp_loginconfig',
'xp_getfiledetails',
'xp_regenumvalues',
'sp_makewebtask',
---对应系统外围配置'xp_cmdshell'
'xp_cmdshell',
---对应系统外围配置'Ole Automation Procedures'
'Sp_OACreate',
'Sp_OADestroy',
'Sp_OAGetErrorInfo',
'Sp_OAGetProperty',
'Sp_OAMethod',
'Sp_OASetProperty',
'Sp_OAStop'
)

一、禁用扩展存储过程

有一些扩展存储过程它是属于服务器外围配置选项,可以使用sp_configure来开启和禁用。例如xp_cmdshell

---开启xp_cmdshell
sp_configure 'show advanced options', 1;
GO
sp_configure 'allow updates',0 ---开启允许更新系统表,当更改系统配置选项时提示不运行对系统目录即时更新时需要开启改功能
go
reconfigure;
go
sp_configure 'xp_cmdshell', 1;----开启xp_cmdshell
go
reconfigure;
go
sp_configure 'allow updates',1----关闭更新系统表功能
go
sp_configure 'show advanced options', 0; go
---关闭xp_cmdshell
sp_configure 'show advanced options', 1;
GO
sp_configure 'allow updates',0 ---开启允许更新系统表
go
reconfigure;
go
sp_configure 'xp_cmdshell', 0;----关闭xp_cmdshell
go
reconfigure;
go
sp_configure 'allow updates',1----关闭更新系统表功能
go
sp_configure 'show advanced options', 0;

二、拒绝授予扩展存储过程的可执行权限

而除了系统外围配置选项涉及的扩展存储过程可以通过sp_configure开启和禁用之外,剩下的系统扩展存储过程只能通过拒绝授予可执行权限的方式来禁用。

从SQLServer2005开始就不能通过sp_dropextendedproc 删除系统扩展存储过程

可以通过拒绝 public 角色对扩展存储过程的 EXECUTE 权限

select 'DENY EXECUTE ON '+object_name+' TO public',object_name,state from  sys.system_components_surface_area_configuration
WHERE state=1 and object_name IN (
'xp_regdeletevalue',
'xp_regremovemultistring',
'xp_regwrite',
'xp_regaddmultistring',
'xp_regdeletekey',
'xp_enumerrorlogs',
'xp_enumgroups',
---不中视图中
'xp_loginconfig',
'xp_getfiledetails',
'xp_regenumvalues',
'sp_makewebtask',
---对应系统外围配置'xp_cmdshell'
'xp_cmdshell',
---对应系统外围配置'Ole Automation Procedures'
'Sp_OACreate',
'Sp_OADestroy',
'Sp_OAGetErrorInfo',
'Sp_OAGetProperty',
'Sp_OAMethod',
'Sp_OASetProperty',
'Sp_OAStop'
);

三、查询权限

USE MASTER
;
WITH CET AS(
SELECT 'DENY EXECUTE ON '+object_name+' TO public' AS DenySQL,object_name,state from sys.system_components_surface_area_configuration
WHERE state=1 and object_name IN (
'xp_regdeletevalue',
'xp_regremovemultistring',
'xp_regwrite',
'xp_regaddmultistring',
'xp_regdeletekey',
'xp_enumerrorlogs',
'xp_enumgroups',
---不中视图中
'xp_loginconfig',
'xp_getfiledetails',
'xp_regenumvalues',
'sp_makewebtask',
---对应系统外围配置'xp_cmdshell'
'xp_cmdshell',
---对应系统外围配置'Ole Automation Procedures'
'Sp_OACreate',
'Sp_OADestroy',
'Sp_OAGetErrorInfo',
'Sp_OAGetProperty',
'Sp_OAMethod',
'Sp_OASetProperty',
'Sp_OAStop'
)
) SELECT A.name,schema_name(A.schema_id) [schema],A.type,b.permission_name,B.type,B.state_desc,C.name,c.type_desc
FROM sys.all_objects AS A
LEFT JOIN sys.database_permissions AS B ON B.major_id=A.object_id AND B.minor_id=0 AND B.class=1
LEFT JOIN sys.database_principals AS C ON C.principal_id = B.grantee_principal_id
where A.name IN(SELECT object_name FROM CET)
ORDER BY A.name

参考:http://blog.csdn.net/kk185800961/article/details/52188556

参考:https://docs.microsoft.com/zh-cn/sql/relational-databases/system-stored-procedures/sp-dropextendedproc-transact-sql

总结

备注:

作者:pursuer.chen

博客:http://www.cnblogs.com/chenmh

本站点所有随笔都是原创,欢迎大家转载;但转载时必须注明文章来源,且在文章开头明显处给明链接,否则保留追究责任的权利。

《欢迎交流讨论》

SQL Server 禁用扩展存储过程的更多相关文章

  1. sql server中扩展存储过程

    --列出服务器上安装的所有OLEDB提供的程序 execute master..xp_enum_oledb_providers --得到硬盘文件信息 --参数说明:目录名,目录深度,是否显示文件 (少 ...

  2. Sql Server系列:存储过程

    1 存储过程简介 存储过程是使用T-SQL代码编写的代码段.在存储过程中,可以声明变量.执行条件判断语句等其他编程功能.在MS SQL Server 2012中存储过程主要分三类:系统存储过程.自定义 ...

  3. SQL Server基础之存储过程

      简单来说,存储过程就是一条或者多条sql语句的集合,可视为批处理文件,但是其作用不仅限于批处理.本篇主要介绍变量的使用,存储过程和存储函数的创建,调用,查看,修改以及删除操作. 一:存储过程概述 ...

  4. 【SQL Server】SQL Server基础之存储过程

    SQL Server基础之存储过程  阅读目录 一:存储过程概述 二:存储过程分类 三:创建存储过程 1.创建无参存储过程 2.修改存储过程 3.删除存储过程 4.重命名存储过程 5.创建带参数的存储 ...

  5. (转)SQL Server基础之存储过程(清晰使用)

    阅读目录 一:存储过程概述 二:存储过程分类 三:创建存储过程 1.创建无参存储过程 2.修改存储过程 3.删除存储过程 4.重命名存储过程 5.创建带参数的存储过程   简单来说,存储过程就是一条或 ...

  6. 理解性能的奥秘——应用程序中慢,SSMS中快(2)——SQL Server如何编译存储过程

    本文属于<理解性能的奥秘--应用程序中慢,SSMS中快>系列 接上文:理解性能的奥秘--应用程序中慢,SSMS中快(1)--简介 本文介绍SQL Server如何编译存储过程并使用计划缓存 ...

  7. Sql Server数据库之存储过程

    阅读目录 一:存储过程概述 二:存储过程分类 三:创建存储过程 1.创建无参存储过程 2.修改存储过程 3.删除存储过程 4.重命名存储过程 5.创建带参数的存储过程   简单来说,存储过程就是一条或 ...

  8. SQL Server 2000 系统存储过程

    SQL Server 2000 系统存储过程 在 Microsoft? SQL Server? 中,许多管理和信息活动可以通过系统存储过程执行.系统存储过程按这些分类分组. 分类 描述 Active ...

  9. SQL SERVER 临时表导致存储过程重编译(recompile)的一些探讨

    SQLSERVER为了确保返回正确的值,或者处于性能上的顾虑,有意不重用缓存在内存里的执行计划,而重新编译执行计划的这种行为,被称为重编译(recompile).那么引发存储过程重编译的条件有哪一些呢 ...

随机推荐

  1. [NOIP复习]第三章:动态规划

    一.背包问题 最基础的一类动规问题.相似之处在于给n个物品或无穷多物品或不同种类的物品,每种物品仅仅有一个或若干个,给一个背包装入这些物品,要求在不超出背包容量的范围内,使得获得的价值或占用体积尽可能 ...

  2. Swift 是猴还是猿?

    欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 作者:段义鹏 导语 Swift和Objective-C是目前开发 Apple App的两门主要语言.Swift自2014年发布到目前为止其行业 ...

  3. mysql并行复制降低主从同步延时的思路与启示

    一.缘起 mysql主从复制,读写分离是互联网用的非常多的mysql架构,主从复制最令人诟病的地方就是,在数据量较大并发量较大的场景下,主从延时会比较严重. 为什么mysql主从延时这么大? 回答:从 ...

  4. 用枚举来处理java自定义异常

    在系统开发过程中,总少不免要自己处理一些异常信息,然后将异常信息变成友好的提示返回到客户端的这样一个过程,之前都是new一个自定义的异常,当然这个所谓的自定义异常也是继承RuntimeExceptio ...

  5. java.net.BindException: Cannot assign requested address: bind

    异常信息 时间:2017-03-16 10:21:05,644 - 级别:[ERROR] - 消息: [other] Failed to start end point associated with ...

  6. sql基础题目测试及正确答案

    在网上做了一套基本的sql题目,以下是我的写的答案,适合基础人员练练 --创建测试数据 use test create table Student(S# varchar(10),Sname nvarc ...

  7. vue vuex vue-rouert后台项目——权限路由(超详细简单版)

    项目地址:vue-simple-template共三个角色:adan barbara carrie 密码全是:123456 adan 拥有 最高权限A 他可以看到 red , yellow 和 blu ...

  8. iOS自定义文字高度添加行间距

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000 } span.s1 { } span.s2 { c ...

  9. 使用VSCode创建Asp.Net Core

    前言 .Net Core 2.0已经发布几个月了,惭愧!身为一个开发人员现在才开始接触,有人说有VS这一宇宙第一IDE在,为啥还要用VSCode,为啥?因为我们是程序猿啊!我们是攻城狮啊!我们爱折腾啊 ...

  10. GVIM与模板——让FPGA开发变得更简单

    还在使用FPGA开发环境自带的代码编辑器?还在逐个字母敲击冗长重复的代码?明德扬至简设计法让你快速提高代码编写效率!利用GVIM这一高效的编辑工具并添加自定义模板,通过简短的脚本命令即可自动生成所有常 ...