Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 使用SQL Server用户和角色作为intranet web应用程序的授权数据库?_Sql Server_Asp.net Mvc 3_Authorization_Intranet - Fatal编程技术网

Sql server 使用SQL Server用户和角色作为intranet web应用程序的授权数据库?

Sql server 使用SQL Server用户和角色作为intranet web应用程序的授权数据库?,sql-server,asp.net-mvc-3,authorization,intranet,Sql Server,Asp.net Mvc 3,Authorization,Intranet,我有一个问题,真的觉得我应该有一个简单的答案,但由于这样或那样的原因,我还不能完全围绕它的原因 我正在着手开发ASP.NET MVC3 intranet应用程序,目前正在设计身份验证和授权。我们被迫在我们的环境中使用基本身份验证,并且我们使用Active Directory,因此授权部分通常会得到处理。不幸的是,我们在active directory中的角色/用户层次结构没有反映应用程序中角色所需的内容,因此我必须定义自己的角色层次结构 我使用的是SQL Server,所以我最初考虑对所有DML

我有一个问题,真的觉得我应该有一个简单的答案,但由于这样或那样的原因,我还不能完全围绕它的原因

我正在着手开发ASP.NET MVC3 intranet应用程序,目前正在设计身份验证和授权。我们被迫在我们的环境中使用基本身份验证,并且我们使用Active Directory,因此授权部分通常会得到处理。不幸的是,我们在active directory中的角色/用户层次结构没有反映应用程序中角色所需的内容,因此我必须定义自己的角色层次结构

我使用的是SQL Server,所以我最初考虑对所有DML使用存储过程,然后在SQL Server中创建角色并在角色中添加用户,然后通过这些角色控制对存储过程的访问。我还认为可以查询那些SQL Server数据库级别的用户和角色,以便将其用作应用程序本身中授权信息的来源。这原本看起来是一个不错的想法,但似乎并不受欢迎(首先,对于它们产生的内容来说,对它的查询似乎有点冗长和混乱)。或者,让web应用程序为服务器的所有查询模拟一个用户,然后使用我自己的模式实现一个用户/角色数据库,并且只在应用程序端进行授权,这样会更好吗

最初看来,在应用程序和数据库端进行授权对于安全性来说都是一件好事,而使用SQL Server用户/角色对象意味着用户和角色数据不需要存储在两个地方

我确实看到了一些潜在的相关讨论,但我认为这是一个不同的问题


谢谢

我建议创建一个sql登录名,web应用程序将使用该登录名连接到sql server。这样,您就不会模拟任何特定的广告帐户,这些帐户将来可能会被删除、禁用,并且可以在SQL Server中严格控制用户


然后,我建议在应用程序中实现基于角色的身份验证。这将使您能够创建应用程序自定义的用户和角色,然后将用户分配给他们。这样,如果用户试图访问一个不允许其角色的资源,它将不会执行任何工作。下面是一个基于此原理的演示应用程序

哇,这一次出乎意料的安静回应。经过再三考虑,我决定寻找其他方法。我认为这是可行的,但最终可能会带来更大的安全风险,使用所有用于更改DB安全对象的内置过程似乎是一件痛苦的事情(尽管说实话,我并没有深入研究该文档)。尽管我更希望DB和应用程序都具有良好的安全性,但在这种情况下,主要关注应用程序安全性似乎是可以的。无论如何,它都需要启动。下面是另一个可能有用的例子。这就是我最后所做的