最近,我将azure中的SQL server数据库的副本还原到另一个数据库服务器上,在运行以前没有问题的存储过程时,在通过powershell使用sql-cmd运行存储过程之后,我开始获取下面的错误消息。
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
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
SqlPowerShellSqlExecutionException
导致此错误的原因是添加了以下内容。
WITH EXECUTE AS 'dbo'由于我继承了这个设置,我担心的是移除这条线以及可能产生的后果。有谁知道这是为什么要使用的,以及为什么我可以在数据库的还原副本上得到这个问题,如果存储过程是在现有数据库上创建的,我就不会得到存储过程应该工作的错误。
发布于 2022-07-26 17:16:22
我找到了解决这个问题的办法。有两个问题需要解决。
服务器的管理登录,让我们称之为admin_login。我在数据库上创建了一个具有dbo权限的用户。来解决这个问题。
删除用户admin_login
drop user [admin-login-sit]将登录设置为数据库所有者。
ALTER AUTHORIZATION ON DATABASE::[my_database] TO [admin_login]上面为我解决了这个问题。
https://stackoverflow.com/questions/73011597
复制相似问题