我们有一个 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
问题是在授予模式和类型权限时发布会出现。自上次部署以来没有任何项目更改,发布脚本会撤销权限,然后再次授予权限,没有明显的原因。 (它也在对象权限上执行此操作,但我们发现可以通过指定来阻止它as dbo
每次拨款后)。这会给每个数据库部署增加很多噪音和干扰,这是我们想要避免的。如果我使用 Azure SQL Server 管理员登录名进行发布,则不会发生这种情况。
非常感谢任何帮助。当项目中包含角色和权限时,人们使用什么类型的用户和什么权限从 SSDT 发布到 Azure SQL Db?
UPDATE
一个例子在数据库中进行身份验证的用户 https://learn.microsoft.com/en-us/sql/t-sql/statements/create-user-transact-sql?view=azuresqldb-current用于发布,类型和模式的权限被不必要地删除并在每次发布时重新创建:
CREATE USER OpsPerson1
WITH PASSWORD = 'some password';
GO
ALTER ROLE db_owner add member OpsPerson1;
我尝试了几件事来使其发挥作用,例如指定默认模式,将用户添加到 db_ddladmin 和 db_securityadmin,但没有骰子。
None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)