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系统扩展存储过程的主要内容,如果未能解决你的问题,请参考以下文章

关于sql sever 的系统存储过程

sqlserver数据库存储过程

SQL —— 存储过程

学习 SQL Server :存储过程

SQL语句(十八)—— 存储过程

带参数的ms sql server的扩展存储过程,怎么传递参数