用登录触发器强制检查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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值