特定的数据库表寄存器权限

时间:2019-12-20 12:39:01

标签: sql-server permissions

我将以开始时的示例进行解释:

我有这张表'database.dbo.table1',其中包含以下数据:

**userID | amount | Units** 
1      | 300    | 2
2      | 150    | 2
3      | 120    | 1
1      | 80     | 16
3      | 130    | 8

我在数据库中为每个存在的userID创建1个用户:

user_1
user_2
user_3

这就是我想要的。我想要的是,如果用户1要从database.dbo.table1中进行选择*,则用户只需要看到以下内容:

**userID | amount | Units** 
1      | 300    | 2
1      | 80     | 16

没有看到其他用户的数据。

¿我可以使用数据库授予的权限来执行此操作吗,例如“如果user_1正在执行选择,则仅在userID ='1'时才给他数据?

或者也许

每次用户想要进行选择并更改用户选择的背景时,我都可以使用触发器来完成此操作吗?

这是我第一次必须根据登录的用户将信息与依赖于寄存器的表分开。

请帮助并非常感谢

2 个答案:

答案 0 :(得分:1)

除了使用视图(一种很好的方法)外,SQL Server还支持Row-Level Security,该方法将根据用户过滤行,而不必引入视图。

答案 1 :(得分:0)

最简单的方法可能就是创建类似的视图

CREATE VIEW `database.dbo.table1_user1` AS SELECT * 
FROM `database.dbo.table1`
WHERE **userID = 1;

针对每个用户。您还具有更改权限,以便用户只能访问此视图。

如果用户不直接访问数据库,则可以通过编程方式解决此问题。

更新

还可以为所有用户创建一个视图并使用CURRENT_USER()函数(mysql) 然后,CREATE语句将如下所示:

CREATE VIEW `database.dbo.table1_view` AS SELECT * 
FROM `database.dbo.table1`
WHERE **userID = SUBSTRING(CURRENT_USER(), 6, 1);

感谢您注意到这种可能性