在实际过程中经常有人会问起万一忘记了SYSDBA密码怎么办。也有人在网络上吐槽,达梦数据库忘了SYSDBA密码就只能重装。
其实这个问题说起来有几个应用场景。
- 我们数据库里的数据不重要,我只是用来学习和测试。
- 我们数据库里的数据重要,无论如何我都不想丢失。
- 我们数据库里的数据重要还涉密,如果被人入侵我宁愿数据销毁也不能备别人拿到。
针对这几种情况达梦数据库有个本地验证参数:ENABLE_LOCAL_OSAUTH
就是是否允许本地认证。这个参数不在dm.ini中。默认为0不允许
只有具有DBA角色的用户才有权限调用SP_SET _PARA_VALUE所以如果当你忘了DBA权限用户密码才去修改这个参数就晚了。
所以我们在数据库安装完成后就要考虑到DBA权限丢失这种情况。如果数据不重要或者数据涉密,即使拿到底层操作系统权限也不能登录数据库那么就保持默认参数。如果我们在丢失DBA密码后认可掌握底层操作系统权限可以登录数据库。那么请首先修改参数:ENABLE_LOCAL_OSAUTH
试图修改静态配置参数时服务器会返回错误信息。
所以我们要使用下面命令。数据库重启后才能生效。
SP_SET_PARA_VALUE(2,'ENABLE_LOCAL_OSAUTH',1);
我们重启数据库后查询这个参数已经生效。
在操作系统中加入dmdba|dmsso|dmauditor 用户组,分别对应数据库的 SYSDBA|SYSSSO|SYSAUDITOR。我们忘记的SYSDBA
就创建dmdba。
groupadd dmdba
把dmdba 这个用户加入这个组
usermod -a -G dmdba dmdba
切换到dmdba用户
Su - dmdba
登录数据库
disql /@localhost:5238 as sysdba
直接修改sysdba密码
alter user sysdba identified by "SYSDBA123";
我们验证下
disql sysdba/SYSDBA123@localhost:5238