SQL SERVER的SA用户密码不定期更改
程序该如何适应呢?

解决方案 »

  1.   

    provider=MSDASQL.1;persist security info=false;user id=sa;data source=sfsq;initial catalog=sfsq
    上面是connectionstring,我就是想,如果SQL登陆密码更换了,这个字符串怎么换密码?
      

  2.   

    方法1,在SQL中新建一账户,在代码中根据新建的账户与固定密码连接SQL
    方法2,将SA的密码加密后存放于客户端的外部环境中,程序启动时先从外部环境中读取密码解密,再替换连接语句的密码
                   
      

  3.   

    方法2该如何实现呢?
    配置INI文件如何确定路径,如何读取?
    能给个例程吗?谢谢
      

  4.   

    若有成百上千个客户端一个个去修改不现实吧?
    或者借用winsock?每次连接向服务端请求密码?
      

  5.   

    把用户名和密码放入INI文件中
      

  6.   

    配置INI文件如何确定路径,如何读取? 
    能给个例程吗?谢谢
      

  7.   

    说到安全,客户机上保存密码的配置文件方式比即时请求安全?
    即时请求你只要在服务端保存密码文件(加密),接到请求后以密文方式向请求端发送信息,客户端接收到数据解析后直接连接服务器了(当然也可以保存在一个全局变量中,供多次调用,这样只要在程序初始化时,连接一下获得密码后就可以断开winsock连接),客户端不留任何痕迹,怎么会不安全?说到便捷,这个方法比较一台台客户机上去配置文件更便捷吧?另外,一般企业内部应用不需要经常修改SQL数据库密码吧?值得探讨......
      

  8.   

    'Option Explicit
    '保存执行SQL语句的字符串
    Public sqlstmt As String
    '声明写入INI文件的API函数
    Public Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
    Public Declare Function WritePrivateProfileSection Lib "kernel32" Alias "WritePrivateProfileSectionA" (ByVal lpAppName As String, ByVal lpString As String, ByVal lpFileName As String) As Long
    '定义服务器参数常量
    Public server As String
    Public user As String
    Public password As String'声明类模块变量
    Public mydb As New clsdb
    Public mybusinessman As New Clsbusinessman
    Public mycustomer As New Clscustomer
    Public mydeliver As New Clsdeliver
    Public mybusiness As New Clsbusiness
    '程序进入点
    Sub main()
    '从setup.ini中读取服务器信息
        server = getkey(App.Path + "\setup.ini", "server")
        user = getkey(App.Path + "\setup.ini", "user")
        password = getkey(App.Path + "\setup.ini", "password")'如果读取不成功,退出
    If server = "" Then
        MsgBox "setup.ini格式不正确,请重新设置"
        End
    End If''设置数据环境器参数
    'DataEnvironmentclient.Client.ConnectionString = "driver={sql server};server=" + Trim(server) + ";uid=" + Trim(user) + ";pwd=" + Trim(password) + ";database=erp1"'显示主窗体
    Frmmanclient.Show
    End SubFunction fileexist(fname As String) As Boolean
    '判断INI文件是否存在
    On Local Error Resume Next
        fileexist = (Dir(fname) <> "")
    End Function
    Public Function getkey(tmp_file As String, tmp_key As String) As String
    Dim file As Long
    '分配文件句柄
    file = FreeFile
    '如果文件不存在则创建一个默认的SETUP.INI文件
    If fileexist(tmp_file) = False Then
        getkey = ""
        Call WritePrivateProfileString("setup information", "server", "", App.Path + "\setup.ini")
        Call WritePrivateProfileString("setup information", "username", "", App.Path + "\setup.ini")
        Call WritePrivateProfileString("setup information", "password", "", App.Path + "\setup.ini")
        Exit Function
    End If
    '读取数据项值
    Open tmp_file For Input As file
    Do While Not EOF(1)
        Line Input #file, buffer
        If Left(buffer, Len(tmp_key)) = tmp_key Then
            pos = InStr(buffer, "=")
            getkey = Trim(Mid(buffer, pos + 1))
        End If
    Loop
    Close file
    End Function