SQL 限制对特定视图的读写

SQL Limiting read and write to certain views

我有一个数据库,每个用户都可以在其中创建一个帐户并保存用户特定的详细信息。当然,我希望每个用户只能修改与其帐户相关联的内容。

我的策略是为每个帐户创建一个 SQL 登录名和用户,为每个 table 他们可以访问并授予他们执行一些程序的权限创建一个视图。

视图是这样创建的:

using (var cmd = new SqlCommand("CREATE VIEW [<viewName>] AS SELECT * FROM <TableName> WHERE ProfileID = '" + <UserId> + "'", con))
{
    cmd.ExecuteNonQuery();       
}

我测试了视图,发现用户 仅 see/select 项目链接到他们的 ID 但问题是当我尝试使用另一个用户 ID 执行过程时,该用户能够修改不在他看来的数据; "belongs" 给另一个用户的数据。

所以我的问题是:

  1. 这是正确的做法吗?出于某种原因感觉有点不对劲。我的想法基于此:

https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/granting-row-level-permissions-in-sql-server

  1. 如何确保用户只能编辑他们视图中包含的行?在授予用户视图和执行之前,我是否必须拒绝用户某些事情?

谢谢。

这不是正确的方法。

ASP.NET 网站通常使用 SQL 登录名,该登录名具有对整个数据库(或至少对您的应用程序使用的数据库部分)的完整 read/write 访问权限。

请注意,这并不意味着您网站上的所有用户都可以对数据执行任何操作。 web 用户没有SQL 登录,web 用户只能访问你编写并允许他运行 的功能。您需要在您的 ASP.NET 控制器代码中限制用户的访问权限,在您的(C#,VB.NET)代码中执行 SELECT 或更新之前检查他们的权限。

这里是an example how it should be done.