我的许多雇主应用程序共享一个类似的内部权限结构,用于将数据限制为特定的一组用户或组。组也可以嵌套。数据库权限结构
我们目前使用这种方法面临的问题是枚举权限非常慢。当前方法使用具有许多游标和临时表的存储过程。这对于较小的应用程序来说工作得很好,但我们现在有一个特定的系统正在快速增长,并且它开始放慢速度。
基本表结构如下;
tblUser {用户ID,用户名,WindowsLogonName}
tblGroup {的GroupID,名称,说明,SystemFlag}
tblGroupGroup {GroupGroupID,名称}
tblGroupUser {GroupUserID,Name,}
并将它们连接在一起;
tblPermission {PermissionID,SecurityObjectID,SecuredID,表名,AllowFlag}
包含行像..
'5255-5152-1234-5678', '{组的ID}' ,'{ID for something in tblJob}','tblJob',1
'4240-7678-5435-8774','{用户的ID}','{用于tblJob中的东西}',' tblJob',1
'5434-2424-5244-5678','{组的ID'','{ID for在tblTask}','tblTask',0
当然,必须有一个更有效的方法来枚举所有的组,并获得安全行的ID?
使事情进一步复杂化;如果用户明确拒绝访问某一行,则这将否决任何组权限。这一切都在MSSQL中。
您使用的是什么版本的SQL服务器;有几个建议,但他们依赖于SQL Server的版本。 看看更高负载应用程序中的最终权限,您可能能够将支票拆分为授予和拒绝您的选择,这可能会简化执行,因为我习惯于在应用程序中看到比denys更多的授予。 – u07ch 2009-07-14 21:07:54
SQL Server 2005.我在哪里可以找到有关“更高负载应用程序”的信息? – 2009-07-15 08:08:58