搜索过很多答案,基本都是类似这样的方式:
在登录窗体输入用户名和密码,用sql语句(adoquery)查询该用户,比较密码是否正确
查询之前已经建立了数据库连接,比如用adoconnection,问题是adoconnection的连接属性如何设置,通常的话adoconnection的连接中已经指定了连接的用户名和密码,如果密码发生变化的话,程序运行就会无法连接。
我见过一个系统,一直想不出它是怎么设计的登录,整个的表现如下:
 1.sqlserver上有一个属性为该数据库的dbowner的用户admin
 2.每次增加系统用户,都会在sqlserver上增加一个同名的只读用户(如A1)和以用户名+#结尾的只读用户(A1#),我看过了这两个用户的属性,均对数据库为public角色,对服务器无任何角色。
 3.每次用户A1登陆时在事件探测器中看到实际是以A1#连接的
 4.无论如何更改admin的密码,A1用户登陆后,始终可以正常更改或操作数据库。
 5.如果去除admin用户的dbowner角色,则其他用户就无法更改数据。各位大哥分析一下,他这是如何实现的.
 

解决方案 »

  1.   

    先说这个问题,adoconnection的连接字符串,可以动态设定,把用户名和密码设置成两个变量,然后动态设置adoconnection的连接
      

  2.   

    adoconnection连接一般都是使用固定的内部用户名和密码,它是数据库分配的用户名。系统登录时,一般是检查与应用系统相关的用户,这些用户的用户名和密码是存储在数据库表中的。应用程序用户和数据库用户是两个概念,不要混淆了。
      

  3.   

    3楼的说法我也赞同,但是要注意,万一你的内部用户名和密码被更改了,程序就无法运行了,当然你也可以说再改回去就可以了,不过我更欣赏的是我举的那个例子,无论我怎么该admin的密码,只要admin是这个数据库的dbowner,程序就一直能正常运行,我想知道它是如何实现的
      

  4.   


    你试过更改sqlserver的sa密码吗,修改它后,是否仍然可以与数据库连接,是否可以正常操作?
      

  5.   

    我就用程序用户登录,关于数据库sql server2000 的登录是由window实行.
      

  6.   

    没有,我查过了,至少admin用户是在master的sysusers中没有的。按照公司的要求,每个sqlserver上的用户密码我们都是定期更换的,如果使用固定的内部用户名和密码,安全性得不到保障。开这个帖子的目的是大家讨论研究一下如何在这种情况下保证系统的正常运行。
    我现在用的这个系统,无论怎么改密码,一直是可以正常运行的。
      

  7.   

    提醒搭积本玩的朋友们,作登录小心sql注入喽
      

  8.   

    如果没错的话(SQL 认证模式下):
    SQL SERVER账号的密码更改后若在登录SQL SERVER时必须使用更改后的账号和密码连接,才能操作数据库吧?
    应用程序必需使用SQL SERVER里的账号连接,才可以操作数据库,这个应该是基本要求吧?我所知道的两种方法:
    1. SQL SERVER上建立固定账号,指定操作数据库的权限;在应用程序中使用此账号连接,用用户表保存使用者清单。
    ---------------------影响:指定账号变更,即使用应用系统的用户正确仍无法登录及操作。
    2. 应用程序直接使用SQL SERVER账号认证,连接数据库,根据指定的权限操作。
    ---------------------影响:指定账号变更,直接使用变更后的账号登录即可进行相应操作。3. 等待补充