我将以开始时的示例进行解释:
我有这张表'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'时才给他数据?
或者也许
每次用户想要进行选择并更改用户选择的背景时,我都可以使用触发器来完成此操作吗?
这是我第一次必须根据登录的用户将信息与依赖于寄存器的表分开。
请帮助并非常感谢
答案 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);
感谢您注意到这种可能性