我们在Service上有队列:
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)过程有代码(我用接收来剪切一些文本,因为它没有链接到这个问题):
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'
)
......
ENDuser_sa -拥有SA的权利。如果服务触发事件,则成功插入表数据。但是,如果取消注释该行执行为LOGIN = 'user_sa',则会出现以下错误:
无法作为服务器主体执行,因为主体"user_sa“不存在,无法模拟这种类型的主体,或者您没有权限。
请帮助找出解决办法。提前感谢!
技术信息: Microsoft 2012-11.0.5582.0 (X64)企业版
发布于 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:我在当前数据库的上下文中执行,并在附近的基础上处理。它需要从上面的链接中采取行动。
https://dba.stackexchange.com/questions/119534
复制相似问题