首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据库权限结构

数据库权限结构
EN

Stack Overflow用户
提问于 2009-07-14 18:33:45
回答 3查看 1.1K关注 0票数 1

我的许多雇主的应用程序都有类似的内部权限结构,用于将数据限制在特定的用户或组中。组也可以嵌套。

这种方法目前面临的问题是,枚举权限的速度非常慢。当前方法使用具有多个游标和临时表的存储过程。这对于较小的应用程序是很好的,但是我们现在有一个特定的系统,它正在快速增长,并且它开始减速。

表的基本结构如下;

tblUser { UserID,用户名,WindowsLogonName }

tblGroup { GroupID,名称,描述,SystemFlag }

tblGroupGroup { GroupGroupID,Name,}

tblGroupUser { GroupUserID,Name,}

把一切都绑在一起;

tblPermission { PermissionID,SecurityObjectID,SecuredID,TableName,AllowFlag }

其中包含行,如..。

'5255-5152-1234-5678',‘{组的ID}’,‘{tblJob}中某物的{ID’,‘tbl作业’,1

'4240-7678-5435-8774‘、’{用户ID}‘、’{tblJob}中某样东西的{ID‘、’tbl作业‘、1

'5434-2424-5244-5678',‘{组的ID}’,‘{tblTask}中某物的{ID’,'tblTask',0

肯定有一种更有效的方法来枚举所有组,并获取安全行的ID?

如果用户被显式地拒绝了对一行的访问,那么这就否决了任何组权限。这都是在MSSQL中完成的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-07-14 21:07:44

我猜将tblPermission分解成两个表是有用的:一个用于组,另一个用于用户。通过在其中同时包含组和用户,它似乎增加了设计的复杂性(也许这就是您需要存储过程的原因)。

如果您想将tblPermission表分解成类似于tblUserPermission和tblGroupPermission的表,但仍然想要一个类似于tblPermission的表的表示形式,那么您可以创建一个视图,它是来自这两个表的数据。

希望这能有所帮助。您有存储过程的示例吗?

票数 0
EN

Stack Overflow用户

发布于 2009-07-15 20:48:43

我认为您可以使用递推公共表表达式(CTE)分层查询。如果你搜索它,你可以找到很多例子。就是其中之一。

票数 0
EN

Stack Overflow用户

发布于 2009-09-05 12:13:36

也许您的设计是可以的,但是实现/代码是错误的。

一些想法:

  • 你所有的ID列都是GUID吗?不推荐金伯利L Tripp
  • 所有外键的索引,可能在键中有其他列或包括
  • 定期维修?零碎的索引、日期统计等
  • 是否所有数据类型都匹配(假设没有FKs):datatype优先级和隐式转换错误可能在

一些更多的模式信息和性能较差的代码示例可能会有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1127168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档