【问题标题】:Entity Framework Insufficient SQL Server Privileges实体框架 SQL Server 权限不足
【发布时间】:2016-07-09 23:49:48
【问题描述】:

我已经在另一个 Web 应用程序和数据库上使用了 Entity Framework 6,没有出现任何问题,但是我现在使用 EF6 编写了一个新的 Windows 窗体程序,该程序只有在我使用具有服务器系统管理员角色的集成安全性时才能工作。

如果我创建一个数据库登录名并将其映射到我需要的具有读取、写入和管理员角色的数据库,我会因为权限不足而收到无法创建表错误。如果我使用

this.SetDatabaseInitializer<Model>(null); 

它不返回任何数据。

需要注意的是,另一个应用程序在这些数据库上运行并使用 Entity Framework 没有问题。我不确定哪个版本。我已尝试使用其他应用程序使用的相同登录名,但仍然无法正常工作。

这是我的连接字符串不起作用:

<add name="Model" 
     connectionString="Data Source=server;Initial Catalog=database;User ID=username; Password=password; Persist Security Info=True; MultipleActiveResultSets=True;App=EntityFramework" 
     providerName="System.Data.SqlClient"/>

这行得通:

<add name="Model" 
     connectionString="data source=server;initial catalog=database;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" 
     providerName="System.Data.SqlClient" />

我显然不能让每个人都成为系统管理员,因此我将不胜感激。我正在为这个拔头发。

【问题讨论】:

    标签: c# sql-server winforms entity-framework entity-framework-6


    【解决方案1】:

    您的问题不在于实体框架,而在于管理来自 Windows 胖客户端应用程序的安全数据库访问。

    您在其中指定用户 ID 和密码的连接字符串要求已创建 SQL Server 登录并授予对目标数据库服务器和常驻数据库的适当权限。当然,这需要将 SQL Server 配置为除了 Windows 登录之外还允许 SQL Server 登录。这种应用程序安全手段对于由 IIS 托管的 Web 应用程序非常有意义,但对于客户端应用程序可能不是最好的。

    查看这个 SO 问题和相关答案以获得好的选择。

    How do I safely store database login and password in a C# application?

    我建议您使用使用集成安全性的第二个连接字符串(即当前经过身份验证的 Windows 用户帐户),创建一个 Windows 组并授予 Windows 组对目标服务器和数据库的必要权限。这消除了将您的连接字符串与您的每个客户端部署的应用程序一起保护的需要,并且它允许您通过维护 Windows 安全组来轻松管理权限。

    哦,请考虑减少对远低于系统管理员对 SQL Server 的访问权限的访问权限。即使您确实需要创建和修改架构,目标数据库中的数据库所有者可能就足够了...

    【讨论】:

    • 我计划使用集成安全性,但问题是服务器管理下面的任何东西都不起作用。我只使用sql登录来测试权限。
    【解决方案2】:

    看来我是自己最大的敌人。我的连接字符串指向了错误的数据库,当我有权限时它正在创建空表,而当我没有权限时,它什么也不返回。

    【讨论】:

      猜你喜欢
      • 2021-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-02
      • 1970-01-01
      • 2010-10-05
      • 2010-11-04
      相关资源
      最近更新 更多