C# 我是否可以使用SQL Server安全性来控制对(数据库优先)ASP.net应用程序的访问?怎么用?
到目前为止,我一直是一名SQL server开发人员,但我现在必须制作一个ASP.net MVC5应用程序,以允许用户访问数据。以前,所有访问都是通过(SSL加密的)ODBC连接进行的,ODBC连接使用SQL Server登录进行保护。我熟悉SQL Server安全管理;我有一系列定义的角色,访问通常在模式级别被授予或拒绝。这也使我能够轻松监控/审核访问和数据更改 我读到的关于ASP.net的所有内容似乎都希望我为应用程序创建一个具有非常广泛的读/写权限的单一用户,然后在应用程序级别逐段锁定这些用户。如果可能的话,我真的不希望这样做——我希望用户在运行时提供他们的SQL server uid/密码,并基于此确定他们的权限。我想我有两个问题:C# 我是否可以使用SQL Server安全性来控制对(数据库优先)ASP.net应用程序的访问?怎么用?,c#,asp.net,sql-server,asp.net-mvc,security,C#,Asp.net,Sql Server,Asp.net Mvc,Security,到目前为止,我一直是一名SQL server开发人员,但我现在必须制作一个ASP.net MVC5应用程序,以允许用户访问数据。以前,所有访问都是通过(SSL加密的)ODBC连接进行的,ODBC连接使用SQL Server登录进行保护。我熟悉SQL Server安全管理;我有一系列定义的角色,访问通常在模式级别被授予或拒绝。这也使我能够轻松监控/审核访问和数据更改 我读到的关于ASP.net的所有内容似乎都希望我为应用程序创建一个具有非常广泛的读/写权限的单一用户,然后在应用程序级别逐段锁定这些
- 您将无法区分应用程序是否正在数据库中进行更改,或者该用户是否登录到您的数据库并进行了更改
- 在应用程序中公开数据库登录。根据部署位置的不同,如果不防止暴力攻击(或任何可能危及用户凭据的攻击),这可能会带来安全风险
- 您无法精确定义允许应用程序执行的操作。有人可以在您的数据库中创建超级用户,然后通过您的应用程序登录,并完全控制您的数据库
- 不要为应用程序创建单个用户并授予其所有权限。如果应用程序中存在错误,可能会导致数据库处于不一致的状态(坏数据、缺少条目等)。只给它特定操作所需的权限-尽可能地锁定它
不要直接为数据库使用最终用户凭据 这种方法的基本问题是,您需要能够检索最终用户的密码才能连接到数据库 这意味着,如果您的系统遭到破坏,您将泄漏其他站点的密码(针对重复使用密码的用户) 作为折衷方案,您可以将DB密码设置为最终用户密码的迭代哈希。
但是,您仍然需要将其存储在登录cookie中(可能是加密的),这通常也是一个坏主意 我希望用户在以下位置提供他们的SQL server uid/密码: 运行时,并基于此确定其权限。。这是公平的吗 可能的它似乎没有作为一个选项记录在任何地方 绝对有可能。您可以使用OWIN Cookie身份验证中间件,并在声明中存储用户名和密码。然后,每当应用程序需要访问数据库时,动态构造连接字符串 尽管从今天开始,在SSL上解密身份验证cookie并不容易,但您必须记住,用户名和普通密码都将在每个页面请求中发送到服务器。如果您需要满足以下要求,则可能是法规遵从性问题 虽然您可以使用会话状态,但在服务器内存中存储普通密码也不是一个好的做法 有没有令人信服的理由让我不应该这样做,即使是这样 可能的我并不完全反对学习新的安全模式 如果这是我需要做的,以确保事情真正安全 虽然这种方法在直接访问数据库(无需web服务)的windows应用程序中非常常见,但在web应用程序中并不常见 如果你有几个用户,这是可以的。但是,如果有很多用户来来往往,那么在SQL Server中为每个用户配置安全设置就成了全职工作。此外,您不能限制谁可以查看哪些页面。 这就是为什么web应用程序通常将授权逻辑保存在应用程序本身中。因此,我们可以使用限制页面访问。如果你想走那条路,那么我会很高兴的