我们使用FlyWay作为迁移工具来管理我们的数据库版本。最近,我们在可重复脚本中添加了两个存储过程,其中一个使用用户定义的类型(CREATE TYPE
)。另一种称为前者。
我在部署脚本中使用的帐户不是 master 上的db_owner
帐户(从 Azure 门户获取的帐户)。相反,我在有问题的数据库上创建了一个单独的部署帐户,最初仅作为db_ddladmin
,现在升级到db_owner
,以便它可以在用户定义的类型上GRANT EXEC
。
但是,当我尝试使用此帐户运行迁移时,第二个过程始终失败:
Migration R__21Proc_ConflictsForUI.sql failed
---------------------------------------------
SQL State : 08S01
Error Code : 0
Message : I/O Error: Connection reset
Location : ./db/Stored Procedures/R__21Proc_ConflictsForUI.sql
Line : 5
Statement : CREATE PROC Conflicts_For_UI @CustomerId INT, @TotalRows INT = 20
当我尝试使用也在主服务器上的门户db_owner
帐户运行相同的迁移时,它可以工作。
为什么 Azure 会在第二个过程中关闭连接,而不是第一个过程?
通过执行GRANT EXEC
您授予了执行权限,但为了能够CREATE PROC
引用 UDT,用户应该对 UDT 具有REFERENCES
权限。
或者,您可以在UDT上授予将带给用户的CONTROL
-
REFERENCES
-
EXECUTE
-
VIEW DEFINITION
-
TAKE OWNERSHIP
在 UDT 上