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,改口令等)
sa被删除或锁住的处理解决方法
先说说被锁住:
正常最后一个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下改法看我以前的贴,应该也可以。