sql-server - Azure SQL 数据库 - 除非以 sql 管理员身份连接,否则无法删除/更新已注册的 dacpac
问题描述
这可能是 Azure 数据库的问题,但我希望有一个解决方案。
在 Azure 中创建 SQL 数据库时,服务器有一个 SQL 管理员帐户,在这种情况下,在配置时通过门户手动配置该帐户。这只能是经过 SQL 身份验证的用户。
当然,我也有一个 AAD 组/用户配置为 AD Admin。
我还使用 SSDT 设置了自动部署。当我尝试将 DACPAC 注册为部署的一部分时会出现问题,但如果我使用 AD 帐户进行部署,则只有在第一次部署之后。它尝试更新已注册的数据层应用程序,但收到一条错误消息,指出它已经存在。如果我使用 SQL Authenticated SQL Admin 用户进行部署,则部署成功。
出于几个原因,我想使用 AD 帐户进行部署,尤其是能够创建其他包含的 AD 用户,这是 SQL Authenticated 用户无法做到的。
如果我以 SQL 用户身份连接,我可以在 SSMS 中删除注册的 dacpac,但是当我尝试使用 AD 用户这样做时,我得到:
当前用户对 SQL Server 实例没有足够的权限来删除数据层应用程序。用户必须是与数据层应用程序关联的数据库的数据库所有者。
我知道数据层应用程序信息存储在虚拟主数据库中。例如
select * [master].[dbo].[sysdac_history_internal]
select * [master].[dbo].[sysdac_instances_internal]
看起来您需要在主数据库上拥有 db_owner 才能以这种方式使用 DAC,但唯一可以成为 db_owner 的用户是经过 SQL 身份验证的 SQL Admin。
因此,除非我可以创建一个可以执行此操作的包含 AD 用户,否则我认为我不能使用 dacpac 注册,这真的很遗憾,因为漂移检测是使用 SSDT 的真正卖家。
如果有人知道如何管理这个,我会非常感激听到它。
解决方案
推荐阅读
- c++ - 当作为部分而不是作为单个函数完成时,常量表达式有效
- swift - Firebase tableview没有填充,Swift
- android - 带拇指的自定义搜索栏
- html - 我们可以在 AMP 中跟踪 html 标签的可见性吗?
- android - 无需扫描整个集合即可共享 Firestore 文档
- ant - 问题:创建任务或类型秒表失败原因:名称未定义
- excel - 在从另一个循环派生的循环中打印某些内容时遇到问题
- laravel - Laravel 使用了错误的控制器
- c# - 在没有 XSLT 的情况下使用转换后如何手动获取修改后的 xml?
- xml - 如何在整个文档中搜索一个值并在 XSLT 中找到它的兄弟姐妹