Azure sql database SSDT在以数据库用户身份部署到Azure时删除和重新创建权限

Azure sql database SSDT在以数据库用户身份部署到Azure时删除和重新创建权限,azure-sql-database,sql-server-data-tools,Azure Sql Database,Sql Server Data Tools,我们有一个SSDT项目,其中包括用户、角色和权限。它工作得很好,但最近迁移到Azure导致了部署问题,或者可能突出了这一问题 在Azure之前,某些项目成员在主数据库上有一个用户,该用户具有发布数据库的足够权限。在Azure SQL Db中,只有一个管理员用户,这些凭据不应共享。因此,我们认为应该使用具有足够权限的包含数据库的用户来发布。这不适用于在架构和类型上授予的权限 举个例子,假设我们的项目中有以下内容: CREATE USER Bob; CREATE ROLE WhatARole; AL

我们有一个SSDT项目,其中包括用户、角色和权限。它工作得很好,但最近迁移到Azure导致了部署问题,或者可能突出了这一问题

在Azure之前,某些项目成员在主数据库上有一个用户,该用户具有发布数据库的足够权限。在Azure SQL Db中,只有一个管理员用户,这些凭据不应共享。因此,我们认为应该使用具有足够权限的包含数据库的用户来发布。这不适用于在架构和类型上授予的权限

举个例子,假设我们的项目中有以下内容:

CREATE USER Bob;
CREATE ROLE WhatARole;
ALTER ROLE WhatARole ADD member Bob;

CREATE PROCEDURE dbo.DoStuff
AS SELECT 1;
GO
GRANT EXECUTE ON OBJECT::dbo.DoStuff TO WhatARole AS dbo; // <-- works fine

CREATE TYPE dbo.SomeType AS TABLE
(
     Name varchar(50) NOT NULL
);
GO
GRANT EXECUTE ON TYPE::dbo.SomeType TO WhatARole AS dbo; // <-- doesn't work well

CREATE SCHEMA Blah;
GO
GRANT SELECT ON SCHEMA::Blah TO WhatARole AS dbo; // <-- also doesn't work well

我尝试了几种方法来实现它,例如指定默认模式,将用户添加到db_ddladmin和db_securityadmin,但没有骰子。

当我在项目中拥有权限时,我使用部署后脚本来完成这些操作。Alex Yates正在清理一些代码以生成这些代码。大多数权限都授予了角色,我通常会在可能的情况下尝试进行模式级别之类的广泛操作。然后用户添加或删除角色。谢谢@PeterSchott。我们也许可以使用部署后脚本来处理权限,但我真的不想这样做。我们正在以您建议的方式使用用户、角色和权限,SSDT在以声明方式处理它们方面做得非常好,直到我们尝试使用db用户(db用户是db_所有者的成员,因此他们有足够的权限)而不是服务器用户发布。但是对于db用户,我们会遇到这种恼人的行为,SSDT可能无法识别已部署的权限,因此它不必要地删除并重新创建这些权限。
CREATE USER OpsPerson1
    WITH PASSWORD = 'some password';
GO
ALTER ROLE db_owner add member OpsPerson1;