Sql 使用视图验证不正确的登录id或身份不明的用户

Sql 使用视图验证不正确的登录id或身份不明的用户,sql,sql-server,sql-server-2005,permissions,view,Sql,Sql Server,Sql Server 2005,Permissions,View,我在msdn上读到: 视图允许不同的用户以不同的方式查看数据,即使他们使用相同的视图 同时提供数据。当具有许多不同兴趣和技能级别的用户共享同一数据库时,这一点尤其有用 例如,可以创建一个视图,仅检索与客户经理交易的客户的数据。该视图可以根据使用该视图的帐户经理的登录ID来确定要检索的数据 我的问题: 对于上面的示例,我必须在创建视图的表上有一个名为Userid/LoginId的列,以便在视图中为该列应用一个check选项。然后,如果一个名称不在该列中的用户试图输入数据,则他/她将被阻止。是的,您

我在msdn上读到:

视图允许不同的用户以不同的方式查看数据,即使他们使用相同的视图 同时提供数据。当具有许多不同兴趣和技能级别的用户共享同一数据库时,这一点尤其有用

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

我的问题:


对于上面的示例,我必须在创建视图的表上有一个名为Userid/LoginId的列,以便在视图中为该列应用一个check选项。然后,如果一个名称不在该列中的用户试图输入数据,则他/她将被阻止。

是的,您是对的。你应该

  • 添加一列,其中包含用户的登录名或数据库用户名(比如您称之为用户名)
  • 每一行都应该有用户名,并填入允许查看该行的人员的登录名或数据库名
  • 然后,您可以在where子句中使用内置函数
    SUSER\u SNAME()
    (用于登录)或
    USER\u NAME
    (用于数据库名称)构建一个视图,以仅过滤允许用户查看的行
请参阅。

您不必向表中添加列:更合适的做法是添加一个新表来对关系进行建模

有一个deisgn的经验法则,规定表应该对实体或关系建模,但不能同时对两者建模。假设该表为客户拥有的公司(即实体表)建模,业务规则规定客户经理只能看到与他所照顾的客户相关的公司

客户经理
公司
的一个属性吗?否,因此,
account\u manager
不应是
公司
表中的列(属性)

客户经理
公司
之间是否存在直接关系?不,因此,此处不存在关系表(因为关系是间接的)


相反,直接关系是在
客户经理
客户
之间,以及
客户
公司
之间。应该有两个表,其唯一目的是为这些关系建模。

@paolo:我必须事先添加合法用户,是吗?@sqlchild是的,在使用它之前,您必须在数据库中写入合法用户。@paolo:我必须将合法用户添加到表中的列中。@sqlchild:每行可以看到多少用户?如果只有一个用户可以查看每一行,则可以在同一表的列中添加该用户的用户名。但是您有多个用户可以看到每一行,您应该将其设置为一对多关系。@paolo:一行可以被多个用户看到。如何实现一对多关系。你能帮我查一下密码吗