在 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 角色。如下图所示: