'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
上面是connectionstring,我就是想,如果SQL登陆密码更换了,这个字符串怎么换密码?
方法2,将SA的密码加密后存放于客户端的外部环境中,程序启动时先从外部环境中读取密码解密,再替换连接语句的密码
配置INI文件如何确定路径,如何读取?
能给个例程吗?谢谢
或者借用winsock?每次连接向服务端请求密码?
能给个例程吗?谢谢
即时请求你只要在服务端保存密码文件(加密),接到请求后以密文方式向请求端发送信息,客户端接收到数据解析后直接连接服务器了(当然也可以保存在一个全局变量中,供多次调用,这样只要在程序初始化时,连接一下获得密码后就可以断开winsock连接),客户端不留任何痕迹,怎么会不安全?说到便捷,这个方法比较一台台客户机上去配置文件更便捷吧?另外,一般企业内部应用不需要经常修改SQL数据库密码吧?值得探讨......
'保存执行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