我有一个有趣的设计问题。我正在设计项目的安全性,以允许我们使用不同成本的不同版本的程序,并允许Manager型用户向其他用户授予或拒绝对程序部分的访问。它将基于Web并托管在我们的服务器上。
我为每个“资源”或屏幕使用一个简单的“允许”或“拒绝”选项。
我们将拥有大量资源,并且用户将能够设置许多不同的组来让用户控制访问。每个用户只能属于一个组。
我想到了两种方法,并且很好奇,这对于SQL Server在性能方面会更好。
选项A 在访问表中存在条目表示允许访问。这将不需要数据库中的列来存储信息。如果没有返回结果,则拒绝访问。
我认为这将意味着表较小,但是查询会搜索整个表以确定没有匹配项吗?
选项B 数据库中包含一个控制“允许/拒绝”的位列。这将意味着总会找到一个结果,并且会产生一个更大的表。
有什么想法吗?
如果只允许/拒绝,那么在用户和资源之间建立一个简单的链接表就可以了。如果在链接表中有一个键入用户资源的条目,则允许访问。
UserResources
-------------
UserId FK->Users
ResourceId FK->Resources
和SQL将是这样的
if exists (select 1 from UserResources
where UserId = @uid and ResourceId=@rid)
set @allow=1;
使用(UserId和ResourceId)上的聚集索引,即使有数百万条记录,查询也将非常快。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。