今天公司開發的某個軟體公升級,客戶端字符集全部從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...