对于系统的安全设计,以及不同用户的访问权限控制(AD方案之外的)的解决方案的讨论

易企加_天马行空 2008-11-06 02:40:35
大家平时设计系统,对于系统(比如一个网站)的安全是如何设计的?一个系统往往不同用户能访问的资源会受到权限的控制,一般是如何设计的呢?

1、对于用户的认证如何做?
1、对于传输的数据安全如何做?
3、对于不同用户不同权限控制如何做?
谢谢了。
...全文
193 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
qiying1988 2008-11-10
  • 打赏
  • 举报
回复
up
xu_2007 2008-11-10
  • 打赏
  • 举报
回复
1、对于用户的认证如何做?
2、对于传输的数据安全如何做?
3、对于不同用户不同权限控制如何做?

第一点可以通过在数据库中设置相应的用户数据表来获取用户的具体数据,这些数据包括用户的用户名,密码等等!
第二点可以通过对需要传输的数据进行加密来实现,比如可以使用DES(对称加密算法),RSA(非对称加密算法),使用RSA就要比使用DES要更安全些,因为RSA属于公钥加密算法,只要私钥不被知道那是非常难于破解的!
第三点可以通过在数据库里面建立一张权限表来控制,不同的用户赋于不同的权限,比如计算机管理员拥有所有权限,而普通用户只能拥有一般权限!
qinhl99 2008-11-07
  • 打赏
  • 举报
回复
up
wangping_li 2008-11-07
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 tmxk2002 的回复:]
呵呵,非常感谢wangping_li 的回复,按照你到方案,能控制到菜单(也就是模块)一级了,但有时候要控制界面上具体的某些元素,比如A能看到某界面20个元素,B只能看到其中10个,怎么控制?
还有如果要把安全和权限做成一个平台级别的系统,有什么好的方案么?因为整个业务系统有很多子系统,甚至还有异构系统(java平台的)。希望所有子系统能统一认证与授权,还要能单点登录。
大家动动脑筋一起想想,相信对诸位做软件做系统…
[/Quote]
对,我说的只是模块级的,至于界面上的某些元素可见,某些不可见,我觉得这应该是用户的操作权限了,和增删改查一样,根据指定的权限Range值,窗体Load事件判断哪些可用,哪些不可用
  • 打赏
  • 举报
回复
呵呵,非常感谢wangping_li 的回复,按照你到方案,能控制到菜单(也就是模块)一级了,但有时候要控制界面上具体的某些元素,比如A能看到某界面20个元素,B只能看到其中10个,怎么控制?
还有如果要把安全和权限做成一个平台级别的系统,有什么好的方案么?因为整个业务系统有很多子系统,甚至还有异构系统(java平台的)。希望所有子系统能统一认证与授权,还要能单点登录。
大家动动脑筋一起想想,相信对诸位做软件做系统有好处:)
wangping_li 2008-11-07
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 tmxk2002 的回复:]
对于窗体这样,对于功能呢?比如wcf的服务?
[/Quote]
窗体也一样的
就如我上面说的,窗体是根据用户所属的用户组来判断的
而用户组又有对应的菜单组表,这样就可以在菜单组表给用户分配相应菜单ID
到时构建模块菜单时就是根据
根据用户所属用户组,菜单组来..还是举个例吧,这样直观些:

菜单表PurviewID:
PurviewID PurviewName PID Range
1 系统管理 1 0
2 用户信息 1 6
3 权限分配 1 10

注:Range是这个菜单的最高操作权限值
用户组表UserGroup:
ID UserGroupName
1 用户组A
2 用户组B
菜单组表GroupPurview:
purviewID UserGroupID GroupRange
2 1 6
3 1 10
2 2 4


注:GroupRange是用户组可以操作的权限值,不能大于对应菜单表的权限值
用户表UserInfo:
ID Name UserGroupID
1 admin 1
2 aaa 2

注:我上面只是取表中的主要字段,并没全部写出来哦

这样在用户登录时记录用户登录用户名,找出用户的UserGroupID,这里方便说明记录UGID
这样就可以利用这个用户组UGID去找出在GroupPurview的权限
假如GroupPurview有一个方法FindByUserGroup_ID
当前用户所属用户组权限GroupCollection= getGroupPurviewProx().FindByUserGroup_ID(UGID);
假如菜单表的所有记录集合为:PurviewCollection,那么就可以根据GroupCollection和PurviewCollection来找出当前用户可以访问的菜单集合了:
var value = from u in PurviewCollectionjoin r in GroupCollectionon u.PurviewID equals r.PurviewID select u;
List<Purview> modules=new List<Purview>();
modules.AddRange(value);
这个modules就是当前用户可访问的菜单集合
然后利用递归把这个菜单树构建出来即可

这样构建出来的结果肯定是admin登录可以访问所有菜单,而aaa只能访问用户信息
wangping_li 2008-11-07
  • 打赏
  • 举报
回复
我一般是:
用户表,用户组权限表,菜单表,菜单组表
操作权限的话一般是程序中定义的枚举
用户表可以指定用户所属的用户组
菜单组表包括:菜单表ID,用户组ID,操作权限值
菜单表主要包括:
ID,名称,PID,窗体所属的dll,窗体名称
这样的话就可以构建出的菜单树时反射这个窗体的dll,根据窗体名称来打开相应的窗体
  • 打赏
  • 举报
回复
对于窗体这样,对于功能呢?比如wcf的服务?
wangping_li 2008-11-07
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 tmxk2002 的回复:]
引用 4 楼 zlb789 的回复:
最近刚刚做了个

用户 角色 权限
用户角色关联 角色权限关联

在调用相应功能的时候判断 ,或者设置相应功能的可见性

如何判断?给每个功能一个Code,然后被调用的功能代码里去验证这个code是否和用户的角色匹配吗?
[/Quote]
每个用户都有属于的用户组权限,这个用户组权表就包含了一个权限值,如:
add=1,delete=2,update=3,select=4
用户组A的权限值=6
用户组B的权限值=10
那么在窗体加载的时候,就可以判断用户组的权限值&add是否等于1....
这样就可以得出用户组A只有查询和删除权限,而B有全部权限
也很好控制功能的可见性
  • 打赏
  • 举报
回复
有没有人做过重写asp.net或者WCF本身的安全认证机制(实现它们定义的接口)来达到安全认证的?
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zlb789 的回复:]
最近刚刚做了个

用户 角色 权限
用户角色关联 角色权限关联

在调用相应功能的时候判断 ,或者设置相应功能的可见性
[/Quote]
如何判断?给每个功能一个Code,然后被调用的功能代码里去验证这个code是否和用户的角色匹配吗?
zlb789 2008-11-06
  • 打赏
  • 举报
回复
最近刚刚做了个

用户 角色 权限
用户角色关联 角色权限关联

在调用相应功能的时候判断 ,或者设置相应功能的可见性

Jack_xiao 2008-11-06
  • 打赏
  • 举报
回复
维护一个注册用户表
密码可以用MD5加密
权限可以用一个权限表,如果选择不多,可以写在程序中
冷月孤峰 2008-11-06
  • 打赏
  • 举报
回复
一般的是:
用户表
菜单表
角色表
角色对应的菜单表
cpio 2008-11-06
  • 打赏
  • 举报
回复

一般有用户表,模块表,权限表

权限表里面存放的是用户可以操作的模块,操作包括查看,修改,删除等。

可以在模块里面进行权限判断,也可以在调用模块前判断

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