我们有几个表:用户,单位,类,时间表和标记(可以更多)
我想允许一个用户或另一个用户查看/更新/删除一个表中的一行。
我不能使用角色,因为我没有特定的规则。
我的解决方案是:创建一个名为: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')
哪个是向用户授予来自不同表的不同行的权限的最佳方法?
您可以尝试使用连接创建引用updatable views表的permissions
,并使用WITH CHECK OPTION“约束对视图引用的表中的行的插入或更新。” (source)权限将授予视图,而不授予表本身。
您可以检查视图是否可更新:
MySQL在CREATE VIEW时设置一个标志,称为视图可更新性标志。如果UPDATE和DELETE(以及类似操作)对于视图是合法的,则该标志设置为YES(true)。否则,该标志设置为NO(false)。 INFORMATION_SCHEMA.VIEWS表中的IS_UPDATABLE列显示此标志的状态。