sql server 2005 如何删除扩展存储过程xp_cmdshell

johnny2171 2007-10-15 10:14:17
为了安全原因 我想把xp_cmdshell删了 但是提示我 这个扩展存储过程不存在, 或没有权限

我在网上查了查 说是把public角色的excute权限拒绝了 请问在哪儿设置啊 有那位大虾会啊 帮帮我把
...全文
1370 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
cxmcxm 2010-11-07
  • 打赏
  • 举报
回复
sp_dropextendedproc
删除扩展存储过程。

后续版本的 Microsoft SQL Server 将删除该功能。请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。 请改用 CLR 集成。
cxmcxm 2010-11-07
  • 打赏
  • 举报
回复
可以使用外围应用配置器工具以及通过执行 sp_configure 来启用和禁用 xp_cmdshell
zhangyongbluesky 2010-11-07
  • 打赏
  • 举报
回复
楼主的问题不知道现在是否已经解决了,等待你的回复,谢谢!!!!!!!!
joy_jiangyan 2007-12-10
  • 打赏
  • 举报
回复
报告周老大,用你的方法试了删除xp_cmdshell 的操作.
shutdown后sqlserver起不来,启动后又自动停止了.换回原来的mssqlsystemresource.mdf
再启动就没问题了...
TigerEatAngil 2007-10-15
  • 打赏
  • 举报
回复
2005
sp_configure 'xp_cmdshell',0
reconfigure with override
go
zhou__zhou 2007-10-15
  • 打赏
  • 举报
回复
也不一定,说不定有高人自有办法,敬候之.
johnny2171 2007-10-15
  • 打赏
  • 举报
回复
也就是说扩展存储过程在 2005中不能删除???

真晕了~~~~~~
zhou__zhou 2007-10-15
  • 打赏
  • 举报
回复
sorry,没办法了,查询了MSDN
在 SQL Server 2005 中,sp_dropextendedproc 不会删除系统扩展存储过程。但系统管理员应拒绝 public 角色对扩展存储过程的 EXECUTE 权限。在 SQL Server 2000 中,sp_dropextendedproc 可用于删除任何扩展存储过程。

不能在事务内部执行 sp_dropextendedproc。

johnny2171 2007-10-15
  • 打赏
  • 举报
回复
我就是着样写的啊 删不料啊
zhou__zhou 2007-10-15
  • 打赏
  • 举报
回复
试试,
EXEC sp_dropextendedproc 'xp_cmdshell' --删除
EXEC sp_addextendedproc xp_cmdshell,'xplog70.dll' --恢复
zjcxc 元老 2007-10-15
  • 打赏
  • 举报
回复
注意,上面的操作修改的那个文件是很重要的,不要随便改里面的东西,不然 SQL Server 死掉了我可不管
zjcxc 元老 2007-10-15
  • 打赏
  • 举报
回复
如果一定要删除, 按下面的步骤进行即可(注意备份,还原的方法也就是用备份文件代替被修改的文件)


-- 1. 得到 master 库的目录位置(记下这个目录)
SELECT
LEFT(physical_name, LEN(physical_name) - 10)
FROM master.sys.database_files
WHERE type = 0
GO

-- 2. 操作系统中打开上述目录,找到如下两个文件
mssqlsystemresource.mdf
mssqlsystemresource.ldf

将他们复制一份,改名为:
_mssqlsystemresource.mdf
_mssqlsystemresource.ldf
GO

-- 3. 回到 sql server, 执行下面的语句(语句中的目录要改成步骤1中查到的目录)
USE master
GO

-- 将下面的文件目录修改为你自己的
CREATE DATABASE _sys_resource
ON(
FILENAME = N'D:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\_mssqlsystemresource.mdf'
)
LOG ON(
FILENAME = N'D:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\_mssqlsystemresource.ldf'
)
FOR ATTACH
GO

USE _sys_resource
GO

DROP PROC sys.xp_cmdshell
GO

EXEC sp_detach_db N'_sys_resource'
GO

