【发布时间】:2017-01-19 01:55:17
【问题描述】:
我希望能够限制未登录 Web 应用程序用户的 CRUD 访问。这意味着我需要在验证他们是否是当前登录用户后设置连接字符串。
我的代码中有 CRUD 限制,但希望设置帐户权限以确保用户无法访问他们不应该访问的表,或执行他们不应该执行的操作。
现在我的连接字符串设置在我的Startup.cs 文件中:
services.AddDbContext<WorldContext>(options => options
.UseMySql(_config["ConnectionStrings:Database"]));
如何在启动之外设置连接字符串,或者至少设置数据库帐户的用户名和密码?在我验证用户已登录后的某个时间?
我正在使用ASP.Net Core、Entity Framework Core 和Asp.NET Core Identity。
我只想授予用户需要的必要权限。引用自这里:https://msdn.microsoft.com/en-us/library/cc716760(v=vs.110).aspx
在数据源中只授予用户必要的权限。数据源管理员应该只授予必要的权限 给用户。即使 Entity SQL 不支持 DML 语句 修改数据,例如 INSERT、UPDATE 或 DELETE,用户仍然可以访问 与数据源的连接。恶意用户可以使用它 以本地语言执行 DML 语句的连接 数据源。
【问题讨论】:
-
通常您在代码中限制 CRUD,而不是在您的 Web 应用程序数据库中。关于如何做的问题仍然有效,但不确定你应该这样做......
-
@KeithNicholas 我一遍又一遍地读到你应该使用分层数据库帐户。在 SO、工作中以及大多数 DB/Web 应用程序安全博客/文章等中。每个用户都没有帐户,但从他们的操作中运行的查询是在某个帐户下运行的。我敢肯定,当您在 SO 或 Facebook 上发表评论时,您的查询不会以数据库管理员的身份执行。 msdn.microsoft.com/en-us/library/… 安全注意事项
-
当然,但是为什么您的网络应用程序需要删除/创建表等权限?这意味着您不使用管理员帐户....只需要选择、插入、删除更新....除此之外,您的数据库连接之间会有什么不同?
-
@KeithNicholas 似乎没有必要详细说明我的 Web 应用程序的用途、使用对象和方式,以及某些用户需要某些权限而其他用户不需要。简短而准确的答案是,未登录的用户只需要拥有
select权限,并且仅限于某些表。登录用户需要各种权限,从只读到插入和删除,仅限某些表。引擎盖下还有更多细节,但我的问题应该传达我正在尝试做的事情,即遵循安全最佳实践。
标签: c# entity-framework asp.net-core asp.net-identity