WEB开发网
开发学院网络安全黑客技术 如何在不提升用户权限的情况下,使普通用户执行sp... 阅读

如何在不提升用户权限的情况下,使普通用户执行sp_OACreate存储过程

 2008-11-08 16:50:34 来源:WEB开发网   
核心提示: 补充说明多数情况下,数据库的所有者是sa一类的sysadmin固定服务器角色的成员,如何在不提升用户权限的情况下,使普通用户执行sp_OACreate存储过程(3),所以在这种情况下,也可以直接指定使用数据库所有者作为存储过程执行的安全上下文,USE tempdb;GO-- 2.b 测试存

补充说明

多数情况下,数据库的所有者是sa一类的sysadmin固定服务器角色的成员,所以在这种情况下,也可以直接指定使用数据库所有者作为存储过程执行的安全上下文。

USE tempdb;
GO
-- 2.b 测试存储过程
CREATE PROC dbo.p
WITH EXECUTE AS N'dbo' -- 指定存储过程的执行时的上下文
AS
  DECLARE @object int;
  DECLARE @hr int;
  DECLARE @src varchar(255), @desc varchar(255);
  EXEC @hr = sp_OACreate 'ADODB.RecordSet', @object OUT;
  IF @hr <> 0
    GOTO lb_Err;
  EXEC @hr = sp_OAMethod @object, 'Open', NULL, 'SELECT ServerName = @@SERVERNAME', N'Provider=SQLOLEDB.1;Integrated Security=SSPI';
  IF @hr <> 0
    GOTO lb_Err;
  EXEC @hr = sp_OAMethod @object, 'GetRows';
  IF @hr <> 0
    GOTO lb_Err;
  
  EXEC @hr = sp_OADestroy @object;
  RETURN;
lb_Err:
  BEGIN
    EXEC sp_OAGetErrorInfo @object, @src OUT, @desc OUT ;
    RAISERROR('Error Creating COM Component 0x%x, %s, %s',16,1, @hr, @src, @desc);
  END;
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;
  
USE master;
DROP LOGIN test;

最后说明一点,要使用sp_OACreate这一系列存储过程,得将服务器的“Ole Automation Procedures”选项打开,参考如下的代码。

EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
  
EXEC sp_configure 'Ole Automation Procedures', 1;
RECONFIGURE;

上一页  1 2 3 

Tags:如何 提升 用户

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接