-- 要重启 sql 才生效,下面这句让 sql 停止
SHUTDOWN
GO


-- 4. 回到步骤 2 的目录,将下面两个文件改名以做备份
mssqlsystemresource.mdf
mssqlsystemresource.ldf

-- 5. 将下面两个文件改名,去掉前面的 _
_mssqlsystemresource.mdf
_mssqlsystemresource.ldf


-- 6. 重新启动 sql server, 再执行 xp_cmdshell, 你会发现找不到这个存储过程了
ojuju10 2007-10-15
  • 打赏
  • 举报
回复
禁用就可以了,建议不要删除
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'xp_cmdshell', 0;
GO
RECONFIGURE;
GO
sp_configure 'show advanced options', 0;
GO
RECONFIGURE;
GO
zjcxc 元老 2007-10-15
  • 打赏
  • 举报
回复
不建议你删除,sql 自己也会用到,建议如楼上那样, 把它关闭就行了,注意设置好权限,不然有权限照样可以再开启

存储过程的安全及性能优化 存储过程分类  系统存储过程  自定义存储过程SQL Server使用者编写的存储过程扩展存储过程  动态链接库(DLL)函数的调用看,主要用于客户端和服务器端之间进行通信  exec master..xp_cmdshell 'dir *.exe' -- 执行目录命令查询[sql2005\sql2008]  exec master..xp_fixeddrives --列出硬盘分区各自可用空间  xp_regwrite根键,子键,值名,值类型,值【sql2008拒绝访问】  写入注册表,例如:  exec master..db.xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\run','TestValueName','reg_sz','hello'  xp_regdeletevalue 根键,子键,值名【sql2008拒绝访问】  删除注册表某个值  xp_regdeletekey键,值【sql2008拒绝访问】  删除该键下包括的所有值 xp_cmdshell语法  xp_cmdshell {'command_string'} [,no_output]  command_string是在操作系统命令行解释器上执行的命令字符串。command_string数据类型为varchar(255)或者nvarchar(4000),没有默认值  no_output为可选参数,可以控制是否想客户端返回信息  该存储过程一般情况下被禁用的,需要手动开启使用,如下:  exec sp_configure 'show advanced options',1  go   reconfigure  go   exec sp_configure 'xp_cmdshell',1—1表示启用,0表示禁用  go   reconfigure  go 删除xp_cmdshell SQL SERVER200删除xp_cmdshell use master exec sp_dropextendedproc 'xp_cmdshell' go SQL SERVER2005以上禁用xp_cmdshell,但不能删除掉 exec sp_configure 'xp_cmdshell',0 —1表示启用,0表示禁用  go reconfigure --让sp_configurre立即生效  go  exec sp_configure 'show advanced options',0  go   reconfigure  go --注意:SQL SERVER2008考虑安全性很多存储过程直接被拒绝访问 恢复/启用扩展存储过程 SQLServer2000 use master exec sp_addextendedproc xp_cmdshell,'xplog70.dll' go SQL Server2005SQL Server2008启用xp_cmdshell  exec sp_configure 'show advanced options',1  go   reconfigure  go   exec sp_configure 'xp_cmdshell',1—1表示启用,0表示禁用  go   reconfigure  go 扩展存储过程的定义  扩展存储过程SQL Server中的另一类存储过程,它是以其它语言编写的外部程序,是以动态链接库(DLL)形式存储在服务器上,最终SQLServer就可以动态加载并执行它们  编写好后使用SQLServer的固定角色sysadmin注册该扩展存储过程,并将执行权限授予其它用户,这个扩展存储过程只能添加到master数据库。  在编写扩展存储过程中可能要用到某些系统存储过程,这些系统存储过程如下: 利用OLE自动化存储过程调用dll 1.创建类库程序集 namespace PB_ExtendProcedure { public class ExtendProcedure { public string SayHi() { return "hello world"; } } } 2.生成动态链接库并注册到系统中 2.1.生成动态链接库使用VS2010命令行工具 使用sn命令生成一个强命名文件: sn -k he

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