通常的做法是用SESSION_USER这个,但我的数据库设计的是Windows用户认证,所以便当时没有用户名、密码。所有的ASP.NET网页也都是以这种方式登录的数据库查询。
现在做触发器遇到问题了,SESSION_USER这个值永远是dbo,因为我的用户名、密码只是数据表中的一个字段,用户登录网页的时候,我只是用user表中的数据对比用户输入的数据。我曾经想过,在数据库中新建个"当前用户"表,但一想,就不对了,要是多个用户登录,大家来回改这个表里的值。求高手指点吧

解决方案 »

  1.   

    我就想解决这个实际问题,触发器里如何知道当前用户是谁啊?????
    比如有用户改了一条记录,我要在触发器里知道是谁改的,当然,如果是登录到SQL Server所在的操作系统改的,直接就记录是dbo也没关系,就是说用网站页面操作的话,怎么知道呢?
      

  2.   

    恕我才疏学浅,没怎么看明白你的意思。你的意思是?
     你数据库表中的用户通过网页修改数据库记录,比如修改记录时间(不一定是自己的)。此时你在数据库中的update触发器需要知道用户名,以便写入log,大概齐是我说的意思么?
    如果是,那么数据库是不知道你的当前用户是谁的。除非你传用户参数。
    如果不是我能想到的是你只能取连接某库的连接登录名。其他的我还真不知道怎么取。
      

  3.   

    http://msdn.microsoft.com/zh-cn/library/bb326598.aspx
    微软的标准做法,登录触发器,登录的时候给每个用户建一个临时表,并且在表里赋值当前用户是谁,触发器里从这个临时表里查当前用户
      

  4.   

    很简单吧,在触发器运行以下语句可取当前用户到变量SELECT 
           @USERID     =LOGINAME,                        --连接的时候使用的哪个SQL登陆用户         
           @HOSTNAME       =HOSTNAME,                       --客户端的机器名                           
           @LOGINID            =NT_USERNAME,                            --客户端的登陆用户(OS的用户)   
           @APPNAME          =PROGRAM_NAME      --是从查询分析器,还是应用程序来执行的                 
      FROM MASTER..SYSPROCESSES
      WHERE SPID=@@SPID
      

  5.   

    我不为楼主这样的标题所吸引,也不是被帖子的内容所迷惑。我不是来抢沙发的,也不是来打酱油的。我不是为楼主呐喊加油的,也不是对楼主进行围堵攻击的。我只是为了每天积分默默奋斗。你是个美女,我毫不关心,你是个怪兽,我决不在意;你是个帅哥,我不会妒忌,你是个畜男,我也不会PS。你的情操再怎么高尚,我也不会赞美,你的道德如何沦丧,我也不为所动。在这个处处都要升级的时代,不得不弄段牛B的话来显眼,于是我抄下了这段话,专门用来回帖,好让我每天有固定的积分收入!!!