如何限制sa登录Sybase ASE
2010-06-10 15:12:05 来源:WEB开发网解决思路如下:
利用sybase ASE的特性提供的存储过程 sp_modifylogin,对登录的合法性进行验证。
先新创建一个权限足够高的用户,将来当服务器有问题时,好用来恢复sa
接下来将sa的login script绑定
usemaster
go
dropproceduresp_bindlogin
go
存储过程名字弄个像系统的一样
createproceduresp_bindlogin
as
begin
declare@hostnamevarchar(100)
declare@program_namevarchar(100)
declare@ipaddrvarchar(100)
declare@newdatetime
select@hostname=hostname,
@program_name=program_name,
@ipaddr=ipaddr
frommaster..sysprocesses
wherespid=@@spid
登录机器限定
if@hostname!=’机器名’
begin
shutdownwithnowait
end
登录机器IP限定
if@ipaddr!=’机器IP’
begin
shutdownwithnowait
end
登录应用程序限定
if@program_namein(’SQL_Advantage’,’isql’)
begin
shutdownwithnowait
end
select@new=getdate()
登录时间限定
if@new>=’20080808’
begin
shutdownwithnowait
end
end
go
sp_hidetextsp_bindlogin
go
sp_modifyloginsa,’loginscript’,sp_bindlogin
go
经过以上处理,sa只能在本机,并且不能使用 isql 、sqladv ,在 20080808 之前 登录数据库。
这里的逻辑是可以自由编写的。
这里的合法性验证不通过的处理方法是 shutdown 。
可以把 shutdown 换成以下存储过程。这样就杀掉了自己。不会影响服务,只是需要做一些额外的配置。
dropproceduresp_killme
go
createproceduresp_killme
as
begin
declare@cmdvarchar(100)
select@cmd=’kill’+convert(varchar(20),@@spid)
execsp_remotesql’local’,@cmd
end
go
sp_hidetextsp_killme
go
更多精彩
赞助商链接