签到成功

知道了

CNDBA社区CNDBA社区

DM 达梦数据库 忘记 SYSDBA 密码 解决方法

2022-08-04 22:23 17036 1 原创 DM 达梦
作者: dave

1 背景说明

在其他的关系型数据库中,都有OS认证,所以我们并不担心忘记超级管理员密码的问题。 在达梦数据库中,因为安全的原因,默认并没有启用本地OS认证的方式,并且在忘记SYSDBA用户密码的情况,无法进行重置密码,只能选择重建实例,然后把业务数据迁移过来。

实际上,达梦是有一个隐含参数来控制是否启用OS认证登陆的:ENABLE_LOCAL_OSAUTH。当然,在官方手册里查询不到该参数的信息。 在官方手册里只有一个类似的静态参数:ENABLE_REMOTE_OSAUTH,默认0,表示不支持;1:表示支持,该参数设置仅安全版有效。

在忘记SYSDBA 用户密码的情况下,我们可以通过设置ENABLE_LOCAL_OSAUTH=1 来启用本地OS认证,然后直接修改SYSDBA的密码即可。

http://www.cndba.cn/dave/article/108578

2 操作示例

密码登陆问题:

[dave@www.cndba.cn  cndba]$ disql / as sysdba
[-2512]:未经授权的用户.
disql V8
用户名:^C
[dave@www.cndba.cn  cndba]$ disql SYSDBA@127.0.0.1:5236

服务器[127.0.0.1:5236]:处于普通打开状态
登录使用时间 : 2.050(ms)
disql V8
SQL>
SQL> alter user SYSDBA identified by "www.cndba.cn";
操作已执行
已用时间: 21.532(毫秒). 执行号:4.
SQL> exit
[dave@www.cndba.cn  cndba]$ disql SYSDBA@127.0.0.1:5236
[-2501]:用户名或密码错误.
disql V8
用户名:

这里的细节就是使用默认的情况下,不指定密码也能登陆,如果是非默认密码,则会报错。http://www.cndba.cn/dave/article/108578

查看达梦版本:http://www.cndba.cn/dave/article/108578

http://www.cndba.cn/dave/article/108578
http://www.cndba.cn/dave/article/108578

[dave@www.cndba.cn  cndba]$ disql SYSDBA/SYSDBA@127.0.0.1:6236

服务器[127.0.0.1:6236]:处于普通打开状态
登录使用时间 : 14.349(ms)
disql V8
SQL>  select * from v$version;

行号     BANNER
---------- -------------------------
1          DM Database Server 64 V8
2          DB Version: 0x7000b

已用时间: 11.228(毫秒). 执行号:204.

查看默认参数值:

http://www.cndba.cn/dave/article/108578
http://www.cndba.cn/dave/article/108578

SQL> select para_name,para_type,para_value from v$dm_ini where para_name like '%OSAUTH';

行号     PARA_NAME            PARA_TYPE PARA_VALUE
---------- -------------------- --------- ----------
1          ENABLE_REMOTE_OSAUTH IN FILE   0
2          ENABLE_LOCAL_OSAUTH  READ ONLY 0

已用时间: 13.079(毫秒). 执行号:205.
SQL>

达梦参数的4种设置级别如下:

SESSION: 会话级, 动态参数, 即改即生效, 只针对当前会话有效。
SYS: 系统级, 动态参数, 即改即生效, 全局的参数。
IN FILE: 静态参数, 需要重启数据库实例生效。
READ ONLY: 只读参数, 需要通过文本编辑器(vi/vim) 修改。

ENABLE_LOCAL_OSAUTH参数是只读的,所以无法使用如下命令修改:
SQL> sp_set_para_value(2,'ENABLE_LOCAL_OSAUTH',1);

直接修改dm.ini 参数,并重启达梦实例:

http://www.cndba.cn/dave/article/108578

[dave@www.cndba.cn  cndba]$ cat dm.ini|grep LOCAL
                ENABLE_LOCAL_OSAUTH             = 0                     #Whether to enable local authorization by operating system users
                DCRS_IP                         = LOCALHOST               #IP on which the dcrs server will listen
                AP_IP                           = LOCALHOST               #The ap server IP for dcrs
[dave@www.cndba.cn  cndba]$ vim dm.ini
[dave@www.cndba.cn  cndba]$ cat dm.ini|grep LOCAL
                ENABLE_LOCAL_OSAUTH             = 1                     #Whether to enable local authorization by operating system users
                DCRS_IP                         = LOCALHOST               #IP on which the dcrs server will listen
                AP_IP                           = LOCALHOST               #The ap server IP for dcrs
[dave@www.cndba.cn  cndba]$


[root@www.cndba.cn  bin]# /dm/dmdbms/bin/DmServicecndba start
Starting DmServicecndba:                                   [ OK ]
[root@www.cndba.cn  bin]#

