使用视图有不正确的登录ID的验证或未经认证的用户

问题描述:

我读到这在MSDN上:使用视图有不正确的登录ID的验证或未经认证的用户

意见让不同的用户看到不同的方式处理数据,即使他们使用相同的 数据在同时。当有许多不同兴趣和技能水平的用户共享同一个数据库时,这一点特别有用。

例如,可以创建一个仅检索客户经理处理客户的数据的视图。该视图可以根据使用该视图的客户经理的登录ID来确定要检索哪些数据。

我的问题:

对于上面的例子,我就必须有一个名为用户名/登录ID在我的表列在其上创建视图,以便我可以在视图应用检查选项此列。然后如果名称不在该列中的用户尝试输入数据,则他/她被阻止。

是的,你是对的。你应该

  • 添加一列与用户的登录名或数据库用户名(说你怎么称呼它的用户名),
  • 每一行应该具有的用户名填充了谁被允许看到的人的登录名或数据库名称该行
  • 那么你就可以在您使用的内置函数SUSER_SNAME()(用于登录)或USER_NAME(数据库名)的WHERE子句中仅过滤行的用户建立一个视图允许看到

Granting Row-Level Permissions in SQL Server (ADO.NET)

+0

@paolo:我必须从事先添加合法用户,不是吗? – sqlchild 2011-03-10 08:33:55

+0

@sqlchild是的,你必须在使用前写入数据库中的合法用户。 – 2011-03-10 08:59:11

+0

@paolo:我必须将合法用户添加到表中的列中。 – sqlchild 2011-03-10 11:09:22

您不需要已将添加到表中:可能更适合于添加新​​表来建模关系。

有一个deisgn经验法则规定表应该为实体或关系建模,但不能同时建模。假设有问题的表格模拟客户拥有的公司(即实体表),业务规则指出客户经理只能看到与他所关注的客户有关的公司。

account manager属性company?不,所以account_manager不应该是Companies表中的列(属性)。

是否有直接account_managercompany之间的关系?不,所以两者之间的关系表不在这里(因为关系是间接的)。

相反,直接关系分别customercompany之间是account managercustomer之间,和。应该有两个表格,其唯一目的是模拟这些关系。