Sql-Server

嘗試向 Azure SQL 特殊角色“dbmanager”添加登錄時出錯

  • April 21, 2022

在 Azure SQL 實例上執行這些命令時:

CREATE LOGIN test WITH PASSWORD=N'Passw0rd'
GO

ALTER ROLE dbmanager ADD MEMBER test
GO

…我收到一個錯誤:

Cannot add the server principal 'test', because it does not exist or you do not have permission.

我也試過這個:

ALTER SERVER ROLE dbmanager ADD MEMBER test
GO

我已經驗證登錄存在。我以伺服器的系統管理員身份登錄。

顯然,我在一年前就能讓它工作:如何將登錄名添加到 dbcreator 角色?但那是那時,這就是現在。它行不通。

然而,基本問題仍然相同:我需要能夠在給定登錄名的範圍內創建一個數據庫,然後讓該登錄名能夠操作新數據庫(包括 DDL),所有這些都無需通過 db 進行手動干預腳本。(這用於實體框架程式碼優先遷移,如果它不存在,可以配置為自動創建連接字元串中命名的數據庫。)

SQL Server 中存在此功能(通過向dbcreator角色添加登錄名),但 Azure SQL 被證明是一個更難破解的難題。

另外:我注意到Special Roles 的文件中存在衝突,並且我已經就此事提出了一個問題。我不知道這是否與我的錯誤有關,但我認為值得一提。

如何啟用登錄以在 Azure SQL 中創建新數據庫,以使登錄作為具有讀/寫/ddl 權限的使用者自動添加到新數據庫中?

dbmanager 角色是數據庫角色而不是伺服器角色。該數據庫角色僅存在於主數據庫中。

即,您必須*在主數據庫中為有問題的登錄創建一個使用者,*並將該使用者添加到 dbmanager 角色。如下圖所示:

CREATE LOGIN test WITH PASSWORD=N'Passw0rd'
GO

--Fails:
ALTER ROLE dbmanager ADD MEMBER test
GO

CREATE USER testUsr FOR LOGIN test
GO

--Executes successfully:
ALTER ROLE dbmanager ADD MEMBER testUsr
GO

引用自:https://dba.stackexchange.com/questions/311200