Oracle Database上にユーザを作成する方法と、作成したユーザを確認する方法を紹介します。
PDBでユーザを作成する方法を記載しますので、CDBのみのデータベースではPDBでの手順は読み飛ばしてください。
対象のPDBへ接続
CDBへログイン
SYSDBA権限でCDBへログインします。
[oracle@ol77 ~]$ sqlplus / as sysdba
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT
PDBの確認
show pdbs コマンドで、PDB一覧を確認します。
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 HOGEPDB MOUNTED
ユーザを作成するPDBへ接続
ユーザを作成する対象のPDBへ接続します。
SQL> alter session set container = HOGEPDB;
セッションが変更されました。
SQL> show con_name
CON_NAME
------------------------------
HOGEPDB
a
PDBがオープンされていなければオープン
PDBがオープンされていなければ startup open コマンドでオープンしてあげます。
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
3 HOGEPDB MOUNTED NO
SQL> startup open;
プラガブル・データベースがオープンされました。
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
3 HOGEPDB READ WRITE NO
ユーザの作成と権限付与
ユーザの作成
以下のSQLでユーザを作成します。
CREATE USER <作成するユーザ名> IDENTIFIED BY “<パスワード>”;
SQL> CREATE USER dekiruengineer IDENTIFIED BY "dekien";
ユーザーが作成されました。
必要な権限を付与
ユーザを作成しただけでは接続すら出来ないので、ユーザに対して権限を付与します。
以下の例では、CONNECT権限とRESOURCE権限を付与しています。
SQL> GRANT CONNECT TO dekiruengineer;
権限付与が成功しました。
SQL> GRANT RESOURCE TO dekiruengineer;
権限付与が成功しました。
作成したユーザーで接続テスト
CDB(もしくは11g)であれば、以下のconnectコマンドで接続可能ですが、PDBの場合はOracle Netでの接続となるので、ORA-01017が発生します。
SQL> connect dekiruengineer/dekien
ERROR:
ORA-01017: invalid username/password; logon denied
警告: Oracleにはもう接続されていません。
Oracle Netの設定
PDBの場合はローカル接続が出来ないため、tnsnames.oraに接続定義を記述してOracle Net経由でDatabaseに接続します。
tnsnames.oraの作成
[oracle@ol77 ~]$ vi $ORACLE_HOME/network/admin/tnsnames.ora
※以下のエントリを追加します。
----------------------------------------------------------
HOGEPDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = ol77)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = hogepdb)
)
)
----------------------------------------------------------
SQL*Plusで接続
先程作成したtnsnames.oraの接続識別子を@で指定して接続します。
[oracle@ol77 ~]$ sqlplus dekiruengineer@HOGEPDB
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
に接続されました。
SQL>
以下のORAエラーが出力された場合、リスナーを起動してください。lsnrctlコマンドでリスナーを制御します。
ORA-12541: TNS: リスナーがありません
[oracle@ol77 ~]$ lsnrctl start
LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 19-6月 -2020 12:11:08
Copyright (c) 1991, 2019, Oracle. All rights reserved.
/u01/app/oracle/product/19.0.3/dbhome_1/bin/tnslsnrを起動しています。お待ちください...
TNSLSNR for Linux: Version 19.0.0.0.0 - Production
システム・パラメータ・ファイルは/u01/app/oracle/product/19.0.3/dbhome_1/network/admin/listener.oraです。
ログ・メッセージを/u01/app/oracle/diag/tnslsnr/ol77/listener/alert/log.xmlに書き込みました。
リスニングしています: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ol77)(PORT=1521)))
リスニングしています: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=ol77)(PORT=1521)))に接続中
リスナーのステータス
------------------------
別名 LISTENER
バージョン TNSLSNR for Linux: Version 19.0.0.0.0 - Production
開始日 20-6月 -2020 12:11:10
稼働時間 23 日 5 時間 7 分 11 秒
トレース・レベル off
セキュリティ ON: Local OS Authentication
SNMP OFF
パラメータ・ファイル /u01/app/oracle/product/19.0.3/dbhome_1/network/admin/listener.ora
ログ・ファイル /u01/app/oracle/diag/tnslsnr/ol77/listener/alert/log.xml
リスニング・エンドポイントのサマリー...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ol77)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
リスナーはサービスをサポートしていません。
コマンドは正常に終了しました。
tnsnames.oraに指定するSERVICE_NAMEが不明な場合は、リスナーのステータスを確認するとサービスがわかります。
[oracle@ol77 ~]$ lsnrctl status
LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 03-7月 -2020 21:13:22
Copyright (c) 1991, 2019, Oracle. All rights reserved.
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=ol77)(PORT=1521)))に接続中
リスナーのステータス
------------------------
別名 LISTENER
バージョン TNSLSNR for Linux: Version 19.0.0.0.0 - Production
開始日 20-6月 -2020 12:11:15
稼働時間 23 日 5 時間 7 分 16 秒
トレース・レベル off
セキュリティ ON: Local OS Authentication
SNMP OFF
パラメータ・ファイル /u01/app/oracle/product/19.0.3/dbhome_1/network/admin/listener.ora
ログ・ファイル /u01/app/oracle/diag/tnslsnr/ol77/listener/alert/log.xml
リスニング・エンドポイントのサマリー...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ol77)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=ol77)(PORT=5500))(Security=(my_wallet_directory=/u01/app/oracle/admin/hoge/xdb_wallet))(Presentation=HTTP)(Session=RAW))
サービスのサマリー...
サービス"hoegepdb"には、1件のインスタンスがあります。
インスタンス"hoge"、状態READYには、このサービスに対する1件のハンドラがあります...
サービス"hoge"には、1件のインスタンスがあります。
インスタンス"hoge"、状態READYには、このサービスに対する1件のハンドラがあります...
サービス"hogeXDB"には、1件のインスタンスがあります。
インスタンス"hoge"、状態READYには、このサービスに対する1件のハンドラがあります...
コマンドは正常に終了しました。
コメント
[…] https://dekiruengineer.com/engineer/create_users_in_the_oracle_database/ […]