请问一下,怎么做用户权限较合理,就是那种一般用户进来对某个表只有读的权限,而管理员进来可以浏览表还可以查询,超级用户进一步还可以修改表,
再有就是怎么样做使一用户建的表只能自己和DBA看到,而别人看不到,他自己登录进来时自己看到

解决方案 »

  1.   

    建立角色,建立用户,用户赋予不同的角色。表的防护基于角色,或者基于用户都可以,怎么说呢,建立基于用户的防护很啰嗦,通常基于角色。自己建立的新表,没有授予其他角色或者用户权利的时候,他们是看不到的,不过新表是基于角色的,一个属于DBA的非SA用户仍然可以访问的,你要去掉这个访问角色,然后只授予SA权利。你的这个逻辑好罗索的。你用SQLServer企业管理器作的话,很简单,就是啰嗦。不过你弄这么多的用户干吗?通常我们不用SQL的Master表中的用户干活,为什么呢?1、用DBMS的用户系统不安全,因为网络传输和不安全的客户端都会泄漏这些绝密信息。2、难弄的很,麻烦的很,而且,一旦程序有问题,就会破坏DBMS的用户系统。怎么做呢?用自己的用户系统管理数据,防护通过自己的服务器程序进行,因为DBMS的绝密信息不泄漏,所以很安全。很灵活的就可以增强防护,只需要赋予自己的服务程序或者Com组件不同的OS用户权利,就可以和SQLServer结合起来,比如不允许新建表,删除表等等。而数据库的绝密信息绝对不会泄漏。有些客户端查询写得有漏洞的,可以让用户指定表名和数据库,不知道查询sysusers或者Master数据库会导致什么后果,呵呵。真是奇怪,我不知道他们为什么会这么简单的问题都想不到。
      

  2.   

    同意 BlueTrees(蜗牛)的意见。
      

  3.   

    同意, 角色权限的实现过程, 可以试用Delphi的ActionManger,涉及到功能的都可以用Action来锁定, , 从数据库中读取登陆用户对各Action的控制权限, 参考实际界面上的操作内容 ,在Action的onUpdate事件中 给Action.Enabled赋值. 我们现在做的一个程序就是这么干的 .
      

  4.   

    to  BlueTrees(蜗牛) :
      看到你回话真是激动不已,但是没看懂不禁痛骂自己,能不能具体再说说,或是给出一个实例,我将感激不尽
    TO  hotzhu(非洲白脸):
     没明白你的意思,能不能具体讲一下,十分感谢
      

  5.   

    这个很容易的
    不必基于角色
    那样限制太死了
    你可以在表的各个事件中检查就行了
    beforeopen
    beforeedit
    beforedelete
    等等
    做一个公用的过程
    把功能号(读1,查询2之类的)和提前设置的用户权限结合判断一下
    用户权限可以设成一个集合(字符串)
    检查相应的位是不是1就知道他能不能使用这个功能了
      

  6.   

    那我想建只有自己和DBA才能看到的 表呢?
      

  7.   

    最好是建立角色!我使用的是ORACLE,利用角色你能很好的控制用户的访问权限!
    先用 CREATE ROLE RoleName  建立角色名,然后用GRANT UPDATE(first_name,salary) ON employee to  RoleName 最后再使用GRANT RoleName to users 分给每一个用户!
    这样就能很好的控制每一个用户的权限!