oracle

Oracle sysdba権限とシステム権限は似ていますが別ものです

Oracleには「システム権限」と「sysdba権限」があります。実はこれ似ていますが別ものです。システム権限一覧という表現があるように、システム権限にはいろいろな権限(alter system、create sequence、drop any table、、)が存在します。これら多くのシステム権限が付与されているのがDBAロールです。それに対し「sysdba権限」は「権限そのもの」で最も強力な権限です。DBAロールを保持していればほとんど困りませんが、Oracleの立ち上げや停止はできません。

Oracleには、高度な管理操作を実行するための「管理権限」があり、その一つの権限がsysdbaという訳です。私も長く、”sysdba”っていう「システム権限」なのかと勘違いしていましたが異なります。その証拠にdba_sys_privs内にsysdbaは存在しません。

参考までにですがデフォルトでSYSDBA権限を保有しているのはSYSユーザのみです。SYSTEMユーザもSYSDBA権限は保有していません

sysdba権限を付与

デフォルトではsysdba権限を保持しているのはsysユーザだけです。なので以下grantはsysユーザでのみ実行可能です。

grant sysdba to sooni
;
SQL> grant sysdba to sooni
  2  ;

権限付与が成功しました。

SQL>

V$PWFILE_USERSを参照する事で確認できます

上記の通りdba_sys_privsでは確認できません。その代わりに V$PWFILE_USERSを参照する事で確認できます 。

SELECT USERNAME,SYSDBA,SYSOPER,SYSASM FROM V$PWFILE_USERS
;
col USERNAME for a10
col SYSDBA for a6
col SYSOPR for a6
col SYSASM for a6
SQL> col USERNAME for a10
SQL> col SYSDBA for a6
SQL> col SYSOPR for a6
SQL> col SYSASM for a6
SQL> SELECT t.USERNAME,t.SYSDBA,t.SYSOPER,t.SYSASM FROM V$PWFILE_USERS t
  2  ;

USERNAME   SYSDBA SYSOP SYSASM
---------- ------ ----- ------
SYS        TRUE   TRUE  FALSE
SYSDG      FALSE  FALSE FALSE
SYSBACKUP  FALSE  FALSE FALSE
SYSKM      FALSE  FALSE FALSE
SOONI      TRUE   FALSE FALSE

SQL>

マルチテナント構成の場合CDB(ルート)では付与できません

各PDBへ接続しなおして(alter session)の付与となります。

SQL> grant sysdba to sooni
2 ;
grant sysdba to sooni
*
行1でエラーが発生しました。:
ORA-65175: SYSDBA権限をルートでローカルには付与できません
SQL> col NAME for a16
SQL> col OPEN_MODE for a16
SQL> select name, open_mode from v$pdbs
2 ;

NAME OPEN_MODE
---------------- ----------------
PDB$SEED READ ONLY PDBORCL READ WRITE

SQL> show con_name;

CON_NAME
------------------------------
CDB$ROOT
SQL> alter session set container = PDBORCL
2 ;
セッションが変更されました。
SQL> grant sysdba to sooni
2 ;
権限付与が成功しました。
スポンサーリンク
タイトルとURLをコピーしました