对用户/角色的最佳实践SQL Server上的web应用程序(Best practice on us

2019-07-05 21:56发布

我在网上搜了一下,没找到什么真正钉在当场或覆盖的基础如何去建立用户/角色的数据库上。

基本上,会有将被用于从应用程序(在这种情况下,Web应用程序),将需要访问数据库的常规数据库操作(选择,插入,更新,删除)访问数据库的用户和执行存储过程(以exec运行其他存储过程/ UDF)的内存储过程。

然后,我们也有,这将是主管理用户(这是很简单的)。

我现在有一个开发环境,我们并不真正管理安全太清楚在我看来(应用程序用来与db_owner角色用户,但它是一个Intranet应用程序)。 尽管这是一个Intranet应用程序,我们仍然有安全意识和想看看有一些什么的方式开发建立了用户/角色的这种类型的环境。

编辑:Web应用程序和SQL Server驻留在不同的机器。

编辑:忘了提,一个ORM使用,将需要直接读/写访问。

问:什么是关于建立应用程序访问用户的“最佳做法”? 将适用什么样的角色,什么是一些捕捞量?

Answer 1:

首先,我倾向于在封装数据库角色的权限,而不是将它们连接到单独的用户主体。 这里最大的胜利是角色是你的数据库的一部分,这样你就可以完全脚本安全然后告诉部署类型为“添加用户和他添加到这个角色”,他们不是战斗SQL权限boogeymen。 此外,这让事情不够干净,你可以避开的db_owner模式开发和感觉很多更好地了解自己 - 以及练习像你玩,一般避免任何问题。

只要申请权限这个角色,我倾向于撒网更广泛的这些天,特别是如果一个正在使用的ORM,并通过应用程序处理的安全性。 在T-SQL术语,它看起来像这样:

GRANT SELECT, UPDATE, INSERT, DELETE, EXECUTE on SCHEMA::DBO to [My DB Role]

这初看起来似乎有点吓人,但它确实是不 - 这种作用不能做得比操纵数据的任何其他。 为扩展特效或系统的特效或授权用户访问,禁止访问等。另外一大优势是,改变模式 - 如添加表或程序 - 不需要进一步的安全保障工作,只要你保持该模式中。

另一个要考虑的SQL 2005+是使用数据库架构,以确保对象组。 现在,这里的大招是很多的ORM和迁移工具不喜欢他们,但如果你渲染默认模式[DBO]的应用程序,你可以使用替代模式特别安全的东西。 EG - 创建应该由管理员可以手动运行特殊的,残酷的数据库清理程序的admin模式。 甚至对于需要更精细的DB权限的应用程序的特殊的,高度安全的部分一个单独的模式。

只要在你有单独的盒子,甚至没有域,你可以使用Windows身份验证(集成身份验证SQL Server的术语),用户接线。 只是要对两个框中相同的凭据(用户名/密码组合)的用户。 安装一个应用程序域为在网络上盒和安装SQL Server用户通过在SQL盒和利润是主要支持用户运行。 也就是说,使用此决定的数据库角色几乎可以离婚,你作为部署类型应该能够处理创建SQL用户,并根据需要修改连接字符串。



Answer 2:

在很长一段时间的应用程序访问数据库的SQL Server准则是孤立的数据访问到存储过程,过程分组为模式,并授予执行的架构应用程序所使用的主体。 所有权链将保证程序呼叫者数据访问。 访问可以通过检查存储过程进行审查。 这是一个简单的模型,容易理解,设计,部署和管理。 存储过程的使用可以利用代码签名,最细致和强大的访问控制方法,也是唯一一个是防篡改(如果程序改变签名是丢失)。

问题是,技术从Visual Studio正在添加的设计师每比特这项建议背道而驰。 开发商都带有模型,只是很难与存储过程中专门使用。 开发人员喜欢先设计自己的类模型,并生成从逻辑模型的表结构。 基于程序准则reuire先存在,应用程序的第一行写前的程序,这是在发展问题实际上是由于现代发展的迭代的方式。 这是不可解决的,只要团队领导是意识到这个问题并解决它(即有程序准备好了 ,甚至嘲笑,在开发周期的开始)。



Answer 3:

创建一个用户WEBUSER“的Web应用程序使用。

只能授予存储过程的执行权限给该用户。 不允许直接表读/写。 如果你需要从表中读到的东西,写一个PROC。 如果你需要写数据,写另一个PROC。

这样,所有事情都保持很好的和简单的。 一个应用程序的用户,只有相关的权限。 如果安全受到威胁,那么所有的入侵者能做的就是运行特效。



文章来源: Best practice on users/roles on SQL Server for a web application