SQL 服务器 - Return 行基于用户角色

SQL Server - Return rows based on user role

我们正在开发一个带有 SQL 服务器后端的 Access 应用程序。我们有一个 table,它有属于部门 A、B 或 C 的记录。用户也属于角色 A、B 或 C。我们希望每个用户只看到他们对应的部门记录,以及只看到某些列。

我想到了两种方法,一种是针对每个角色进行不同的查询,然后根据用户的角色,更改表单的源对象。但是我不知道是否可以使用 VBA 从 SQL 服务器检索它(到目前为止我发现的所有 VBA 文档都非常缺乏)。

我认为的另一个解决方案是在服务器上实现它,但是我不知道 T-SQL 查询或视图如何根据用户的角色只获取所需的信息

有什么想法吗?

PS: 我不能使用函数或存储过程。出于某种原因,我们提供的 SQL 服务器禁用了它们,IT 运营人员不会启用它们(不知道这背后的逻辑)。

您可以使用不同的架构创建相同的表,并将用户权限分配给不同的架构。例如,您可以使用 Accounting.Users 和 Warehouse.Users 而不是 dbo.Users。将会计组中的用户分配给会计模式。或者如上面所建议的那样,这些可以是架构中的视图,该架构包含来自基础表的 select 数据。

好的,我 post 编辑这个已经有一段时间了,但我会 post 我最终想出的解决方案。 VBA 在这种情况下不是很有必要。配合views就可以完美完成。

要检索用户角色,(内部)将 table database_role_members 与 database_principals 加入两次。在两个字段上按 Id(来自 database_principals)加入。这样,您将获得所有角色及其相应用户的列表。要获取查询数据库的用户的角色,只需添加一个 where 子句来检查用户名是否与函数 USER_NAME.

相对应

然后,不要授予那些角色访问我们想要限制访问的 table 的权限。相反,创建一个从该 table 获取信息的视图,并添加一个 where 子句,根据检索用户角色的查询从列中查找值。

有了这个,您可以 link 访问视图,并且只允许您查看与用户角色相对应的记录。

虽然这种方法很简单,但它不允许更复杂的行级安全性。对于更强大的方法,检查以下内容可能会有用 link.

https://msdn.microsoft.com/en-us/library/dn765131.aspx