首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >执行为“dbo”导致错误调用-Sqlcmd:只有活动目录用户才能模拟其他活动目录用户Azure SQL Server

执行为“dbo”导致错误调用-Sqlcmd:只有活动目录用户才能模拟其他活动目录用户Azure SQL Server
EN

Stack Overflow用户
提问于 2022-07-17 12:03:01
回答 1查看 133关注 0票数 0

最近,我将azure中的SQL server数据库的副本还原到另一个数据库服务器上,在运行以前没有问题的存储过程时,在通过powershell使用sql-cmd运行存储过程之后,我开始获取下面的错误消息。

代码语言:javascript
复制
Invoke-Sqlcmd -Query "exec dbo.sp_test 'Tom Jerry', 'test@test.com', 'fsf87901-gh12-400e-89nk-1f893cg923f1', 'Testing'" -ServerInstance database-server -Database test-db -Username test-user -Password test-password

存储过程sp_test

代码语言:javascript
复制
CREATE PROCEDURE [dbo].[sp_test]
    (@name varchar(100),
     @email varchar(200),
     @guid varchar(100),
     @campaign varchar(100))
WITH EXECUTE AS 'dbo'
AS
BEGIN
    SELECT @name, @email, @guid, @campaign
END
GO

我知道这个错误:

调用-Sqlcmd:只有Active用户才能模拟其他Active用户。

一行:1字符:1

  • Invoke-Sqlcmd -Query "exec dbo.sp_test 'Tom曾傑瑞“,.

SqlPowerShellSqlExecutionException

  • CategoryInfo : InvalidOperation:(:) Invoke-Sqlcmd

  • FullyQualifiedErrorId : SqlError,Microsoft.SqlServer.Management.PowerShell.GetScriptCommand

导致此错误的原因是添加了以下内容。

代码语言:javascript
复制
WITH EXECUTE AS 'dbo'

由于我继承了这个设置,我担心的是移除这条线以及可能产生的后果。有谁知道这是为什么要使用的,以及为什么我可以在数据库的还原副本上得到这个问题,如果存储过程是在现有数据库上创建的,我就不会得到存储过程应该工作的错误。

EN

回答 1

Stack Overflow用户

发布于 2022-07-26 17:16:22

我找到了解决这个问题的办法。有两个问题需要解决。

服务器的管理登录,让我们称之为admin_login。我在数据库上创建了一个具有dbo权限的用户。来解决这个问题。

删除用户admin_login

代码语言:javascript
复制
drop user [admin-login-sit]

将登录设置为数据库所有者。

代码语言:javascript
复制
ALTER AUTHORIZATION ON DATABASE::[my_database] TO [admin_login]

上面为我解决了这个问题。

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

https://stackoverflow.com/questions/73011597

复制
相关文章

相似问题

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