环境需求:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
SQL Server 2005 及之后的版本
背景
xp_cmdshell是一个很危险的存储过程,通过它,可以访问操作系统的资源,但有时候我们也需要使用它来实现一些特殊的处理。
从安全的角度来考虑,禁用xp_cmdsehll是最保险的,即使为了特殊目的而要求使用它,也最好能够编写一些实现这个特殊目的的用户存储过程,只在这个用户存储过程中使用xp_cmdshell,而普通用户只能使用这些用户存储过程。
正确的解决办法
下面的示例显示如何使普通用户在不具有执行存储过程xp_cmdshell的权限下,调用包含了执行xp_cmdshell代码的用户存储过程的方法。
-- 1. 具有执行xp_cmdshell 权限的登录
USE master;
GO
-- 1.a. 建立登录
CREATE LOGIN Cmd_Login
WITH PASSWORD = N'Pwd.123',
CHECK_POLICY = OFF;
GO
-- 1.b. 这个登录是内置的, 不允许登录, 这样可以减少安全隐藏
DENY CONNECT SQL
TO Cmd_Login;
GO
-- 1.c. 因为要调用xp_cmdshell , 所以在master 中要有用户, 并具有权限
CREATE USER Cmd_Login
FOR LOGIN Cmd_Login
WITH DEFAULT_SCHEMA = dbo;
GRANT EXECUTE ON sys.xp_cmdshell
TO Cmd_Login;
GO
-- 2. 用户数据库
USE tempdb;
GO
-- 2.a 为执行xp_cmdshell 权限的登录建立用户
CREATE USER Cmd_Login
FOR LOGIN Cmd_Login
WITH DEFAULT_SCHEMA = dbo;
GO
-- 2.b 测试存储过程
CREATE PROC dbo.p
WITH EXECUTE AS N'Cmd_Login' -- 指定存储过程的执行时的上下文
AS
EXEC master.sys.xp_cmdshell 'dir c:\'
GO
-- 3. 调用存储过程的普通登录
USE master;
GO
-- 3.a 登录
CREATE LOGIN test
WITH PASSWORD = N'abc.123',
CHECK_POLICY = OFF;
GO
-- 3.b 数据库用户
USE tempdb;
GO
CREATE USER test
FOR LOGIN test;
GO
-- 3.c 执行存储过程的权限
GRANT EXECUTE ON dbo.p
TO test;
GO
-- 3.d 执行测试
EXECUTE AS LOGIN = N'test';
GO
EXEC dbo.p;
GO
REVERT;
GO
-- 4. 删除测试
DROP PROC dbo.p;
DROP USER test;
DROP USER Cmd_Login;
USE master;
DROP LOGIN test;
DROP USER Cmd_Login;
DROP LOGIN Cmd_Login;
补充说明
多数情况下,数据库的所有者是sa一类的sysadmin固定服务器角色的成员,所以在这种情况下,也可以直接指定使用数据库所有者作为存储过程执行的安全上下文。
-- 2. 用户数据库
USE tempdb;
GO
-- 2.b 测试存储过程
CREATE PROC dbo.p
WITH EXECUTE AS N'dbo' -- 指定存储过程的执行时的上下文
AS
EXEC master.sys.xp_cmdshell 'dir c:\'
GO
-- 3. 调用存储过程的普通登录
USE master;
GO
-- 3.a 登录
CREATE LOGIN test
WITH PASSWORD = N'abc.123',
CHECK_POLICY = OFF;
GO
-- 3.b 数据库用户
USE tempdb;
GO
CREATE USER test
FOR LOGIN test;
GO
-- 3.c 执行存储过程的权限
GRANT EXECUTE ON dbo.p
TO test;
GO
-- 3.d 执行测试
EXECUTE AS LOGIN = N'test';
border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #d9d9d9; padding-bottom: 0cm; margin: 0cm 0c
分享到:
相关推荐
在SQL Server中,`xp_cmdshell`是一个非常特殊的扩展存储过程,它允许数据库管理员(DBA)在服务器级别执行操作系统命令。这个过程的强大之处在于它能够直接与Windows操作系统进行交互,比如创建文件、运行批处理...
XP_CMDSHELL存储过程是执行本机的CMD命令,要求系统登陆有SA权限,也就是说如果获得SQLSERVER的SA命令,那就可以在目标机为所欲为了,知名软件“流光”使用的应该也是这个存储过程来实现在目标机上的操作。
但是,如果服务器的安全配置不正确或者用户权限管理不善,那么攻击者就可能利用`xp_cmdshell`来执行任意系统命令,从而对服务器造成严重威胁。 #### 2. `xp_cmdshell`的潜在威胁 - **远程代码执行**:攻击者可以...
`sys.xp_cmdshell`是SQL Server中的一个扩展存储过程,允许数据库管理员在服务器上执行操作系统命令。这个功能非常强大,但也极具风险,因为不恰当的使用可能会导致严重的安全问题。因此,理解如何正确使用它至关...
在SQL Server环境中,当拥有最高权限(sa)但无法使用扩展存储过程`xp_cmdshell`时,可以通过其他技术实现对系统权限的获取或文件操作等功能。本文将详细介绍一种利用`sp_oacreate`和`sp_oamethod`存储过程来创建、...
SQL Server 2005中的`xp_cmdshell`是一个存储过程,它允许执行操作系统命令并在SQL Server环境中返回结果。这个功能对于系统管理员来说非常有用,因为它可以用来进行一些自动化任务,比如文件操作、系统管理或者集成...
- **`xp_cmdshell`**:这是一个扩展存储过程,它允许SQL Server执行外部程序或批处理文件,通常用于系统管理和维护任务。 - **`sp_configure`**:这是一个系统存储过程,用于更改服务器配置选项。 - **`RECONFIGURE`...
根据给定的文件信息,我们将深入探讨SQL Server中与文件操作相关的高级知识点,特别是通过扩展存储过程`xp_cmdshell`来执行系统级别的命令。`xp_cmdshell`是SQL Server的一个功能强大但潜在风险较高的特性,它允许在...
`xp_cmdshell`是SQL Server提供的一种扩展存储过程,允许用户直接执行Windows命令行操作。这个过程在SQL Server中具有较高的权限,因为它可以直接与操作系统交互,因此通常被用于系统维护、数据导入导出等任务。然而...
需要注意的是,在默认情况下,`xp_cmdshell`扩展存储过程是禁用的,因此我们需要先启用它才能正常使用上述命令: 1. **开启高级选项**: ```sql -- To allow advanced options to be changed. EXEC sp_configure...
在SQL Server中,有时我们需要执行...综上所述,通过`xp_cmdshell`扩展存储过程,我们可以方便地在SQL Server中执行DOS命令,并将结果存储到数据库中。然而,务必注意安全性和权限控制,确保系统的稳定和数据的安全。
在数据库管理领域,特别...尽管这种方法能够实现在删除了xp_cmdshell和xplog70.dll等扩展存储过程的情况下仍可执行命令的目的,但出于安全和法律考虑,使用此技术应格外谨慎,并确保符合所有相关的安全政策和法律法规。
- **XP_CmdShell介绍**:`xp_cmdshell`是SQL Server的一个扩展存储过程,允许用户执行操作系统级别的命令。由于其强大的功能,如果被恶意使用,可能会导致严重的安全问题。 - **XP_CmdShell的启用与禁用** - **...
- **权限验证:** 在执行上述命令时,确保当前登录用户具有足够的权限来执行`xp_cmdshell`。 - **环境兼容性:** 需要注意的是,随着技术的发展,Microsoft在后续版本的SQL Server中逐渐限制了对`xp_cmdshell`的支持...
- **修复`xp_cmdshell`不可用**:当`xp_cmdshell`被阻止或禁用时,可以通过执行特定的SQL语句来恢复,例如删除和添加扩展存储过程,或者通过`sp_configure`配置选项来启用。 4. **安全性配置**: - `sp_configure...
`xp_cmdshell` 是一个非常强大的内置扩展存储过程,允许SQL Server直接执行外部命令行工具或程序。由于其潜在的安全风险,该功能默认是禁用的。下面是一些关于如何启用、配置和使用 `xp_cmdshell` 的命令: 1. **...
- 错误信息:未能找到存储过程"master..xp_cmdshell"或"SQL Server 阻挡了对组件'xp_cmdshell'的访问"。 - 修复方法:首先,确保存储过程不存在时使用`DROP PROCEDURE`命令删除,然后使用`DBCC ADDEXTENDEDPROC`...
接下来,需要启用`xp_cmdshell`扩展存储过程,这是因为在备份过程中可能需要执行操作系统级别的命令。执行以下命令: ```sql exec sp_configure 'xp_cmdshell', 1; go RECONFIGURE; go ``` ### 二、执行远程备份...
1. **启用`xp_cmdshell`扩展存储过程**:`xp_cmdshell`是SQL Server的一个系统存储过程,允许执行操作系统命令。在进行异地备份时,可能需要执行如文件操作或网络命令,因此需要先开启`xp_cmdshell`。开启步骤如下:...
根据提供的文件信息,本文将详细解释如何利用SQL Server中的扩展存储过程`xp_cmdshell`结合作业(Job)功能实现定期删除文件或文件夹的操作。这种方法主要用于自动化管理数据库服务器上的文件清理任务,确保磁盘空间...