• 27-SQLServer系统扩展存储过程


    一、注意点

    1、在SQLServer中,有些系统扩展存储过程,是有风险,需要取消public角色的执行权限。

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

    3、系统扩展存储过程是不能被删掉的,也没办法禁用(sysadmin角色的用户肯定拥有执行的权限),所以如果有公司基线要求,我们要做的是拒绝public角色拥有这些扩展存储过程的执行权限。

    4、一些高风险的存储过程如下:

      xp_cmdshell:以操作系统命令行解释器的方式执行给定的命令字符串,并以文本行的形式返回所有输出;

      xp_readerrorlog:读取SQLServer的错误日志;

      xp_snmp_getstate:获取snmp状态信息;

      xp_sprintf:格式化数据;

      xp_sqlinventory:查询SQLServer清单;

      xp_sqlregister:对注册表的读取和编辑;

      xp_sqltrace:SQL跟踪记录;

      xp_servicecontrol:服务管理控制,该存储过程允许用户启动、停止、暂停或运行服务;

      xp_sscanf:从字符串中读取数据数据到每个格式参数给出的参数位置;

      xp_availablemedia:该存储过程可以查看系统上可用的磁盘驱动器的空间信息;

      xp_subdirs:通过xp_dirtree,xp_subdirs将在一个给定的文件夹中显示所有子文件夹;

    二、操作步骤

    1.查看这个扩展的存储过程对象
    命令:
    select name,id from sysobjects where name in ('xp_cmdshell','xp_readerrorlog','xp_snmp_getstate','xp_sprintf',
    'xp_sqlinventory','xp_sqlregister','xp_sqltrace','xp_servicecontrol','xp_sscanf','xp_availablemedia','xp_subdirs')

    2.查看主体public的权限
    命令:
    select * from sys.database_permissions where grantee_principal_id = DATABASE_PRINCIPAL_ID('public')

    3.查看一些public角色是否拥有一些指定的扩展存储过程的执行权限
    注:查询扩展存储过程是否符合基线的最终SQL
    命令:
    select name from sysobjects where id in(
    select major_id from sys.database_permissions where grantee_principal_id = DATABASE_PRINCIPAL_ID('public')
    and permission_name = 'EXECUTE' and state_desc!='DENY'
    and major_id in (
    select id from sysobjects where name in ('xp_cmdshell','xp_readerrorlog','xp_snmp_getstate','xp_sprintf',
    'xp_sqlinventory','xp_sqlregister','xp_sqltrace','xp_servicecontrol','xp_sscanf','xp_availablemedia','xp_subdirs')
    )
    )

    修改基线方式:直接在图形化界面,把执行的权限去掉就行

  • 相关阅读:
    PHP开发经常遇到的几个错误
    PHP的Trait
    PHP反射API
    php split 和 explode 的区别
    php判断检测一个数组里有没有重复的值
    PHP serialize 和 JSON 解析与区别
    php 单文件上传
    php 数组 类对象 值传递 引用传递 区别
    六. 网络编程(解决黏包TCP)
    五. 网络编程(UDP 不黏包)
  • 原文地址:https://www.cnblogs.com/jialanyu/p/11950012.html
Copyright © 2020-2023  润新知