sp_OACreate详细注解

作者&投稿:泰清 (若有异议请与网页底部的电邮联系)
如何在不提升用户权限的情况下,使普通用户执行sp_OACreate存储过程~

-- 1. 具有执行sp_OA... 权限的登录USEmaster;GO -- 1.a. 建立登录CREATELOGINOA_loginWITHPASSWORD=N'Pwd.123', CHECK_POLICY=OFF;GO-- 1.b. 这个登录是内置的, 不允许登录, 这样可以减少安全隐藏DENYCONNECTSQL TOOA_login;GO-- 1.c. 因为要使用sp_OA 这一系列的存储过程, 所以在master 中要有用户, 并具有权限CREATEUSEROA_loginFORLOGINOA_loginWITHDEFAULT_SCHEMA=dbo; GRANTEXECUTEONsys.sp_OACreate TOOA_login; GRANTEXECUTEONsys.sp_OADestroy TOOA_login; GRANTEXECUTEON sys.sp_OAGetErrorInfo TOOA_login; GRANTEXECUTEONsys.sp_OAGetProperty TOOA_login; GRANTEXECUTEONsys.sp_OAMethod TOOA_login; GRANTEXECUTEONsys.sp_OASetProperty TOOA_login; GRANTEXECUTEONsys.sp_OAStop TOOA_login;GO -- 2. 用户数据库USEtempdb;GO -- 2.a 为执行sp_OA... 权限的登录建立用户CREATEUSEROA_loginFORLOGINOA_loginWITHDEFAULT_SCHEMA=dbo;GO -- 2.b 测试存储过程CREATEPROCdbo.pWITHEXECUTEASN'OA_login' -- 指定存储过程的执行时的上下文AS DECLARE@objectint; DECLARE@hrint; DECLARE@srcvarchar(255),@descvarchar(255); EXEC@hr=sp_OACreate'ADODB.RecordSet',@objectOUT; IF@hr 0 GOTOlb_Err; EXEC@hr=sp_OAMethod@object,'Open',NULL,'SELECT ServerName = @@SERVERNAME',N'Provider=SQLOLEDB.1;Integrated Security=SSPI'; IF@hr 0 GOTOlb_Err; EXEC@hr=sp_OAMethod@object,'GetRows'; IF@hr 0 GOTOlb_Err; EXEC@hr=sp_OADestroy@object; RETURN; lb_Err: BEGIN EXECsp_OAGetErrorInfo@object,@srcOUT,@descOUT; RAISERROR('Error Creating COM Component 0x%x, %s, %s',16,1,@hr,@src,@desc); END;GO -- 3. 调用存储过程的普通登录USEmaster;GO-- 3.a 登录CREATELOGINtestWITHPASSWORD=N'abc.123',

ALTER PROCEDURE [dbo].[P_GET_HttpRequestData]( @URL text, @status int=0 OUT, @returnText varchar(2000)='' OUT ) AS BEGIN DECLARE @object int, @errSrc int /*初始化对*/ EXEC @status = SP_OACreate 'Msxml2.ServerXMLHTTP.3.0', @object OUT IF @status 0 BEGIN EXEC SP_OAGetErrorInfo @object, @errSrc OUT, @returnText OUT RETURN END /*创建链接*/ EXEC @status= SP_OAMethod @object,'open',NULL,'GET',@URL IF @status 0 BEGIN EXEC SP_OAGetErrorInfo @object, @errSrc OUT, @returnText OUT RETURN END EXEC @status=SP_OAMethod @object,'setRequestHeader','Content-Type','application/x-www-form-urlencoded' /*发起请求*/ EXEC @status= SP_OAMethod @object,'send',NULL IF @status 0 BEGIN EXEC SP_OAGetErrorInfo @object, @errSrc OUT, @returnText OUT RETURN END /*获取返回*/ EXEC @status= SP_OAGetProperty @object,'responseText',@returnText OUT IF @status 0 BEGIN EXEC SP_OAGetErrorInfo @object, @errSrc OUT, @returnText OUT RETURN END END

