概述

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

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

  1. SELECT object_name,state from sys.system_components_surface_area_configuration
  2. WHERE state=1 and object_name IN (
  3. 'xp_regdeletevalue',
  4. 'xp_regremovemultistring',
  5. 'xp_regwrite',
  6. 'xp_regaddmultistring',
  7. 'xp_regdeletekey',
  8. 'xp_enumerrorlogs',
  9. 'xp_enumgroups',
  10. ---不中视图中
  11. 'xp_loginconfig',
  12. 'xp_getfiledetails',
  13. 'xp_regenumvalues',
  14. 'sp_makewebtask',
  15. ---对应系统外围配置'xp_cmdshell'
  16. 'xp_cmdshell',
  17. ---对应系统外围配置'Ole Automation Procedures'
  18. 'Sp_OACreate',
  19. 'Sp_OADestroy',
  20. 'Sp_OAGetErrorInfo',
  21. 'Sp_OAGetProperty',
  22. 'Sp_OAMethod',
  23. 'Sp_OASetProperty',
  24. 'Sp_OAStop'
  25. )

一、禁用扩展存储过程

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

  1. ---开启xp_cmdshell
  2. sp_configure 'show advanced options', 1;
  3. GO
  4. sp_configure 'allow updates',0 ---开启允许更新系统表,当更改系统配置选项时提示不运行对系统目录即时更新时需要开启改功能
  5. go
  6. reconfigure;
  7. go
  8. sp_configure 'xp_cmdshell', 1;----开启xp_cmdshell
  9. go
  10. reconfigure;
  11. go
  12. sp_configure 'allow updates',1----关闭更新系统表功能
  13. go
  14. sp_configure 'show advanced options', 0;
  15.  
  16. go
  17. ---关闭xp_cmdshell
  18. sp_configure 'show advanced options', 1;
  19. GO
  20. sp_configure 'allow updates',0 ---开启允许更新系统表
  21. go
  22. reconfigure;
  23. go
  24. sp_configure 'xp_cmdshell', 0;----关闭xp_cmdshell
  25. go
  26. reconfigure;
  27. go
  28. sp_configure 'allow updates',1----关闭更新系统表功能
  29. go
  30. sp_configure 'show advanced options', 0;

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

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

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

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

  1. select 'DENY EXECUTE ON '+object_name+' TO public',object_name,state from sys.system_components_surface_area_configuration
  2. WHERE state=1 and object_name IN (
  3. 'xp_regdeletevalue',
  4. 'xp_regremovemultistring',
  5. 'xp_regwrite',
  6. 'xp_regaddmultistring',
  7. 'xp_regdeletekey',
  8. 'xp_enumerrorlogs',
  9. 'xp_enumgroups',
  10. ---不中视图中
  11. 'xp_loginconfig',
  12. 'xp_getfiledetails',
  13. 'xp_regenumvalues',
  14. 'sp_makewebtask',
  15. ---对应系统外围配置'xp_cmdshell'
  16. 'xp_cmdshell',
  17. ---对应系统外围配置'Ole Automation Procedures'
  18. 'Sp_OACreate',
  19. 'Sp_OADestroy',
  20. 'Sp_OAGetErrorInfo',
  21. 'Sp_OAGetProperty',
  22. 'Sp_OAMethod',
  23. 'Sp_OASetProperty',
  24. 'Sp_OAStop'
  25. );

三、查询权限

  1. USE MASTER
  2. ;
  3. WITH CET AS(
  4. SELECT 'DENY EXECUTE ON '+object_name+' TO public' AS DenySQL,object_name,state from sys.system_components_surface_area_configuration
  5. WHERE state=1 and object_name IN (
  6. 'xp_regdeletevalue',
  7. 'xp_regremovemultistring',
  8. 'xp_regwrite',
  9. 'xp_regaddmultistring',
  10. 'xp_regdeletekey',
  11. 'xp_enumerrorlogs',
  12. 'xp_enumgroups',
  13. ---不中视图中
  14. 'xp_loginconfig',
  15. 'xp_getfiledetails',
  16. 'xp_regenumvalues',
  17. 'sp_makewebtask',
  18. ---对应系统外围配置'xp_cmdshell'
  19. 'xp_cmdshell',
  20. ---对应系统外围配置'Ole Automation Procedures'
  21. 'Sp_OACreate',
  22. 'Sp_OADestroy',
  23. 'Sp_OAGetErrorInfo',
  24. 'Sp_OAGetProperty',
  25. 'Sp_OAMethod',
  26. 'Sp_OASetProperty',
  27. 'Sp_OAStop'
  28. )
  29. )
  30.  
  31. SELECT A.name,schema_name(A.schema_id) [schema],A.type,b.permission_name,B.type,B.state_desc,C.name,c.type_desc
  32. FROM sys.all_objects AS A
  33. LEFT JOIN sys.database_permissions AS B ON B.major_id=A.object_id AND B.minor_id=0 AND B.class=1
  34. LEFT JOIN sys.database_principals AS C ON C.principal_id = B.grantee_principal_id
  35. where A.name IN(SELECT object_name FROM CET)
  36. 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. java学习笔记之集合家族1

    集合 集合介绍: 由于数组中存放对象,对对象操作起来不方便.java中有一类容器,专门用来存储对象. 集合与数组的区别: 1.数组的长度固定的,而集合长度时可变的 2.数组只能储存同一类型的元素,而且 ...

  2. Python爬虫(十六)_JSON模块与JsonPath

    本篇将介绍使用,更多内容请参考:Python学习指南 数据提取之JSON与JsonPATH JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它是的人们很容易 ...

  3. android动画介绍之 自己定义Animation动画实现qq抖一抖效果

    昨天我们介绍了Animation的基本使用方法.小伙伴们了解的怎么样了?假设还没有了解过Animation的小伙伴能够看看这篇博客 android动画介绍--Animation 实现loading动画 ...

  4. 杭电1513Palindrome

    Palindrome Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total ...

  5. Android笔记二十四.Android基于回调的事件处理机制

        假设说事件监听机制是一种托付式的事件处理,那么回调机制则与之相反,对于基于回调的事件处理模型来说,事件源和事件监听器是统一的,或者说事件监听器全然消失了,当用户在GUI控件上激发某个事件时,控 ...

  6. Android-Volley网络通信框架(ImageRequest,ImageLoader,NetWorkImageView)

    1.回想 上篇已经学习了,RequestQueue  , StringRequest ,JsonObjectRequest 的使用 2.重点 (1)Volley请求图片的三种方式 (2)ImageRe ...

  7. Android查缺补漏--Activity生命周期和启动模式

    一.生命周期 onCreate():启动Activity时,首次创建Activity时回调. onRestart():再次启动Activity时回调. onStart():首次启动Activity时在 ...

  8. CentOS 6.5 安装MySQL过程

    使用软件的版本 CentOS 6.5 mysql-5.5.22.tar.gz cmake-2.8.6.tar.gz 准备工作 解压安装mysql之前把关于mysql软件包卸载,以免程序冲突,端口冲突. ...

  9. 机器学习 - pycharm, tensorflow集成篇

    继续上篇的pyspark集成后,我们再来看看当今热的不得了的tensorflow是如何继承进pycharm环境的 参考: http://blog.csdn.net/include1224/articl ...

  10. WCF系统内置绑定列表与系统绑定所支持的功能

      WCF系统内置绑定列表 绑定 配置元素 说明 传输协议 编码格式 BasicHttpBinding <basicHttpBnding> 一个绑定,适用于与符合 WS-Basic Pro ...