执行为'dbo'导致错误 Invoke-Sqlcmd:只有活动目录用户可以模拟其他活动目录用户 Azure SQL Server



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

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

我得到这个错误:

Invoke-Sqlcmd:只有Active Directory用户可以模拟其他Active Directory用户。
line:1 char:1

  • Invoke-Sqlcmd -Query "sp_test 'Tom Jerry',…

  • CategoryInfo: InvalidOperation: (:) [Invoke-Sqlcmd], SqlPowerShellSqlExecutionException

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

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

WITH EXECUTE AS 'dbo'

当我继承这个设置时,我担心删除行以及可能的后果。有没有人知道为什么这是在使用,为什么我可以得到数据库的恢复副本上的问题,如果存储过程是在现有的数据库上创建的,我没有得到存储过程工作的错误,因为它应该。

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

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

删除用户admin_login
drop user [admin-login-sit]

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

ALTER AUTHORIZATION ON DATABASE::[my_database] TO [admin_login]

以上内容为我解决了这个问题。

最新更新