WEB开发网
开发学院数据库Sybase 如何限制sa登录Sybase ASE 阅读

如何限制sa登录Sybase ASE

 2010-06-10 15:12:05 来源:WEB开发网   
核心提示:解决思路如下:利用sybase ASE的特性提供的存储过程 sp_modifylogin,对登录的合法性进行验证,如何限制sa登录Sybase ASE,先新创建一个权限足够高的用户,将来当服务器有问题时,这样就杀掉了自己,不会影响服务,好用来恢复sa接下来将sa的login script绑定usemastergodro

解决思路如下:

利用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

Tags:如何 限制 sa

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接