У нас есть проект SSDT, который включает пользователей, роли и разрешения. Это работало очень хорошо, но недавний переход на Azure вызвал или, возможно, выдвинул на первый план проблему с развертыванием.
До Azure у некоторых участников проекта был пользователь на главной базе данных с достаточными разрешениями публиковать sh базы данных. В Azure SQL Db есть только один пользователь-администратор, и эти учетные данные не должны использоваться совместно. Поэтому вместо этого мы решили использовать достаточно разрешенных пользователей базы данных для публикации sh. Это не работает для разрешений, предоставленных схемам и типам.
В качестве примера, скажем, у нас есть следующее в нашем проекте:
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
Проблема в публикации sh Воспроизведение при предоставлении разрешений на схемы и типы. Без каких-либо изменений проекта с момента последнего развертывания сценарий publi sh отменяет разрешения и затем предоставляет их снова, без видимой причины. (Это делалось и с разрешениями на объекты, но мы обнаружили, что можем предотвратить это, указав as dbo
после каждого предоставления). Это добавляет много шума и оттока к каждому развертыванию базы данных, чего мы хотим избежать. И это не произойдет, если я использую Azure SQL Логин администратора сервера для публикации sh.
Любая помощь высоко ценится. Какие типы пользователей с какими разрешениями люди используют для публикации sh из SSDT в Azure SQL Db, когда роли и разрешения включены в проект?
ОБНОВЛЕНИЕ
Пример пользователя, который аутентифицируется в базе данных , используемой для публикации, которая видит, что разрешения на типы и схемы без необходимости удаляются и воссоздаются в каждой публикации sh:
CREATE USER OpsPerson1
WITH PASSWORD = 'some password';
GO
ALTER ROLE db_owner add member OpsPerson1;
Я пытался сделать несколько вещей, чтобы заставить его работать, например, указав схему по умолчанию, добавив пользователя в db_ddladmin и db_securityadmin, но без кубиков.