查看参数已经生效:http://www.cndba.cn/dave/article/108578

[dave@www.cndba.cn  log]$ disql SYSDBA/SYSDBA@127.0.0.1:6236

服务器[127.0.0.1:6236]:处于普通打开状态
登录使用时间 : 2.282(ms)
disql V8
SQL> select para_name,para_type,para_value from v$dm_ini where para_name like '%OSAUTH';

行号     PARA_NAME            PARA_TYPE PARA_VALUE
---------- -------------------- --------- ----------
1          ENABLE_REMOTE_OSAUTH IN FILE   0
2          ENABLE_LOCAL_OSAUTH  READ ONLY 1

已用时间: 12.559(毫秒). 执行号:4.
SQL>

验证OS认证:

[dave@www.cndba.cn  log]$ disql  SYSDBA@127.0.0.1:6236

服务器[127.0.0.1:6236]:处于普通打开状态
登录使用时间 : 1.907(ms)
disql V8
SQL>

修改密码:
SQL> select user;

行号     USER()
---------- ------
1          SYSDBA

已用时间: 1.749(毫秒). 执行号:104.

SQL> alter user SYSDBA identified by "www.cndba.cn";
操作已执行
已用时间: 18.161(毫秒). 执行号:105.
SQL>

[dave@www.cndba.cn  log]$ disql SYSDBA/"www.cndba.cn"@127.0.0.1:6236

服务器[127.0.0.1:6236]:处于普通打开状态
登录使用时间 : 2.405(ms)
disql V8
SQL>

但是OS 登陆失败,正常这里会提示用户名和密码错误,只需要一直回车即可,但是这里并没有连上:

[dave@www.cndba.cn  cndba]$ disql / as sysdba
[-2512]:未经授权的用户.
disql V8
用户名:
密码:
[-2501]:用户名或密码错误.
用户名:
密码:
[-2501]:用户名或密码错误.
在 3 次尝试之后无法连接到服务器, 退出 DISQL
[dave@www.cndba.cn  cndba]$

因为之前版本比较旧,所以打算升级下版本:

SQL> select id_code;

行号     ID_CODE
---------- ----------------------------
1          1-1-126-20.09.04-126608-ENT

已用时间: 3.079(毫秒). 执行号:104.
SQL>

DM 达梦数据库 8.1.1.48 升级到 8.1.1.126 操作步骤
https://www.cndba.cn/dave/article/4314

DM8 达梦数据库 查看数据库版本号 方法
https://www.cndba.cn/dave/article/4260

结果从官网下的22.7版本,按之前的方式,替换,并没有效果,虽然软件启动成功,但是版本并没有变化。 这里可能是以为我们升级的跨度比较大,所以升级失败了。 这里先不研究。

最终发现这里最关键的原因还是系统用户组的问题,本地认证是通过group名来判断的,我们的达梦用户是dmdba,创建一个同名的组,并将用户加入改组,本地认证就可以生效了。 http://www.cndba.cn/dave/article/108578

[root@www.cndba.cn  ~]# id  dmdba
uid=1001(dmdba) gid=1002(dinstall) 组=1002(dinstall)
[root@www.cndba.cn  ~]# usermod -G dmdba dmdba
usermod:“dmdba”组不存在
[root@www.cndba.cn  ~]# groupadd dmdba
[root@www.cndba.cn  ~]# usermod -G dmdba dmdba
[root@www.cndba.cn  ~]# id dmdba
uid=1001(dmdba) gid=1002(dinstall) 组=1002(dinstall),1003(dmdba)
[root@www.cndba.cn  ~]#


[dmdba@www.cndba.cn  ~]$  disql / as sysdba

服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 6.309(ms)
disql V8
SQL>
SQL> exit
[dmdba@www.cndba.cn  ~]$ disql SYSDBA/"www.cndba.cn"@127.0.0.1:5236

服务器[127.0.0.1:5236]:处于普通打开状态
登录使用时间 : 3.086(ms)
disql V8
SQL> 
[dmdba@www.cndba.cn  ~]$ disql  /@127.0.0.1:5236  as sysdba

服务器[127.0.0.1:5236]:处于普通打开状态
登录使用时间 : 3.529(ms)
disql V8
SQL>

版权声明:本文为博主原创文章,未经博主允许不得转载。

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
dave

dave

关注

人的一生应该是这样度过的:当他回首往事的时候,他不会因为虚度年华而悔恨,也不会因为碌碌无为而羞耻;这样,在临死的时候,他就能够说:“我的整个生命和全部精力,都已经献给世界上最壮丽的事业....."

  • 2261
    原创
  • 3
    翻译
  • 578
    转载
  • 191
    评论
  • 访问:7965917次
  • 积分:4346
  • 等级:核心会员
  • 排名:第1名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