我的许多雇主应用程序共享一个类似的内部权限结构,用于将数据限制为一组特定的用户或组。组也可以嵌套。
我们目前使用这种方法面临的问题是枚举权限非常慢。当前方法使用带有许多游标和临时表的存储过程。这对于较小的应用程序来说效果很好,但是我们现在有一个特定的系统正在快速增长,并且开始放缓。
基本表结构如下;
tblUser { 用户 ID、用户名、WindowsLogonName }
tblGroup { GroupID、名称、描述、SystemFlag }
tblGroupGroup { GroupGroupID,名称,}
tblGroupUser { GroupUserID,名称,}
并将它们捆绑在一起;
tblPermission { PermissionID、SecurityObjectID、SecuredID、TableName、AllowFlag }
其中包含行,如..
'5255-5152-1234-5678', '{ID of a Group}', '{ID for something in tblJob}', 'tblJob', 1
'4240-7678-5435-8774', '{用户 ID}', '{tblJob 中某事的 ID}', 'tblJob', 1
'5434-2424-5244-5678', '{ID of a Group}', '{ID for something in tblTask}', 'tblTask', 0
当然必须有一种更有效的方法来枚举所有组并获取安全行的 ID?
使事情进一步复杂化;如果用户被明确拒绝访问某行,则这会否决任何组权限。这一切都在 MSSQL 中。