Sql-Server
嘗試向 Azure SQL 特殊角色“dbmanager”添加登錄時出錯
在 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