Oracle SQL Developer から OS 認証で SYSDBA 接続する
SQL Developer については、こちらの記事で Oracle Instant Client を使った環境の導入方法をご紹介しました。その環境を使って、OS認証で SYSDBA 接続(sqlplus で言うところの as sysdba)してみます。
尚、OS は Windows10 で、Oracle 19c を利用しています。
SYSDBA 権限
Oracle では ロール等を用いた一般ユーザに対する権限管理とは別に、管理者用の特別な権限があります。それはシステム権限と呼ばれ SYSDBA 権限もそのひとつです。SYSDBA 以外にも、SYSPOER等いくつかあります。詳細は「データベース管理者ガイド 1.6.1 管理権限」 にありますが、これらはシステム固定になります。少し考えればわかることですが、ユーザを作成したり、そのユーザに grant 文で権限を与えたりするのが管理者なので、その管理者ユーザそのものや権限はどうしてもシステム固定になってきます。
つまり「システム権限」というものはデータベースで管理されていない(ロール等で定義されていない)特殊な権限ということになります。
では DBA ロールとは何が違うんだという疑問が沸く方もいらっしゃると思いますが、DBA ロールはあくまでもロールです。権限を追加したり、削除したりできるロールのひとつに過ぎません。ただデフォルトで存在する一番強い権限を持つロールということです。ちなみにDBA権限ではデータベースを停止したりできません。そういう意味では最強の権限ってわけでもないのです。
尚、SYSDBA 権限を持つ唯一のユーザは SYS になります。パスワードはインストール時に設定しますね。sqlplus で SYSDBA 権限で接続する場合は以下のように接続します。
sqlplus sys/*******@orcl as sysdba

では、SYSDBA権限で接続するためには、SYS ユーザでログインするしかないかというとそういうわけではなく、所定の認証方式であれば可能です。
・オペレーティング・システム(OS)認証
データベース管理者ガイド 1.6.3.1 データベース管理者の認証方法について
・パスワード・ファイル(KerberosおよびSSL認証サービスを含む)
・Oracle Internet Directoryなどのディレクトリ・ベースの認証サービスによる強力な認証
今回はこの中の「オペレーティング・システム(OS)認証」で接続してみます。
Windowsユーザの登録
OS認証ですから、まずはOSであるWindowsにユーザ登録します。視覚的にわかりやすいように GUI でやってみます。ドメイン参加しているのであれば、ドメインユーザでも問題ありません。

次にそのユーザを「ORA_DBA」グループに所属させます。ORA_DBA グループは、Oracle インストール時に自動で作成されており、この設定がまさにユーザに対して「SYSDBA 権限を与える」という行為となります。

この組み込みのグループには色々と種類があります。詳細は「管理者リファレンス 複数のデータベースに対する管理者権限、オペレータ権限およびタスク固有の権限の手動による付与の概要」を参照ください。
sqlnet.ora の作成
関連記事 では説明を端折っていますが、sqldeveloper.bat 内に記載する環境変数 TNS_ADMIN に記載したフォルダに “sqlnet.ora" を配置してください。中身は以下の通りです。
SQLNET.AUTHENTICATION_SERVICES= (NTS)
これが、Oracle に接続する際にOS認証をしますよ、という設定になります。
追加したWindows ユーザで SQL Developer を起動する
Oracle にも SQL Developer にも、最初に登録した Windows ユーザである “testuser" は設定していません。OS 認証とは、認証行為そのものを OS に任せる、という意味になります。つまり、OSに対して該当するユーザでログインする行為が「認証」となるということになります。
Windows そのものに"testuser" でログインしても良いのですが、SQL Developer を「別ユーザで実行」することで模擬してみましょう。SQL Developer の実行ファイル(sqldeveloper.bat)を選択して「シフト(Shift)」を押しながら右クリックしてみてください。「別のユーザとして実行」というメニューが出てくると思いますので、これを選択します。

ユーザIDとパスワードを聞いてきますから、ここで最初に登録したWindowsユーザとパスワードを入力してください。

すると、これまでと別のユーザでの実行になるので、初回実行のときと同じダイアログが表示されます。設定情報は完全にユーザ単位となっていますので、Oracle Instant Client の設定を関連記事を参照して行っておいてください。
OS 認証で SYSDBA 接続
サンプルのデータベースORCL に対して、OS ユーザで接続する設定を追加します。ここでのポイントは、認証タイプを「OS」(=OS認証)として「ユーザ名を設定しない」です。
「テスト」ボタンで「成功」と表示されればOK です。

例えば、本記事の最初のステップで、このユーザ("testuser")を ORA_DBA グループに所属させるのを忘れていたり、sqlnet.ora の作成ができていないと、テストボタンでは以下のように「ORA-01017」のエラーになります。

SYSDBA 接続されたときのユーザ
これでデータベースには接続できるわけですが、ORACLE 上ではどのユーザとしてログインされているのかを確認してみます。接続後に以下のSQLでカレントユーザを確認してみます。
SELECT SYS_CONTEXT('USERENV','CURRENT_USER') FROM DUAL;

なんと「SYS」ユーザですね。OS 認証で SYSDBA 接続するのは、SYS ユーザでログインするのと同等というこです。マニュアルに記載されてる通りでした。
管理権限で接続すると、通常ユーザー名に関連付けられていない現行スキーマで接続が確立されます。
データベース管理者ガイド 1.6.2 管理権限で許可されている動作SYSDBA
の場合、現行スキーマはSYS
です。SYSOPER
の場合、現行スキーマはPUBLIC
です。SYSBACKUP
、SYSDG
およびSYSRAC
の場合、現行スキーマは名前解決のためのSYS
です。ただし、SYSKM
の現行スキーマはSYSKM
です。
このように OS 認証させるユーザは自由ですが、接続した先の ORACLE でのユーザは、そのシステム権限に応じて固定となるわけです。SYSOPER 権限の場合は「PUBLIC」ユーザです。
ディスカッション
コメント一覧
まだ、コメントがありません