根据用户的角色限制返回的行数

时间:2016-08-11 17:01:21

标签: sql sql-server stored-procedures

我希望对db用户有一个控件来选择sql中的表。对于前者有一个名为' user1'另一个是' user2'。

User1在数据库中具有admin角色。 User2的角色较低。当用户运行查询时,我想检查用户名和用户名,如果是管理员用户,那么我允许它运行。如果它是一个较低角色的用户,我需要限制查询的结果(不是拒绝,只是限制。)为ex。我不希望较低角色的用户在表上看到PhoneNumber列,因此我需要将该结果作为除了PhoneNumber列之外的表给予该用户。

我知道我可以在角色区域的列权限上执行此操作。但我也想限制查询:只返回top(5)结果,而不是所有表。

所以我需要一个存储过程或类似的东西,当用户执行查询时会自动运行。在sql中是否有任何sp或类似的东西?

提前致谢。

1 个答案:

答案 0 :(得分:1)

没有办法直接这样做。

您可以使用表值函数执行某些操作,例如根据用户的角色附加WHERE子句。但是TOP运算符无法做到这一点,因为必须最后应用。

理论上,您可以使用自己的sp_execute变体引入SQL重写,但实际上这会为SQL注入攻击带来巨大的漏洞。

选项:

  1. 在应用程序级别处理限制。
  2. 撤消对表的SELECT权限,并仅通过存储过程公开它。您可能需要大量存储过程来考虑用户可能需要数据的各种方式。