搜索文章:

首页  |  Java技术  |  Asp.net  |  Asp编程  |  VC/C++  |  Delphi  |  VB编程
上一篇:用Java获得IP地址 >>

一组SQLServer身份验证管理子程序

option compare database
public appaccess as access.application

sub callsqldmosqlserverlogin()
 dim srvname as string
 dim suid as string
 dim pwd as string

 ' 设置 sql server 的登录参数
 srvname = "(local)"
 'suid = "sa"
 'pwd = ""

 ' 调用 sql server 登录过程
 sqldmosqlserverlogin srvname, suid, pwd
end sub


sub sqldmosqlserverlogin(srvname as string, suid as string, pwd as string)
 dim srv1 as sqldmo.sqlserver

 ' 新建一个服务器实例
 set srv1 = new sqldmo.sqlserver

 ' 调用 sql server 登录连接方法
 srv1.connect srvname, suid, pwd


 ' 断开连接
 srv1.disconnect
 set srv1 = nothing
end sub


sub callsqldmowindowslogin()
 dim srvname as string

 ' 设置 windows 登录参数
 srvname = "(local)"

 sqldmowindowslogin srvname
end sub


sub sqldmowindowslogin(srvname as string)
 dim srv1 as sqldmo.sqlserver

 ' 新建一个服务器实例
 set srv1 = new sqldmo.sqlserver

 ' 在调用前,设置 loginsecure 属性为 true
 ' 使用服务名进行连接
 srv1.loginsecure = true
 srv1.connect srvname

 ' 断开连接
 srv1.disconnect
 set srv1 = nothing
end sub

sub callchangeserverauthenticationmode()
 dim constauth as byte

 ' 设置 constauth 参数为:
 'sqldmosecurity_integrated 为 windows authentication 模式
 'sqldmosecurity_mixed 为 mixed authentication 模式

 ' 设置 constauth 的默认值
 constauth = sqldmosecurity_mixed

 ' 调用改变 sql server 身份认证模式的方法
 changeserverauthenticationmode constauth
end sub

sub changeserverauthenticationmode(constauth as byte)
 dim srv1 as sqldmo.sqlserver

 ' 指定哪个服务器,默认为 local (本地服务器)
 srvname = "(local)"

 ' 使用集成安全(windows)方式新建一个 sql server 对象并进行连接
 set srv1 = new sqldmo.sqlserver
 srv1.loginsecure = true
 srv1.connect srvname

 ' 设置 securitymode 属性为 windows 或混合身份验证模式
 srv1.integratedsecurity.securitymode = constauth
 srv1.disconnect

 ' 调用 stop 方法停止服务器,直到服务器完全停止
 srv1.stop
 do until srv1.status = sqldmosvc_stopped
 loop

 ' 重新以混合模式启动服务器
 srv1.start true, srvname

 ' 断开连接
 srv1.disconnect
 set srv1 = nothing
end sub

sub towindowsauthentication()
 dim srv1 as sqldmo.sqlserver

 ' 指定哪个服务器,默认为 local (本地服务器)
 srvname = "(local)"

 ' 使用集成安全(windows)方式新建一个 sql server 对象并进行连接
 set srv1 = new sqldmo.sqlserver
 srv1.loginsecure = true
 srv1.connect srvname

 ' 设置 securitymode 属性为 windows 身份验证模式
 srv1.integratedsecurity.securitymode = sqldmosecurity_integrated
 srv1.disconnect

 ' 调用 stop 方法停止服务器,直到服务器完全停止
 srv1.stop
 do until srv1.status = sqldmosvc_stopped
 loop

 ' 重新以混合模式启动服务器
 srv1.start true, srvname

 ' 断开连接
 srv1.disconnect
 set srv1 = nothing

end sub

sub windowstomixedauthentication()
dim srv1 as sqldmo.sqlserver

 ' 指定哪个服务器,默认为 local (本地服务器)
 srvname = "(local)"

 ' 使用集成安全(windows)方式新建一个 sql server 对象并进行连接
 set srv1 = new sqldmo.sqlserver
 srv1.loginsecure = true
 srv1.connect srvname

 ' 设置 securitymode 属性混合身份验证模式
 srv1.integratedsecurity.securitymode = sqldmosecurity_mixed
 srv1.disconnect

 ' 调用 stop 方法停止服务器,直到服务器完全停止
 srv1.stop
 do until srv1.status = sqldmosvc_stopped
 loop

 ' 重新以混合模式启动服务器
 srv1.start true, srvname

 ' 断开连接
 srv1.disconnect
 set srv1 = nothing

end sub

sub callopenadpwindowsorsqlserver()
 dim srvname as string
 dim dbname as string
 dim prpath as string
 dim prname as string
 dim suid as string
 dim pwd as string
 dim bolwindowslogin as boolean

 ' 设置打开 adp 程序的参数
 srvname = "(local)"
 dbname = "northwindcs"' adp 连接的数据库
 prpath = "c:\documents and settings\administrator\my documents\"' adp 文件所在的磁盘位置
 prname = "northwindcs"' adp 文件名
 suid = "msdn5"
 pwd = "password"

 ' 该参数用于控制当前用户使用 windows 登录
 ' 代替 sql server 的 suid 和 pwd
 bolwindowslogin = false

 ' 使用 windows 或 sql server 登录调用打开名为 prname adp 的子程序
 openadpwindowsorsqlserver srvname, dbname, prpath, prname, suid, pwd, bolwindowslogin
end sub

