Chinaunix首页 | 论坛 | 博客
  • 博客访问: 599243
  • 博文数量: 152
  • 博客积分: 2684
  • 博客等级: 少校
  • 技术积分: 1126
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-29 11:03
文章分类
文章存档

2012年(6)

2011年(96)

2010年(50)

分类: Sybase

2011-10-12 10:53:11

本文由echoaix在论坛所发,CU技术文章整理,供大家参考学习,转载请注明出处,谢谢。
 
看了两个帖子,以前也有,但是不会弄,看来现在水平提高了一点,嘻嘻

不知兄弟搞好了吗?没有结果了
%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下改法看我以前的贴,应该也可以。

阅读(1463) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~