您的位置:首页 > 数据库 > SQL

[SQL Server 2005/2008]限制(及监控)建立连接的客户端ip及db用户

2011-01-18 13:41 417 查看
SQL Server 2005开始,引入了新的触发器类型。 详细帮助文档"create trigger"。

本文描述通过触发器,限制某个数据库用户(比如 sa这种高级别的用户),只能从指定的IP登陆,这可以做为防止非法连接数据库的最后防线。

只有在 连接数据库的最后一步(账号密码验证成功后), 才会激活这个触发器。

createtriggertr_logincheckon
all server
forlogon

as

if eventdata().value('(/EVENT_INSTANCE/LoginName)[1]','sysname')=
'sa'

andeventdata().value('(/EVENT_INSTANCE/ClientHost)[1]','varchar(15)')<>
'192.168.0.23'

rollbacktran

go

-- 记录登陆数据库情况

CREATE TABLE [t_log_loginlog](
[loginame] [varchar](30) NULL,
[ipaddress] [varchar](40) NULL,
[spid] [int] NULL,
[hostname] [varchar](30) NULL,
[logtime] [datetime] NULL
);
GO

CREATE trigger [tr_log_login] on all server WITH EXECUTE AS 'sa'
for logon
as
declare @loginame  varchar(30),
@ipaddress varchar(30),
@spid      int,
@hostname  varchar(30);
select @loginame = eventdata().value('(/EVENT_INSTANCE/LoginName)[1]', 'sysname'),
@ipaddress = eventdata().value('(/EVENT_INSTANCE/ClientHost)[1]', 'sysname'),
@spid = eventdata().value('(/EVENT_INSTANCE/SPID)[1]', 'int');
if  @ipaddress not in ('127.0.0.1', '<local machine>') --@loginame = 'sa' or @loginame = 'jav'
begin
select @hostname = [host_name] from sys.dm_exec_sessions where session_id = @spid;
insert into DBperf.dbo.t_log_loginlog(loginame,ipaddress,spid,hostname, logtime)
values( @loginame,@ipaddress,@spid,@hostname, getdate() );
end
GO

ENABLE TRIGGER [tr_log_login] ON ALL SERVER
GO
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