计算机等级考试辅导:登录触发器强制检查Sybase客户端的字符集合
![](http://www.onekao.net/templets/default/images/content_ad.gif)
计算机等级考试辅导:登录触发器强制检查Sybase客户端的字符集合 #
公司开发的某个软件升级,客户端字符集全部从cp850改为cp936。为避免未改字符集的用户误登录,写了一个登录触发器,强行进行检查。一旦发现客户端程序使用的不是cp936,强行中止会话。
注意,登录错误信息,不会输出到客户端,而是记录在数据库系统日志中。
/* 登录用户的缺省数据库,有时不一定是master库 */
use master
go
/* 检查登录字符集的存储过程 */
If Exists( Select 1 From sysobjects
Where type = ’P’ and name = ’sp_checklogin’ )
drop procedure sp_checklogin
go
create procedure sp_checklogin
as
begin
declare @validcs varchar(100)
declare @hostname varchar(30)
declare @program_name varchar(30)
declare @ipaddr varchar(64)
select @validcs = ’cp936’,
@hostname = hostname,
@program_name = program_name,
@ipaddr = ipaddr
from master..sysprocesses
where spid = @@spid #
if @@client_csname <> @validcs
begin
print "Login error: your client charset is %1!, please set it to %2!." ,
@@client_csname, @validcs
print "--host name: %1!", @hostname
print "--program name: %1!", @program_name
print "--IP address: %1!", @ipaddr
select syb_quit()
end
end
go
/* 设置TryUser用户登录触发器的例子 */
sp_modifylogin TryUser, ’login script’, sp_checklogin
go
#