MySQL逻辑问题:哪个是向用户授予来自不同表的不同行的权限的最佳方法?

问题描述 投票:0回答:1

我们有几个表:用户,单位,类,时间表和标记(可以更多)

  • 用户(id_user,电子邮件,密码)
  • 单位(id_unit,名称)
  • 类(id_class,id_unit,name)
  • schedule(id_schedule,id_class,start_dt,end_dt)
  • 标记(id_mark,id_user,id_schedule,value)

我想允许一个用户或另一个用户查看/更新/删除一个表中的一行。

我不能使用角色,因为我没有特定的规则。

我的解决方案是:创建一个名为:permissions(id,table,id_table,id_user,view,update,delete)的表,并使用行表传递用户,但是当这个表有70k行时,下一个语句需要一段时间(我用db播种机测试过):

SELECT *
FROM marks
WHERE id_mark IN (SELECT id_table FROM permissions WHERE table = 'marks' AND id_user = '1')

哪个是向用户授予来自不同表的不同行的权限的最佳方法?

mysql
1个回答
1
投票

您可以尝试使用连接创建引用updatable views表的permissions,并使用WITH CHECK OPTION“约束对视图引用的表中的行的插入或更新。” (source)权限将授予视图,而不授予表本身。

您可以检查视图是否可更新:

MySQL在CREATE VIEW时设置一个标志,称为视图可更新性标志。如果UPDATE和DELETE(以及类似操作)对于视图是合法的,则该标志设置为YES(true)。否则,该标志设置为NO(false)。 INFORMATION_SCHEMA.VIEWS表中的IS_UPDATABLE列显示此标志的状态。

© www.soinside.com 2019 - 2024. All rights reserved.