【转】过滤SQL用户登录(SQL2005)

 

注:高危!

有时候,开发人员在应用服务器上,能拿到数据库的帐号和密码
如果想让DBA死掉,太简单了(哈哈哈~~,有人在奸笑~~!)
所以DBA啊,得处处小心。。

(有人说话了:你傻X吧,应用程序服务器怎么能让开发人员随便上?!)

嘿,就是上了,你DBA能咋样?

如果技术上使数据库帐号只能从某个机器(或某个IP地址)用某个应用程序登录,岂不是很爽?
哎,可惜在MS官方没有找到解决方法......

今天在 小怪物(就是传说中的小怪物) 的大力帮助下,从SQL2005中找到一个方法(非官方),能实现类似功能。


免责声明:该脚本没有得到牛X人士的认可,玩大了,跟俺无关~~!


use msdb --我是在msdb里测试的,不建议在系统库里乱搞,后果自负

--1.创建表
CREATE TABLE [dbo].[UserFiltration](
[ID] [int] IDENTITY(1,1) NOT NULL primary key,
[username] [varchar](100) NOT NULL DEFAULT ('*'),
[programname] [varchar](100) NOT NULL DEFAULT ('*'),
[IP] [varchar](100) NOT NULL DEFAULT ('*'),
[hostname] [varchar](100) NOT NULL DEFAULT ('*'),
[Comment] [varchar](1000) NOT NULL DEFAULT (''),
[Ctime] [datetime] NOT NULL DEFAULT (getdate()),
[Utime] [datetime] NULL

)


go
--2.添加规则

insert into UserFiltration(username,programname,ip,hostname)
select '*','*','*',host_name() --本机登录不受限制

go

--3.添加用户读取权限

grant select on UserFiltration to public

go

--4.添加触发器

create TRIGGER [tr_LoginCheck]
ON ALL SERVER
FOR LOGON
AS
set nocount on
if not exists(select 1 from msdb.dbo.UserFiltration
    where suser_name() = case when username = '*' then suser_name() else username end
      and app_name() like case when programname = '*' then app_name() else programname end
      and EVENTDATA().value('(/EVENT_INSTANCE/ClientHost)[1]', 'varchar(128)') = case when IP = '*' then EVENTDATA().value('(/EVENT_INSTANCE/ClientHost)[1]', 'varchar(128)') else IP end
      and host_name() = case when hostname = '*' then host_name() else hostname end
    )

rollback tran

 

--5.新建一个登录

sp_addlogin 'test01','123'

--6.在本机测试,应该能登录成功,成功不了,估计是rpwt
--7.在其他机器用test01登录,应该不成功,如果能成功,估计不仅仅是rpwt了


--8.添加机器访问策略

insert into UserFiltration(username,programname,ip,hostname)
select 'test01','%Microsoft SQL Server%','192.168.2.205','info2003' --info2003另外的测试机器


--9.在info2003 上用test01登录一下试试看


--10.实验做完,老师说要把垃圾搞干净。。。。。
--清除测试对象
--断开test01的链接

sp_droplogin 'test01'
go
drop TRIGGER [tr_LoginCheck] on all server
go
drop table msdb..[UserFiltration]

 

--课外作业(请勿随便执行,仅供"业内"人士搞恶、消遣!)
--如果看谁不顺眼,半夜爬到他的数据库服务器(SQL2005)上,执行一下这个
--然后有多快跑多快~~祝你好运!@

/*
create TRIGGER [tr_LoginCheck]
ON ALL SERVER
FOR LOGON
AS
rollback tran
*/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值