在其他的关系型数据库中,都有OS认证,所以我们并不担心忘记超级管理员密码的问题。 在达梦数据库中,因为安全的原因,默认并没有启用本地OS认证的方式,并且在忘记SYSDBA用户密码的情况,无法进行重置密码,只能选择重建实例,然后把业务数据迁移过来。
实际上,达梦是有一个隐含参数来控制是否启用OS认证登陆的:ENABLE_LOCAL_OSAUTH
。当然,在官方手册里查询不到该参数的信息。 在官方手册里只有一个类似的静态参数:ENABLE_REMOTE_OSAUTH
,默认0,表示不支持;1:表示支持,该参数设置仅安全版有效。
在忘记SYSDBA 用户密码的情况下,我们可以通过设置ENABLE_LOCAL_OSAUTH=1 来启用本地OS认证,然后直接修改SYSDBA的密码即可。
密码登陆问题:
[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
用户名:
这里的细节就是使用默认的情况下,不指定密码也能登陆,如果是非默认密码,则会报错。
查看达梦版本:
[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.
查看默认参数值:
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 参数,并重启达梦实例:
[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]#
查看参数已经生效:
[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/4314DM8 达梦数据库 查看数据库版本号 方法
https://www.cndba.cn/dave/article/4260
结果从官网下的22.7版本,按之前的方式,替换,并没有效果,虽然软件启动成功,但是版本并没有变化。 这里可能是以为我们升级的跨度比较大,所以升级失败了。 这里先不研究。
最终发现这里最关键的原因还是系统用户组的问题,本地认证是通过group名来判断的,我们的达梦用户是dmdba,创建一个同名的组,并将用户加入改组,本地认证就可以生效了。
[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>
版权声明:本文为博主原创文章,未经博主允许不得转载。