用登录触发器强制检查Sybase客户端字符集

今天公司开发的某个软件升级,客户端字符集全部从cp850改为cp936。为避免未改字符集的用户误登录,我写了一个登录触发器,强行进行检查。一旦发现客户端程序使用的不是cp936,强行中止会话。

注意,登录错误信息,不会输出到客户端,而是记录在数据库系统日志中。

  1. /* 登录用户的缺省数据库,有时不一定是master库 */
  2. use master
  3. go
  4. /* 检查登录字符集的存储过程 */
  5. If Exists( Select 1 From sysobjects
  6.              Where type = 'P' and name = 'sp_checklogin' )
  7.   drop procedure sp_checklogin
  8. go
  9. create procedure sp_checklogin
  10. as
  11. begin
  12.   declare @validcs varchar(100)
  13.   declare @hostname varchar(30)
  14.   declare @program_name varchar(30)
  15.   declare @ipaddr varchar(64)
  16.     
  17.     select @validcs = 'cp936',
  18.         @hostname = hostname,
  19.         @program_name = program_name,
  20.         @ipaddr = ipaddr
  21.     from master..sysprocesses
  22.         where spid = @@spid
  23.   if @@client_csname <> @validcs
  24.   begin
  25.     print   "Login error: your client charset is %1!, please set it to %2!." ,
  26.         @@client_csname, @validcs
  27.     print "--host name: %1!", @hostname
  28.     print "--program name: %1!", @program_name
  29.     print "--IP address: %1!", @ipaddr
  30.     select syb_quit()
  31.   end
  32. end
  33. go
  34. /* 设置TryUser用户登录触发器的例子 */
  35. sp_modifylogin TryUser, 'login script', sp_checklogin
  36. go

 

你可能感兴趣的:(数据库,Sybase,存储)