sub openadpwindowsorsqlserver(srvname as string, dbname as string, _
 prpath as string, prname as string, _
 suid as string, pwd as string, bolwindowslogin as boolean)

 dim bolleaveopen as boolean
 dim strprfilepath as string
 dim sconnectionstring as string

 ' 是否保持现有打开的程序?
 if msgbox("在该过程中是否关闭打开的 adp?", vbyesno) = vbyes then
 bolleaveopen = true
 end if

 ' 新建 access 会话实例 (使用 .9 : access 2000, .10 : access 2002)
 set appaccess = createobject("access.application.9")

 ' 使用登录名和口令打开 adp 并使其可视
 strprfilepath = prpath & prname
 appaccess.openaccessproject strprfilepath
 appaccess.visible = true

 ' 指定 adp 使用的新的 windwos 或 sql server 登录方式
 if bolwindowslogin then
 appaccess.currentproject.openconnection _
 "provider=sqloledb.1;integrated security=sspi;" & _
 "persist security info=false;initial catalog=" & _
 dbname & ";data source=" & srvname
 else
 sconnectionstring = "provider=sqloledb.1;initial catalog=" & _
 dbname & ";data source=" & srvname
 appaccess.currentproject.openconnection _
 sconnectionstring, _
 suid, pwd
 end if

 ' 按上面提出的要求关闭 access 会话实例
 if bolleaveopen = false then
 appaccess.closecurrentdatabase
 set appaccess = nothing
 end if
end sub

sub calllogindemo()
 dim srvname as string
 dim suid as string
 dim pwd as string

 ' 设置登录 sql server 的参数
 srvname = "(local)"
 suid = "sa"
 pwd = ""

 ' 调用 sql server 登录子程序
 logindemo srvname, suid, pwd
end sub


sub logindemo(srvname as string, suid as string, pwd as string)
 dim srv1 as sqldmo.sqlserver
 dim lgn1 as sqldmo.login

 ' 新建一服务器实例
 set srv1 = new sqldmo.sqlserver

 ' 以 sql server 方式连接 sql server
 srv1.connect srvname, suid, pwd

 ' 新建登录对象
 set lgn1 = new sqldmo.login

 ' 添加默认 sql server 登录 msdn6
 lgn1.name = "userx"
 lgn1.database = "northwindcs"
 lgn1.setpassword "", "password"
 srv1.logins.add lgn1

 '重新新建登录对象
 set lgn1 = new sqldmo.login

 ' 添加基于 windows 组 sql_users 的登录对象
 lgn1.name = "mydesk\usersql"
 lgn1.database = "northwindcs"
 lgn1.type = sqldmologin_ntgroup
 srv1.logins.add lgn1

 ' 在添加登录后,列出登录列表
 debug.print "添加 2 个新登录后的登录列表:"
 for each lgn1 in srv1.logins
 debug.print decodelogintype(lgn1.type), lgn1.name
 next lgn1

 ' 删除刚新建的登录
 srv1.logins.remove "mydesk\usersql"
 srv1.logins.remove "userx"

 ' 列出登录列表
 debug.print vbcr & "删除 2 个新登录后的登录列表:"
 for each lgn1 in srv1.logins
 debug.print decodelogintype(lgn1.type), lgn1.name
 next lgn1

 ' 断开连接
 srv1.disconnect
 set srv1 = nothing
end sub


function decodelogintype(lgn_type as byte) as string

 select case lgn_type
 case 0
 decodelogintype = "sqldmologin_ntuser"
 case 1
 decodelogintype = "sqldmologin_ntgroup"
 case 2
 decodelogintype = "sqldmologin_standard"
 case else
 decodelogintype = "超出范围"
 end select

end function

sub makeloginwithdatareaderuser()
 dim srv1 as sqldmo.sqlserver
 dim lgn1 as sqldmo.login
 dim usr1 as sqldmo.user
 dim srvname as string
 dim suid as string
 dim pwd as string
 dim dbname as string
 dim prpath as string
 dim prname as string
 dim bolwindowslogin as boolean

 ' 设置参数
 srvname = "(local)"
 suid = "sa"
 pwd = ""
 dbname = "northwindcs"

 ' 新建服务器实例
 set srv1 = new sqldmo.sqlserver

 ' 以 sql server 登录方式进行连接
 srv1.connect srvname, suid, pwd

 ' 新建一个 sql server 登录对象 userx
 suid = "userx"
 set lgn1 = new sqldmo.login
 lgn1.name = suid
 lgn1.database = dbname
 lgn1.setpassword "", pwd
 srv1.logins.add lgn1

 ' 在数据库 northwindcs 上新建一个用户对象 userx,并与登录对象 userx 相关联
 set usr1 = new sqldmo.user
 usr1.name = suid
 usr1.login = lgn1.name
 srv1.databases(dbname).users.add usr1
 srv1.databases(dbname).databaseroles("db_datareader").addmember usr1.name

 ' 设置调用 adp 的子程序参数
 prpath = "c:\documents and settings\administrator\my documents\"
 prname = "northwindcs"

 ' 该参数用于控制当前用户使用 windows 登录
 ' 代替 sql server 的 suid 和 pwd
 bolwindowslogin = false

 ' 使用 windows 或 sql server 登录调用打开名为 prname adp 的子程序
 openadpwindowsorsqlserver srvname, dbname, prpath, prname, suid, pwd, bolwindowslogin
end sub


sub cleanupaftermakeloginwithdatareader()
 dim srv1 as new sqldmo.sqlserver

 srv1.connect "(local)", "sa", ""

 srv1.databases("northwindcs").users.remove "userx"
 srv1.logins.remove "userx"
end sub

()

相关文章:
© 2006   www.java-asp.net