用登入觸發器強制檢查Sybase客戶端字符集

2021-04-20 06:56:18 字數 1188 閱讀 1493

今天公司開發的某個軟體公升級,客戶端字符集全部從cp850改為cp936。為避免未改字符集的使用者誤登入,我寫了乙個登入觸發器,強行進行檢查。一旦發現客戶端程式使用的不是cp936,強行中止會話。

注意,登入錯誤資訊,不會輸出到客戶端,而是記錄在資料庫系統日誌中。

/* 登入使用者的預設資料庫,有時不一定是master庫 */

use master

go/* 檢查登入字符集的儲存過程 */

if exists( select 1 from sysobjects

where type = 'p' and name = 'sp_checklogin' )

drop procedure sp_checklogin

gocreate procedure sp_checklogin

asbegin

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()

endend

go/* 設定tryuser使用者登入觸發器的例子 */

sp_modifylogin tryuser, 'login script', sp_checklogingo

用伺服器觸發器統計登入情況

參考 msdn create trigger transact sql 登入觸發器 use master go 1.建立登入日誌表 if object id sqlserver login log is not null drop table sqlserver login log gocreate...

mysql 用觸發器記錄操作

mysql 不能在乙個觸發器中進行insert,update,delete操作,需分別建三個觸發器 insert觸發器 delimiter create trigger tri city insert after insert on t xfw city foreach rowbegin inser...

mysql用觸發器同步表

一 先複製表 create table tytj select from tongji where user 0 and date 2016 09 26 or date 2016 09 27 二 建立插入資料時的 觸發器 在phpmyadmin 執行時記得要修改語句定界符為 create trigg...