【问题标题】:ASP.NET 4.6, Identity Framework and SQL AzureASP.NET 4.6、身份框架和 SQL Azure
【发布时间】:2016-04-14 15:53:47
【问题描述】:

我有一个 ASP 4.6 MVC 网站(全部更新到最新的 Nuget 包),它在 SQL Server 上使用集成身份框架和实体框架。

如果我将 Connectionstring 与我的数据库管理员一起使用,一切正常,但是当我切换到额外的数据库用户时,我会收到“用户登录失败...”。

我在主数据库中创建了用户:

CREATE LOGIN user1 with password='geheim'

然后将他添加到数据库中:

CREATE USER user1 FROM LOGIN user1 

EXEC sp_addrolemember 'db_datareader', 'user1' 
EXEC sp_addrolemember 'db_datawriter', 'user1'

我可以使用此凭据从 SQL 企业管理器 连接到 SQL Azure 并查询我的数据库,但不能在数据库上使用身份。

您知道使用数据库需要哪些角色或权限吗?

【问题讨论】:

    标签: asp.net sql-server entity-framework azure asp.net-identity


    【解决方案1】:

    经过长时间调试会话后,我找到了解决方案: 如果 throwIfV1Schema 设置为 true,则身份框架会关联扫描数据库。 当我使用自定义 IdentityDbContext 时,我必须将构造函数更改为:

    Public Sub New()
        MyBase.New(Settings.DSN, False)
    End Sub
    

    现在身份框架的启动只需要当前数据库的用户。

    【讨论】:

    • 此外,如果您未将用户添加到主数据库,Azure AebApps 上的应用程序启动可能会非常慢(>30 秒)。
    【解决方案2】:

    我会尝试使 LOGIN 名称与 USER 名称不同。您可以在以下链接中找到有关如何设置以及使用哪些角色的详细说明:SQL Database security: Manage database access and login security

    以下示例是从与您所拥有的页面相似的页面中提供的。

    -- first, connect to the master database
    CREATE LOGIN login1 WITH password='<ProvidePassword>';
    CREATE USER login1User FROM LOGIN login1;
    EXEC sp_addrolemember 'dbmanager', 'login1User';
    EXEC sp_addrolemember 'loginmanager', 'login1User';
    

    【讨论】:

    • 嗨,这不起作用。如果我使用 SQL Azure 数据库管理员,我只能使用实体框架和实体框架连接到数据库。任何其他用户(服务器用户 -> 数据库用户和新的 V12 包含的数据库用户)都不起作用。
    • 查看我的评论。用户还必须在主数据库中以加快应用启动。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-13
    相关资源
    最近更新 更多