第一回では、oracleのDBAロールについて説明した。
今回の内容は、oracleの中でスーパーユーザと呼ばれている
sysユーザについて
を説明していく。
目次
- sysユーザとは
- sysdba権限について
- 類似するsystemユーザについて
- まとめ
1. sysユーザとは
Oracleでのsysユーザとは、データベースの最高管理者である。
→何でもできるユーザである。
(sysユーザは、Linuxでいうところのrootユーザに近い。)
rootユーザは、すべてのオブジェクトにアクセスできるDBAロールが付与されている。
第一回参照
ちなみに、SYSユーザに与えられている各種ロールは以下の通りである。
1 select GRANTEE,GRANTED_ROLE from dba_ROLE_PRIVS
2 where GRANTEE='SYS'
3* order by 2
GRANTEE GRANTED_ROLE
------------------------------ ------------------------------
SYS ADM_PARALLEL_EXECUTE_TASK
SYS APPLICATION_TRACE_VIEWER
SYS AQ_ADMINISTRATOR_ROLE
SYS AQ_USER_ROLE
SYS AUDIT_ADMIN
SYS AUDIT_VIEWER
SYS AUTHENTICATEDUSER
SYS BDSQL_ADMIN
SYS BDSQL_USER
SYS CAPTURE_ADMIN
SYS CDB_DBA
SYS CONNECT
SYS DATAPATCH_ROLE
SYS DATAPUMP_EXP_FULL_DATABASE
SYS DATAPUMP_IMP_FULL_DATABASE
SYS DBA
SYS DBFS_ROLE
SYS DBMS_MDX_INTERNAL
SYS EM_EXPRESS_ALL
SYS EM_EXPRESS_BASIC
SYS EXECUTE_CATALOG_ROLE
SYS EXP_FULL_DATABASE
SYS GATHER_SYSTEM_STATISTICS
SYS GDS_CATALOG_SELECT
SYS GGSYS_ROLE
SYS GSMADMIN_ROLE
SYS GSMROOTUSER_ROLE
SYS GSMUSER_ROLE
SYS GSM_POOLADMIN_ROLE
SYS HS_ADMIN_EXECUTE_ROLE
SYS HS_ADMIN_ROLE
SYS HS_ADMIN_SELECT_ROLE
SYS IMP_FULL_DATABASE
SYS LOGSTDBY_ADMINISTRATOR
SYS OEM_ADVISOR
SYS OEM_MONITOR
SYS OPTIMIZER_PROCESSING_RATE
SYS PDB_DBA
SYS PROVISIONER
SYS RECOVERY_CATALOG_OWNER
SYS RECOVERY_CATALOG_OWNER_VPD
SYS RECOVERY_CATALOG_USER
SYS RESOURCE
SYS SCHEDULER_ADMIN
SYS SELECT_CATALOG_ROLE
SYS SODA_APP
SYS SYSUMF_ROLE
SYS XDBADMIN
SYS XDB_SET_INVOKER
SYS XDB_WEBSERVICES
SYS XDB_WEBSERVICES_OVER_HTTP
SYS XDB_WEBSERVICES_WITH_PUBLIC
SYS XS_CACHE_ADMIN
SYS XS_CONNECT
SYS XS_NAMESPACE_ADMIN
SYS XS_SESSION_ADMIN
56行が選択されました。
DBAロールがあることも確認できるかと思う。
その他にも、oracleインストール時に、作成されるロールのほとんどが、付与されていることがわかる。
詳しく確認したい方は、以下のトグルを開いて確認してほしい。
oracle自動作成ロールとSYSユーザの関係
※ORACLE_MAINTAINED=Y
ロールが、oracleインストール時にoracleが内部的に作成するロールである。
SQL> select DR.ROLE,
2 case
3 when sys.GRANTED_ROLE is not null then 'SYSユーザに付与されている'
4 else '付与されていない'
5 end
6 ,ORACLE_MAINTAINED
7 from DBA_ROLES DR
8 left join (select GRANTEE,GRANTED_ROLE from dba_ROLE_PRIVS where GRANTEE='SYS') SYS
9 on sys.GRANTED_ROLE=DR.ROLE
10 where ORACLE_MAINTAINED='Y'
11 order by 1;
ROLE CASEWHENSYS.GRANTED_ROLEISNOTNULLTHE O
------------------------------ ------------------------------------ -
ADM_PARALLEL_EXECUTE_TASK SYSユーザに付与されている Y
APPLICATION_TRACE_VIEWER SYSユーザに付与されている Y
AQ_ADMINISTRATOR_ROLE SYSユーザに付与されている Y
AQ_USER_ROLE SYSユーザに付与されている Y
AUDIT_ADMIN SYSユーザに付与されている Y
AUDIT_VIEWER SYSユーザに付与されている Y
AUTHENTICATEDUSER SYSユーザに付与されている Y
BDSQL_ADMIN SYSユーザに付与されている Y
BDSQL_USER SYSユーザに付与されている Y
CAPTURE_ADMIN SYSユーザに付与されている Y
CDB_DBA SYSユーザに付与されている Y
CONNECT SYSユーザに付与されている Y
DATAPATCH_ROLE SYSユーザに付与されている Y
DATAPUMP_EXP_FULL_DATABASE SYSユーザに付与されている Y
DATAPUMP_IMP_FULL_DATABASE SYSユーザに付与されている Y
DBA SYSユーザに付与されている Y
DBFS_ROLE SYSユーザに付与されている Y
DBMS_MDX_INTERNAL SYSユーザに付与されている Y
EM_EXPRESS_ALL SYSユーザに付与されている Y
EM_EXPRESS_BASIC SYSユーザに付与されている Y
EXECUTE_CATALOG_ROLE SYSユーザに付与されている Y
EXP_FULL_DATABASE SYSユーザに付与されている Y
GATHER_SYSTEM_STATISTICS SYSユーザに付与されている Y
GDS_CATALOG_SELECT SYSユーザに付与されている Y
GGSYS_ROLE SYSユーザに付与されている Y
GLOBAL_AQ_USER_ROLE 付与されていない Y
GSMADMIN_ROLE SYSユーザに付与されている Y
GSMROOTUSER_ROLE SYSユーザに付与されている Y
GSMUSER_ROLE SYSユーザに付与されている Y
GSM_POOLADMIN_ROLE SYSユーザに付与されている Y
HS_ADMIN_EXECUTE_ROLE SYSユーザに付与されている Y
HS_ADMIN_ROLE SYSユーザに付与されている Y
HS_ADMIN_SELECT_ROLE SYSユーザに付与されている Y
IMP_FULL_DATABASE SYSユーザに付与されている Y
LOGSTDBY_ADMINISTRATOR SYSユーザに付与されている Y
OEM_ADVISOR SYSユーザに付与されている Y
OEM_MONITOR SYSユーザに付与されている Y
OPTIMIZER_PROCESSING_RATE SYSユーザに付与されている Y
PDB_DBA SYSユーザに付与されている Y
PROVISIONER SYSユーザに付与されている Y
RECOVERY_CATALOG_OWNER SYSユーザに付与されている Y
RECOVERY_CATALOG_OWNER_VPD SYSユーザに付与されている Y
RECOVERY_CATALOG_USER SYSユーザに付与されている Y
RESOURCE SYSユーザに付与されている Y
SCHEDULER_ADMIN SYSユーザに付与されている Y
SELECT_CATALOG_ROLE SYSユーザに付与されている Y
SODA_APP SYSユーザに付与されている Y
SYSUMF_ROLE SYSユーザに付与されている Y
WM_ADMIN_ROLE 付与されていない Y
XDBADMIN SYSユーザに付与されている Y
XDB_SET_INVOKER SYSユーザに付与されている Y
XDB_WEBSERVICES SYSユーザに付与されている Y
XDB_WEBSERVICES_OVER_HTTP SYSユーザに付与されている Y
XDB_WEBSERVICES_WITH_PUBLIC SYSユーザに付与されている Y
XS_CACHE_ADMIN SYSユーザに付与されている Y
XS_CONNECT SYSユーザに付与されている Y
XS_NAMESPACE_ADMIN SYSユーザに付与されている Y
XS_SESSION_ADMIN SYSユーザに付与されている Y
58行が選択されました。
このことから、SYSユーザは、oracleが自動作成するすべてのロールを持っており、極めて強い権限を持っていることがわかる。
それに加えて、sysdba権限という、権限の中で異質かつ最強の権限も保持している。
2. sysdba権限について
今まで触れてきたロールや権限は、あくまでもオブジェクトに対する権限である
ということである。
それに対して、sysdba権限はDBの全体管理に関わる権限である
イメージ図を下記に示す。
DBAロールを所有しているユーザは、DB内のすべてのオブジェクトに対してのアクセス権限やCreate権限を持っているため、DBのオブジェクトに関しては、なんでもできる。
しかし、DBを起動・停止するにはDBAロールではできない。
そこで、登場するのが、sysdba権限である。
sysdba権限を持っているユーザは、DB村の起動・停止を行うことができる。
その他にもsysdba権限のような権限は、複数存在する。
簡易的だが、紹介する。
- SYSDBA(DBの起動・停止やバックアップ・リカバリができる権限)
- SYSOPER(DBの起動・停止を行う権限)
- SYSASM(ASM全体を管理する権限)
- SYSBACKUP(RMANを使用したDBのバックアップができる権限)
- SYSDG(データガードに関するフェイルオーバー等ができる権限)
- SYSKM(キーの暗号化ができる権限)
上記の特別な権限が付与されているかは、 V$PWFILE_USERS
ビューで確認することができる。
こちらについての詳細な話は、第三回に詳しく話す。
3. 類似するsystemユーザについて
systemユーザは、一言でいうと
oracle社が用意した毎日の保守運用作業・データの管理を行う際に使用するユーザ
である。
sysユーザは、強力な権限がある便利な反面、危険を伴うユーザでもある。
そのことから、基本的にほとんど使用しないことが推奨されている。
そこで、基本的な毎日の業務で使用を推奨されているのが、systemユーザである。
systemユーザは、sysdba権限などの特別な権限は付与されてない。
しかし、DBAロールが付与されている
SQL> select GRANTEE,GRANTED_ROLE from dba_ROLE_PRIVS where GRANTEE='SYSTEM'
2 ;
GRANTEE GRANTED_ROLE
------------------------------ ------------------------------
SYSTEM DBA
SYSTEM AQ_ADMINISTRATOR_ROLE
SQL> select * from V$PWFILE_USERS where USERNAME='SYSTEM';
レコードが選択されませんでした。
SQL>
このことから、基本的な保守運用作業はsystemユーザで実施するのが基本的である。
4. まとめ
- sysユーザは、DBAロールだけでなく、oracleが内部的に作成したほぼすべてのロールの権限が付与されている。
- 上記に加えて、sysdba権限という特別な権限も持っている
- 特別な権限は、sysdba権限のほかにも複数存在する
- systemユーザは、DBAロールが付与されているoracleが提供する作業用ユーザである