【发布时间】:2010-11-10 18:16:05
【问题描述】:
我的许多雇主应用程序共享一个类似的内部权限结构,用于将数据限制为一组特定的用户或组。组也可以嵌套。
我们目前使用这种方法面临的问题是枚举权限非常慢。当前方法使用带有许多游标和临时表的存储过程。这对于较小的应用程序来说效果很好,但我们现在有一个特定的系统正在快速增长,并且开始放缓。
基本表结构如下;
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 of a User}', '{ID for something in tblJob}', 'tblJob', 1
'5434-2424-5244-5678', '{ID of a Group}', '{ID for something in tblTask}', 'tblTask', 0
肯定有更有效的方法来枚举所有组并获取安全行的 ID?
使事情进一步复杂化;如果用户被明确拒绝访问某行,则这会否决任何组权限。这一切都在 MSSQL 中。
【问题讨论】:
-
你使用的是什么版本的SQL Server;有一些建议,但它们取决于 sql server 的版本。看看负载较高的应用程序中的最终权限,您可能可以在您的选择上拆分检查以授予和拒绝,这可能会简化执行,因为我习惯于在我的应用程序中看到更多的授权。
-
SQL Server 2005。在哪里可以找到有关“负载较高的应用程序”的信息?
标签: sql-server performance permissions database-permissions