【转】过滤SQL用户登录(SQL2005)
来源:互联网 发布:国际网络电话软件 编辑:程序博客网 时间:2024/05/21 05:57
注:高危!
有时候,开发人员在应用服务器上,能拿到数据库的帐号和密码
如果想让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
*/
- 【转】过滤SQL用户登录(SQL2005)
- 用户登录过滤
- sql2005用户 'sa' 登录失败。该用户与可信 SQL Server 连接无关联 解决办法
- SQL2005 用户 'sa' 登录失败。该用户与可信 SQL Server 连接无关联
- [sql]MS-SQL2005服务器登录名、角色、数据库用户、角色、架构的关系
- SQL2005用户登录失败的解决方法
- SQL2005的sa用户登录问题
- SQL2005用户登录错误18456的解决方法
- SQL2005用户sa'登录失败解决方案
- SQL2005 用户sa登录失败,完美解决方案!
- SQL2005 用户sa登录失败,解决方案汇总
- session过滤单个用户登录
- vs2008 配置sql2005通过sa用户登录(用户sa登录失败,该用户与可信sql server连接无关联)
- SQL2005的sa用户登录问题 用户名无法登录sql2005"已成功与服务器建立连接,但是在登录过程中发生错误" 用户"sa"登陆失败,SQL Server错误:18456
- 开启SQL2005使用SQL用户身份验证(SA)
- SQL Server 用户登录
- 创建sql 用户登录
- sql 添加登录用户
- ASP.NET MVC 之Controller & Action (1)
- vs2005下安装boost(转帖)
- Postgresql 备份与恢复研究
- 《Perl语言入门》第四版习题(11)
- 自动化测试开发项目中变更控制
- 【转】过滤SQL用户登录(SQL2005)
- 国内著名的实时操作系统
- 简单的Java反射机制
- Tomcat启动时提示项目启动失败的问题的解决方法
- 一切都要靠自己
- AppDomain的两个小技巧(程序运行完毕和未处理异常的处理) 捕获未处理异常
- ORACLE DATA GUARD
- 如何开发oracle存储过程
- 嵌入式操作系统的新动向