刚接触达梦数据库,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