首页 > 学技术 > 技术网文 > Sybase > 正文

[原创] sa被删除或锁住的处理方法


来源 chinaunix.net 酷勤网整理

看了两个帖子,以前也有,但是不会弄,看来现在水平提高了一点,嘻嘻
http://bbs.chinaunix.net/viewthread.php?tid=724589&extra=&page=1
不知兄弟搞好了吗?没有结果了
http://bbs.chinaunix.net/viewthread.php?tid=728310&extra=page%3D2
就写了下面的东东

sa被删除或锁住的处理方法
基础知识:
master库的syslogins和sysloginroles系统表
syslogins中记录login的信息,但是没有权限信息。几个主要的字段name,status(状态 2锁住,0正常),suid,此表sa_role的login可以操作
sysloginroles中记录login权限信息,suid对应login,srid对应权限(0 sa_role;1 sso_role 具体看syssrvroles表)此表只有具有sso_role的login可以操作,光有sa_role也不行
sa_role系统管理员具有数据库操作的特权,但一些只有sso_role可以完成(授权,添加login,改口令等)

先说说被锁住:
正常最后一个sso_role是无法锁住的,如果sa被锁,用ssa_role的login sp_locklogin sa,'unlock'即可。
非正常因为syslogins表sa_role的login就可以修改,只要update syslogins set status=2就锁住,解锁update syslogins set status=0
没有具有sa_role的login,那往下看吧,直接修改master文件吧

再说说sa被删除:(这里指的是从syslogins中删,即sysloginroles表中内容还有。sp_droplogin sa我没有成功)
1有sa_role和sso_role的login
没有什么问题,加上sa即可,sp_addlogin sa,passwd ,但是注意一定把syslogins中sa的suid改为1(新建不是1),这样才能和sysloginroles对应,要不没有权限。当然你手工授权也行。

2有sa_role但没有sso_role的login(sa自己删完自己不断连接也是这样,sso_role好象已经没了)
原来以为没有什么方法,因为sa_role无法创建用户和授权,突然想到可以操作syslogins,插入一个sa即可:insert syslogins values(1,0,'2004-01-01',0,0,0,0,0,'master','sa',null,null,null,null,null,null,null,null),主要这的sa密码插入的是null,插入什么最终sa密码你都不知道(也可能有值对应固定密码),sa的密码也无法改(没有sso_role),一个好办法就是重启sybase加-psa让系统告知,剩下不用我说了吧。

3只有普通权限的login
其实这才是我想主要说说的,原理如下,在sysloginrols表中还有sa的权限信息,select * from sysloginroles(ase12.5)
suid        srid        status
----------- ----------- ------
          1           0      1
          1           1      1
          1           2      1
          1           3      1
其中srid为0和1表明sa_role和sso_role,要做的就是把suid的13(sa)改为3(普通login的suid,假定login为testlogin)
dbcc page看看
Offset 32 - row ID=0 row length=12 # varlen cols=0
21571020 (     0):  00000100 01000000 00000000
Row-Offset table for variable-length columns:

Offset 44 - row ID=1 row length=12 # varlen cols=0
2157102C (     0):  00010100 01000000 01000000
前面是状态,中间是suid,后面srid.
如果是windows下sybase12.5
直接打开master文件,查找00000100 01000000 00000000 00010100 01000000 01000000
如果你的login的id是3
直接改为00000100 0c000000 00000000 00010100 0c000000 01000000
重启sybase,你的这个login就具有sa_role和ssa_role,然后再处理sa
如果找不到“00000100 01000000 00000000 00010100 01000000 01000000”,分开找,应该就在附近。

4如果没有login或sysloginroles记录也没有
目前我还没有办法,那位弟兄知道,告知一声。但是一般ase都有mon_user这个login可用,probe这个login都有但好象不能登录,给sybsystemdb的,有知道到底干什么用的贴一下,懒得问sybase了

这问题应该不会经常遇到,遇到不改master好象还没什么好办法(如果没有master的备份),做重要操作一定加事务,检查对了再提交,写的较仓促,一些试验也未必全面,不对的地方请拍砖。ase12.0的sysloginroles的结构好象有点不同,没有仔细试,应该也是可以的,unix下改法看我以前的贴,应该也可以。



 2BeSybPro 回复于:2006-04-08 00:21:25

Thanks, man, good practices!


 小无赖 回复于:2006-04-09 14:55:22

lz现在修改master设备现在是得心应手了啊.


 echoaix 回复于:2006-04-10 11:14:30

楼上的过奖了


 Rabbit... 回复于:2006-04-10 17:57:56

佩服!
BTW, 
如果是在UNIX 下,是不是改红色的部分就可以了阿? 
dbcc page看看
Offset 32 - row ID=0 row length=12 # varlen cols=0
21571020 (     0):  00000100 01000000 [color=Red]00000000[/color]
Row-Offset table for variable-length columns:

Offset 44 - row ID=1 row length=12 # varlen cols=0
2157102C (     0):  00010100 01000000 [color=Red]01000000[/color]

用od可以改嘛?还是要用其它什么专门的工具?


 echoaix 回复于:2006-04-11 11:27:25

红的是srid的值,应该改中间suid的值,上面文章说的很清楚,
unix下,应该看我以前的帖子:直接修改master设备改变master数据库状态(win和UNIX)
http://bbs.chinaunix.net/viewthread.php?tid=721224&fpage=1&highlight=


 chenfeng825 回复于:2006-04-13 15:31:57

文章是好,对于系统标的理解都好!
但希望用的人少!呵呵


 Eisen 回复于:2006-04-13 15:51:41

lz真是bin edit master的高手。佩服啊


 hobbylu 回复于:2006-04-13 16:42:42

大天使都出现了!!!


 zhaocz 回复于:2006-04-21 09:16:39

强人,应该先加精,对于后人很有用的!




原文链接:http://bbs.chinaunix.net/viewthread.php?tid=733363
转载请注明作者名及原文出处



收藏本页到: