27-SQLServer系统扩展存储过程
Posted 佳蓝雨
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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\')
)
)
修改基线方式:直接在图形化界面,把执行的权限去掉就行
以上是关于27-SQLServer系统扩展存储过程的主要内容,如果未能解决你的问题,请参考以下文章