Transact-SQL 参考
sp_OACreate
在 Microsoft® SQL Server™ 实例上创建 OLE 对象实例。
语法
sp_OACreate progid, | clsid,
objecttoken OUTPUT
[ , context ]
参数
progid
是要创建的 OLE 对象的程序标识符 (ProgID)。此字符串描述该 OLE 对象的类,其形式如下:
'OLEComponent.Object'
OLEComponent 是 OLE 自动化服务器的组件名称,Object 是 OLE 对象名。指定的 OLE 对象必须有效并且必须支持 IDispatch 接口。
例如,SQLDMO.SQLServer 是 SQL-DMO SQLServer 对象的 ProgID。SQL-DMO 的组件名称为 SQLDMO,SQLServer 对象是有效的,并且同所有 SQL-DMO 对象一样,SQLServer 对象支持 Idispatch。
clsid
是要创建的 OLE 对象的类标识符 (CLSID)。此字符串描述该 OLE 对象的类,其形式如下:
'{nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn}'
指定的 OLE 对象必须有效并且必须支持 IDispatch 接口。
例如,{00026BA1-0000-0000-C000-000000000046} 是 SQL-DMO SQLServer 对象的 CLSID。
objecttoken OUTPUT
是返回的对象令牌,并且必须是数据类型为 int 的局部变量。该对象令牌用于标识所创建的 OLE 对象,并将在调用其它 OLE 自动化存储过程时使用。
context
指定新创建的 OLE 对象要在其中运行的执行上下文。如果指定,那么此值必须为下列值之一:
1 = 仅为进程内 (.dll) OLE 服务器
4 = 仅为本地 (.exe) OLE 服务器
5 = 进程内 OLE 服务器和本地 OLE 服务器均可
如果未指定,其默认值为 5。此值将在调用 CoCreateInstance 时作为 dwClsContext 参数传递。
若允许使用进程内 OLE 服务器(通过使用上下文值 1 或 5 或者不指定上下文值),该服务器将可以访问 SQL Server 拥有的内存和其它资源。进程内 OLE 服务器可能会破坏 SQL Server 的内存或资源并导致不可预知的结果,如 SQL Server 访问违规。
当上下文值指定为 4 时,本地 OLE 服务器不能访问任何 SQL Server 资源,因而不能破坏 SQL Server 的内存或资源。

说明 此存储过程的参数按位置指定,而不是按名称指定。

返回代码值
0(成功)或非零数字(失败),是由 OLE 自动化对象返回的 HRESULT 的整数值。
有关 HRESULT 返回代码的更多信息,请参见 OLE 自动化返回代码和错误信息。
注释
已创建的 OLE 对象在 Transact-SQL 语句批处理结束时会自动释放。
权限
只有 sysadmin 固定服务器角色的成员才能执行 sp_OACreate。
示例
A. 使用 Prog ID
下面的示例通过使用 SQL-DMO SQLServer 对象的 ProgID 创建该对象。
DECLARE @object int
DECLARE @hr int
DECLARE @src varchar(255), @desc varchar(255)
EXEC @hr = sp_OACreate 'SQLDMO.SQLServer', @object OUT
IF @hr <> 0
BEGIN
EXEC sp_OAGetErrorInfo @object, @src OUT, @desc OUT
SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc
RETURN
END

B. 使用 CLSID
下面的示例通过使用 SQL-DMO SQLServer 对象的 CLSID 创建该对象。
DECLARE @object int
DECLARE @hr int
DECLARE @src varchar(255), @desc varchar(255)
EXEC @hr = sp_OACreate '{00026BA1-0000-0000-C000-000000000046}',
@object OUT
IF @hr <> 0
BEGIN
EXEC sp_OAGetErrorInfo @object, @src OUT, @desc OUT
SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc
RETURN
END

请参见

使用 OLE 自动化存储过程进行数据类型转换
如何创建 OLE 自动化对象 (Transact-SQL)
如何调试自定义 OLE 自动化服务器 (Transact-SQL)
OLE 自动化脚本示例


如何测试sap webservice
49 gw_zcreat_oa_workflow-arg5 = |{ p_str1 }{ p_str2 }{ p_str3 }|.50 gw_input-parameters = gw_zcreat_oa_workflow.51 52 TRY.53 CALL METHOD webservice->creat_oa_workflow 54 EXPORTING 55 creat_oa_workflow = gw_input 56 IMPORTING 57 creat_...

准备把全部"家当"送给会C语言编程的大虾!
\/*===clock.c=== 下面是TC做的时钟 要求:TC目录下得有EGAVGA.BGI文件 每秒发出“喀嗒喀嗒”的声音 整点用5声低1声的响声来报点 ===*\/ include <math.h> include <dos.h> include <Graphics.h> define CENTERX 320 \/*表的中心坐标X*\/ define CENTERY 175 \/*表的中心坐标Y*\/...

ALLEGRO 16.2 导入网表出错问题?
回答:你把错误列出来啊,关键的东西没给我们,怎么知道是什么错误呢?呵呵。

铜陵县17149849974: sqlserver 用命令如何导入导出表结构和表数据? -
滕宗欧来: 平常从SQLSERVER中进行导入导出时,我们利用SQLSERVER中自带的DTS转换工具即可,很方便.但有些特殊的用法需要用语句进行导入导出,工作中碰到这种情况,查了些资料,下面详细介绍:一、从excel表导入到SQLSERVER use ...

铜陵县17149849974: Microsoft sql Server 2000有什么用途啊?麻烦详细 -
滕宗欧来: SQL Server 2000 是 Microsoft .NET Enterprise Server 的数据管理与分析中枢.SQL Server 2000 包括加速从概念到最后交付开发过程的工具.集成和可扩展的分析服务.有了 SQL Server 2000,您可以建立带有集成工具的端到端分析解决方案...

铜陵县17149849974: 如何在SQL脚本中执行DTS -
滕宗欧来: 数据转换服务(DTS)在数据库管理和开发的多种领域都有会涉及DTS:数据仓库-将数据从原始的处理系统和表格中提取出来以供报表使用 建立OLAP 将大量数据从文本文件或其它非数据库格式的文件中拷贝到数据库 生成Microsoft Office文档...

铜陵县17149849974: 如何在不提升用户权限的情况下,使普通用户执行sp - OACreate存储过程 -
滕宗欧来: -- 1. 具有执行sp_OA... 权限的登录USEmaster;GO -- 1.a. 建立登录CREATELOGINOA_loginWITHPASSWORD=N'Pwd.123', CHECK_POLICY=OFF;GO-- 1.b. 这个登录是内置的, 不允许登录, 这样可以减少安全隐藏DENYCONNECTSQL TOOA...

铜陵县17149849974: xp - cmdshell怎么删除 -
滕宗欧来: 一、xp_cmdshell的删除及恢复 1、判断xp_cmdshell是否存在 and 1=(SELECT count(*) FROM master.dbo.sysobjects WHERE xtype = 'X' AND name = 'xp_cmdshell') select count(*) from master.dbo.sysobjects where xtype='x' and 返回结果为1就ok ...

铜陵县17149849974: 关于电脑里的BIOS的英文详细注解
滕宗欧来: Integrated peripharals 完整的芯片组 Onchip IDE Device[press Enter] 芯片集成电路设备(按回车键) ATA/IDE configuration[disabled] 反应时间/集成电路配置(不可用的) [compatible] 兼容 [Enhanced] 提高 Legacy IDE channels[SATA pri,PATA sec] 遗留集成电路通道(SATA优先,PATA秒) [SATA Only] SATA最适合 [PATA pri, SATA sec] PATA优先,SATA秒 PATA Only] PATA最适合

铜陵县17149849974: java框架spring中的BeanNameAutoProxyCreator是干什么的?请详细解释 最好举例 -
滕宗欧来: 可以根据Bean的名字自动创建代理类,代码:activityServiceoutsideInvokeLogInterceptor

铜陵县17149849974: 求解此程序具体注释.谢谢了 -
滕宗欧来: ORG 0000H ;下一条指令的地址为0000H LJMP MAIN ;长跳转到标号MAIN处执行程序 ORG 0003H ;下一条指令的地址为0003H(外部中断0的向量) LJMP INT0_ISR ;长跳转到标号INT0_ISR处执行程序 ORG 000BH ;下一条指令的地址为...

铜陵县17149849974: 求分块查找算法 最好有代码和详细注释 -
滕宗欧来: 注意:采用“二分查找”时,初始的数组或其他线性表中的每个元素都必须是按一定的顺序排列的(从大到小,或从小到大), 该算法的基本思想:对一个有序数据序列,总是先把查找目标与该序列的中间的元素进行比较,我们假设该序列是由...

铜陵县17149849974: 谁能给我一个avr单片机SPI通信的实例,简单的能体现出基本原理就可以,最好有比较详细注解,C语言的. -
滕宗欧来: 主机://SPI双机通信 主机//发送0x09,接收方PD0~3,对应点小灯//包含所需头文件#include <avr/io.h>#include <avr/interrupt.h>#include <avr/signal.h>// SS PB4 // MOSI PB5 // MISO PB6 // SCK PB7 /*------宏定义------*/#define uchar unsigned ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网