【转】过滤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','
相关文档:
这两天都没有好好学习,今天终于算投入了些,由于课程的关系,我的sql也是同vb一起学习的。虽然知道贪多嚼不烂,可是按照实际情况,我完全没有理由抛弃sql的。
最近都把时间投入到vb和面向对象中,sql今天好好复习了下,从create database 开始,create table,alter table , add constraint …&h ......
在公共新闻组中,一个经常出现的问题是“怎样才能根据传递给存储过程的参数返回一个排序的输出?”。在一些高水平专家的帮助之下,我整理出了这个问题的几种解决方案。
一、用IF...ELSE执行预先编写好的查询
对于大多数人来说,首先想到的做法也许是:通过IF...ELSE语句,执行几个预先编写好的查询中的一 ......
清空共享池,关闭,重启数据库
SQL> shutdown immediate;
SQL> startup;
开启 时间统计
SQL> set timi on
SQL> select count(*) from dba_objects;
COUNT(*)
----------
11308
Elapsed: 00:00:00.19
SQL> /
COUNT(*)
----------
&nb ......
在网上看到关于归并算法,没有数据库级的,当然数据级的算法对于数据库来说就是一个排序。今天写一个pl/sql的归并算法。
归并的算法很容易理解,网上很详细,现只把源码贴出来。
(包声明部分)
CREATE OR REPLACE PACKAGE PG_MERGESORT IS
-- Author : wealth_khb@126.com
-- Created : 2009-10- ......