建立应用程序角色,给角色相应的权限,然后应用程序以各自的用户登录就可以了,
“但这样程序就失去了灵活性,一旦用户名/密码修改,程序就不能启动。”
不明白你这样说什么意思,难道你还不允许用户自己修改自己的密码?给每个用户建立自己的login不就可以了?同时将相应的角色赋给相应的login

解决方案 »

  1.   

    写定一个supervisor,其他在table中定义
      

  2.   

    设一个权限相当小的登录SQL的帐号,这个帐号只能读到数据库里的一个表,这个表中含有权限更大的登录SQL的帐号的记录,比如userid ,password,sqluser,sqlpassword并且这张表的数据经过简单的转换(比如abc按某一规则换成了cba等),然后应用程序通过权限小的登录SQL的帐号登录sql再根据用户的登录找出sqluser,sqlpassword,再利用这个东西登录sql。不知我有没有说清这个思路。
      

  3.   

    帖主的意思大概是想访问sql的数据只能通过你
    自己写的程序来进行,不希望用户直接在机器
    上修改数据,比如用sql查询分析器什么的?如果真的要这样的话就比较困难了的说,
    有不良企图的人能坐到你的服务器前面(当然能对服务器
    进行操作)那么打开sql管理器,还不是想怎么做就怎么做了个人愚见,对特别重要的数据部分加密处理,这样
    一般的人就不能通过在sql查询分析器里面
    update,select,或者delete什么的了。西西,也许是我把帖主的意思理解错了,大家不要拿我开刷哦
      

  4.   

    不给用户直接修改表的权限,把修改表动作放到Stored Procedure里面,所有对表的操作都得调用SP,这样方便管理。
      

  5.   

    楼上几位说得是很不错的办法
    不过这样有一个缺陷呀?
    比如你用PB什么的开发一个应用系统(程序)出来
    系统需要mssql支持,这样的话,你们的办法就
    不太可行了,还有贴主的意思怕我们都理解错了呢
      

  6.   

    to N_chow(mysqlsky.126.com) 
    就是用存储过程,但对应的sql登录帐号权限也必须要有这些权限呀?
      

  7.   

    再不然那就在你的Table上写上Trigger,在Trigger里面用APP_NAME()来判断,若是App_Name()=你的应用程序名,则把动作提交,否则就RollBack.Create Trigger abc ON TableName
    FOR INSERT,UPDATE,DELETE
    AS
      IF APP_NAME()<>"Your Application Name"
          RollBAck Tran...
    当然,Trigger最好是加密,并且不要给User修改Table结构的权限。
      
      

  8.   

    谢谢大家的指教。我觉得这是很多人都会碰到的问题。例如做证券交易系统,对操作人员有严格限制,比如每次交易不超过多少钱,某个操作员只能取钱,而另一个只能存钱,每次存取钱必须有详细的记录(谁操作的,什么时候操作的,等)。如果操作人员知道了数据库的密码,他就可以直接使用数据库的工具修改个人的资金。即使使用SQL Server的应用程序角色,他也可以用VB编写一个程序修改。怎样防止这些事情发生,就是这个问题。