新人のHさんへ。1年目が終わりかけているのにDBにログインが出来なくてっていうのはちょっとね。
免責
土日に勢いで書いてるから間違ってるかも。雰囲気だけでもつかんで。
①事前準備。
# id tanaka
# useradd -G dba,asmdba,backupdba,dgdba,kmdba,racdba,oper tanaka
# id tanaka
# passwd tanaka
# su - oracle
$ sqlplus /nolog
SQL> conn / as sysdba
SQL> create user tanaka identified by tanaka;
SQL> grant connect to tanaka;
SQL> conn tanaka/tanaka
SQL show user
SQL> exit
$ su - tanaka
$ vi .bash_profile # 修正内容は↓を確認。
$ cat .bash_profile
[root@localhost ~]# id tanaka
id: tanaka: no such user
[root@localhost ~]# useradd -G dba,asmdba,backupdba,dgdba,kmdba,racdba,oper tanaka
[root@localhost ~]# id tanaka
uid=9003(tanaka) gid=9004(tanaka) groups=9004(tanaka),2002(dba),2003(asmdba),2004(backupdba),2005(dgdba),2006(kmdba),2007(racdba),2008(oper)
[root@localhost ~]# passwd tanaka
ユーザー tanaka のパスワードを変更。
新しいパスワード:
よくないパスワード: このパスワードは 8 未満の文字列です。
新しいパスワードを再入力してください:
passwd: すべての認証トークンが正しく更新できました。
[root@localhost ~]#
[root@localhost ~]# su - oracle
最終ログイン: 2023/03/19 (日) 16:00:57 JST gatewayから開始日時 pts/1
[oracle@localhost ~]$ sqlplus /nolog
SQL*Plus: Release 19.0.0.0.0 - Production on 日 3月 19 16:43:05 2023
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
SQL> conn / as sysdba
接続されました。
SQL> create user tanaka identified by tanaka;
ユーザーが作成されました。
SQL> grant connect to tanaka;
権限付与が成功しました。
SQL> conn tanaka/tanaka
接続されました。
SQL> show user
ユーザーは"TANAKA"です。
SQL> exit
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0との接続が切断されました。
[oracle@localhost ~]$ su - tanaka
パスワード:
最終ログイン: 2023/03/19 (日) 16:46:52 JST日時 pts/0
[tanaka@localhost ~]$ vi .bash_profile
[tanaka@localhost ~]$ cat .bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/.local/bin:$HOME/bin
export PATH
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=${ORACLE_BASE}/product/19.3.0/dbhome_1
export ORACLE_SID=orcl
export PATH=$ORACLE_HOME/bin:$PATH
export LANG=ja_JP.UTF-8
export NLS_LANG=Japanese_Japan.AL32UTF8
export LD_PATH_LIBRARY=${LD_PATH_LIBRARY}:${ORACLE_HOME}/lib
umask 022
[tanaka@localhost ~]$
②コマンドの基本書式
基本書式(sqlplusから直接DBへ接続する場合)
$ sqlplus <ユーザ名>/<パスワード>@<Oracle Net接続識別子> (as sysdbaとか as sysoperとか)
基本書式(sqlplusでSQLコンソールに入り、connectでDBへ接続する場合)
$ sqlplus /nolog
SQL> CONNECT <ユーザ名>/<パスワード>@<Oracle Net接続識別子> (as sysdbaとか as sysoperとか)
※CONNECTはCONNに省略可能
※sysでログインする際はas sysdbaの指定が必要(systemはいらない)
※OS認証とパスワード認証がある(③を参照)
※sqlplusにはSQLコンソールに入るが、DBに接続しない/nologオプションがある。(psやhistoryコマンドでパスワードが漏洩しないなどのメリット。最近のOracleではそもそも表示されなくなっているかもしれない)
※Oracle Databaseには外部クライアントから接続するときのために、受け口となるリスナープロセスがある。
このリスナープロセス経由で接続することも可能。(ローカルからOracle Net接続識別子を指定することも可能)
※パスワード認証でパスワードを指定しないと、直後にパスワード入力を促すプロンプトが表示される。
③OS認証とパスワード認証の2種類がある。
OS認証
OSが認証したユーザにてログインする(Oracleの認証が不要となる)OUIをやったときに、事前に作成したOSグループ(dba,oper等)とOSDBAとかOSOPER等をマッピングさせたけど、あれ。
マッピングしたOSグループに所属しているOSユーザは「<ユーザ名>/<パスワード>」ではなく、「/」でログインできる。
逆に言うと、所属させていないグループ(権限)ではログインできない。今回は試していないけど。
例:tanakaユーザをoperに所属させない場合、sysoperでログインできない。
パスワード認証
Oracleの認証にてログインする。create userするときに指定した名前とパスワードを使うやつ。
【OS認証】
$ sqlplus /nolog
SQL> conn / as sysdba
SQL show user
SQL> conn / as sysbackup
SQL show user
SQL> conn / as syskm
SQL> show user
[tanaka@localhost ~]$ sqlplus /nolog
SQL*Plus: Release 19.0.0.0.0 - Production on 日 3月 19 16:56:17 2023
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
SQL> conn / as sysdba
接続されました。
SQL> show user
ユーザーは"SYS"です。
SQL> conn / as sysbackup
接続されました。
SQL> show user
ユーザーは"SYSBACKUP"です。
SQL> conn / as syskm
接続されました。
SQL> show user
ユーザーは"SYSKM"です。
SQL>
【パスワード認証】
$ sqlplus /nolog
SQL> conn tanaka/tanaka
SQL> show user
[tanaka@localhost ~]$ sqlplus /nolog
SQL*Plus: Release 19.0.0.0.0 - Production on 日 3月 19 17:00:28 2023
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
SQL> conn tanaka/tanaka
接続されました。
SQL> show user
ユーザーは"TANAKA"です。
SQL>
④リスナー経由での接続
外部のクライアントから接続する際には受け口が必要。それがリスナープロセス。
外部から繋ぐため、IPアドレスとかポート番号とかが必要。
例えば以下。
sqlplus username/password@hostname:port/service_name
[tanaka@localhost ~]$ sqlplus tanaka/tanaka@localhost:1521/orcl
SQL*Plus: Release 19.0.0.0.0 - Production on 日 3月 19 17:07:40 2023
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
最終正常ログイン時間: 日 3月 19 2023 17:00:38 +09:00
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
に接続されました。
SQL>
※外部からとか言ったけど、↑みたいに別にローカルからリスナーを経由することも可能。
また、↑は簡易接続と呼ばれるやつで、IPアドレスとかポート番号を設定ファイルにまとめておくことも可能。
それがtnsnames.ora。
$ cd /u01/app/oracle/product/19.3.0/dbhome_1/network/admin/
$ cat tnsnames.ora | grep -A 8 "^ORCL ="
$ sqlplus tanaka/tanaka@orcl
[oracle@localhost ~]$ cd /u01/app/oracle/product/19.3.0/dbhome_1/network/admin/
[oracle@localhost admin]$
[oracle@localhost admin]$ cat tnsnames.ora | grep -A 8 "^ORCL ="
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
[oracle@localhost admin]$ sqlplus tanaka/tanaka@orcl
SQL*Plus: Release 19.0.0.0.0 - Production on 日 3月 19 17:10:50 2023
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
最終正常ログイン時間: 日 3月 19 2023 17:07:40 +09:00
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
に接続されました。
SQL>