我正在尝试针对通过 Azure 托管标识连接的 Azure SQL 数据库运行 EF6 Code First 迁移。有几个迁移要运行。上次迁移失败。此迁移与其他迁移不同,因为它在新模式中创建表。
这是运行创建新架构的实体框架代码优先迁移时返回的错误:
System.Data.SqlClient.SqlException: The specified schema name "uuid@uuid" either does not exist or you do not have permission to use it.
CREATE SCHEMA failed due to previous errors.
我已经在数据库上记录了 SQL 命令,并且似乎失败的命令是
IF schema_id('MyNewSchema') IS NULL
EXECUTE('CREATE SCHEMA [MyNewSchema]')
出现错误:
<batch_information><failure_reason>Err 2759, Level 16, Server mysqldbname
CREATE SCHEMA failed due to previous errors.</failure_reason></batch_information>
以下是该系统的一些详细信息:
- 在此之前的所有其他迁移都成功了。但是,这些都不需要创建新模式
- 使用 .NET Framework 4.7.1。EF6.2.0。
- 使用 Azure SQL 数据库。
- 使用 Azure 托管标识 ( https://docs.microsoft.com/en-us/azure/app-service/app-service-web-tutorial-connect-msi )从 ASP.NET MVC Web 应用程序连接到 Azure SQL 。
我尝试过的事情
1.添加角色
我尝试过的主要事情是使用 Microsoft 权限文档来确定需要哪些权限。到目前为止,我已将以下角色添加到运行迁移的应用服务连接的包含用户:
db_ddladmin
db_datareader
db_datawriter
db_securityadmin
db_owner
db_accessadmin
(请注意,其他迁移仅适用于 db_ddladmin、db_datareader 和 db_datawriter)
2. 以服务器管理员身份运行迁移
我尝试以 SQL Server 管理员用户身份运行迁移。这可行,但我们不允许以生产系统的 SQL Server 管理员用户身份连接。