首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >服务代理和过程,其中包含

服务代理和过程,其中包含
EN

Database Administration用户
提问于 2015-10-29 10:45:12
回答 1查看 962关注 0票数 0

我们在Service上有队列:

代码语言:javascript
复制
ALTER QUEUE [dbo].[my_queue] WITH
        STATUS = ON ,
        RETENTION = OFF ,
        ACTIVATION (  
                      STATUS = ON , 
                      PROCEDURE_NAME = [dbo].[my_detect_event] ,
                      MAX_QUEUE_READERS = 1 ,
                      EXECUTE AS N'dbo'  
                    ), 
        POISON_MESSAGE_HANDLING (STATUS = OFF)

过程有代码(我用接收来剪切一些文本,因为它没有链接到这个问题):

代码语言:javascript
复制
ALTER PROCEDURE dbo.my_detect_event
        AS
            BEGIN
                ......cut text with RECEIVE TOP (1) message_body FROM my_queue INTO @NotificationStore
                --EXECUTE AS LOGIN = 'user_sa'
                INSERT INTO dbo.log
                        ( time, text)
                VALUES  ( GETDATE(),
                          'test'
                          )
                ......
            END

user_sa -拥有SA的权利。如果服务触发事件,则成功插入表数据。但是,如果取消注释该行执行为LOGIN = 'user_sa',则会出现以下错误:

无法作为服务器主体执行,因为主体"user_sa“不存在,无法模拟这种类型的主体,或者您没有权限。

请帮助找出解决办法。提前感谢!

技术信息: Microsoft 2012-11.0.5582.0 (X64)企业版

EN

回答 1

Database Administration用户

回答已采纳

发布于 2015-11-19 12:18:02

答案是这样的:简单地说,https://social.msdn.microsoft.com/Forums/sqlserver/en-US/95f5ee43-d3b2-4a2d-bdd2-6fb0aed56458/service-broker-and-procedure-which-contains-execute-as?forum=sqlservicebroker&prof=required:我在当前数据库的上下文中执行,并在附近的基础上处理。它需要从上面的链接中采取行动。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/119534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档