刚接触达梦数据库,SYSDBA用户的密码和其它数据库有所不同,因为如果忘记它并且数据库里再无其它拥有DBA角色的用户,那就真的要凉凉了。
如果达梦数据库部署在类似于LINUX的操作系统上,密码、端口都是走默认的,这时在本机上登录环境非常简单,只需敲DISQL再来两次回车即可登录:
[dmdba@localhost GBK]$ disql
disql V8
用户名:
密码:
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 8.239(ms)
如果SYSDBA的密码有做过更改,又忘记了密码。此时登录肯定是会失败的,并抛出[-2501]:用户名或密码错误。
dmdba@localhost GBK]$ disql
disql V8
用户名:
密码:
[-2501]:用户名或密码错误.
这时如果数据库里有用户拥有DBA角色,并且可以正常登录。我们可以用这个用户更改SYSDBA密码。
[dmdba@localhost bak]$ disql test1/test_0001
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 5.329(ms)
disql V8
SQL>
SQL> alter user SYSDBA identified by SYSDBA_2022;
操作已执行
已用时间: 7.871(毫秒). 执行号:600.
SQL>
SQL> exit
[dmdba@localhost bak]$ disql
disql V8
用户名:SYSDBA
密码:
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 4.751(ms)
SQL>
达梦数据库也留有一个参数来解决这个问题,本地验证参数:ENABLE_LOCAL_OSAUTH。
这个参数的默认值为0,不容许本地验证。并且该参数还有另外两个特点:1、只有拥有DBA权限的用户才可以更改。2、该参数只有更改、重启后才能生效。那么这就陷入了一个死循环,除非在安装数据库的时候就将这个参数值设为1,为以后忘记密码做准备。
查看参数ENABLE_LOCAL_OSAUTH
SQL> select para_name,para_value,para_type from v$dm_ini where para_name='ENABLE_LOCAL_OSAUTH';
行号 PARA_NAME PARA_VALUE PARA_TYPE
---------- ------------------- ---------- ---------
1 ENABLE_LOCAL_OSAUTH 0 READ ONLY
尝试用普通用户修改
sp_set_para_value(2,'ENABLE_LOCAL_OSAUTH',1);
总共1个语句正依次执行...
[执行语句1]:
sp_set_para_value(2,'ENABLE_LOCAL_OSAUTH',1);
执行失败(语句1)
-5565: 没有修改INI配置参数的权限
1条语句执行失败
用拥有DBA角色的用户更改
sp_set_para_value(2,'ENABLE_LOCAL_OSAUTH',1);
总共1个语句正依次执行...
[执行语句1]:
sp_set_para_value(2,'ENABLE_LOCAL_OSAUTH',1);
执行成功, 执行耗时1毫秒. 执行号:701
影响了0条记录
1条语句执行成功
重启数据库使其生效
我们继续尝试用SYSDBA本地登录,依旧有问题
[dmdba@localhost ~]$ disql /@localhost as sysdba
[-2512]:未经授权的用户.
disql V8
我们还需要做如下操作:
groupadd dmdba
usermod -a -G dmdba dmdba
再切换到dmdba用户,尝试登录:
[dmdba@localhost ~]$ disql /@localhost as sysdba
服务器[localhost:5236]:处于普通打开状态
登录使用时间 : 26.157(ms)
disql V8
SQL>
现在我们就可以更改SYSDBA的密码了。
总结:
我们强烈建议妥善保管重要用户的密码,出于安全考虑,并不建议在安装数据库时将ENABLE_LOCAL_OSAUTH参数的值调整为1.
社区地址:https://eco.dameng.com