OracleのSYSユーザーとは?データ・ディクショナリの所有者・SYSDBAとの違い・最高権限の考え方を解説

Oracle

Oracle Databaseを学習していると、「SYSユーザーはデータ・ディクショナリの基本表を所有する最高権限ユーザーなのか」という疑問が出てきます。結論から整理すると、SYSはOracle Database作成時に自動作成される特別な管理ユーザーで、データ・ディクショナリを構成する基本表やビューはSYSスキーマに格納されています。またSYSにはSYSDBA管理権限が付与されています。

ただし、「SYS=最高権限そのもの」とだけ覚えると、Oracleの権限体系を理解するときに混乱しやすくなります。Oracleでは「SYSというユーザー・スキーマ」と「SYSDBAという管理権限」を分けて理解することが重要です。

この記事では、SYS、SYSスキーマ、データ・ディクショナリ、SYSDBA、SYSTEMユーザーの違いを整理し、試験や実務でも混乱しにくい形で解説します。

SYSはOracle Database作成時に自動作成される特別なユーザー

Oracleの公式ドキュメントでは、データベースを作成すると SYS ユーザーが自動的に作成され、すべての権限を持つ管理アカウントとして扱われることが説明されています。Oracle公式ドキュメント[参照]

SYSは一般的なアプリケーションユーザーとは役割が大きく異なります。通常のユーザーが業務データを保存するための表を作成するのに対し、SYSスキーマにはOracle Databaseそのものの管理に必要な重要オブジェクトが存在します。

SYSは、通常業務で自由に使うための管理者アカウントではなく、Oracle Database内部の中核を担う特別なアカウントです。

データ・ディクショナリの基本表はSYSスキーマに格納される

Oracle Databaseのデータ・ディクショナリには、ユーザー、表、列、索引、権限など、データベース自身に関するさまざまな情報が保存されています。

Oracleの公式資料では、データ・ディクショナリを構成する基本表およびビューが SYS スキーマに格納されていると説明されています。Oracle公式情報[参照]

そのため、「SYSはデータ・ディクショナリの基本表を所有している」という理解は基本的に正しいです。ただし、実務では基本表を直接操作するのではなく、Oracleが提供するデータ・ディクショナリ・ビューを参照するのが原則です。

データ・ディクショナリとは何を保存しているもの?

データ・ディクショナリは、簡単に言えば「データベースについてのデータ」を保存する場所です。例えば「どんな表が存在するか」「どんな列があるか」「誰がどの権限を持つか」といったメタデータが管理されています。

例えばアプリケーションで EMPLOYEES という表を作成すると、その表の定義情報もOracle内部で管理されます。ユーザーが新しい表を作成するたびに、Oracle自身がデータ・ディクショナリを更新します。

Oracle公式ドキュメントでも、データベースの稼働中にはDDL文に応じてOracleがデータ・ディクショナリを更新すると説明されています。データ・ディクショナリ作成に関する公式情報[参照]

「SYSが所有する」と「SYSTEM表領域に格納される」は別の話

Oracle初心者が混同しやすいのが、スキーマ所有者と表領域です。データ・ディクショナリの基本表はSYSスキーマに属しますが、Oracle公式資料では、データ・ディクショナリの基本表は SYSTEM 表領域に作成されることも説明されています。Oracle公式情報[参照]

つまり、「所有者はSYS」「格納先となる表領域はSYSTEM」というように、別々の概念です。

概念 例 意味
ユーザー SYS Oracleの管理アカウント
スキーマ SYS SYSが所有するオブジェクトの論理的な集合
表領域 SYSTEM データファイルをまとめる論理的な記憶領域

「SYSTEM」という名前がユーザー名にも表領域名にも登場するため紛らわしいですが、SYSTEMユーザーとSYSTEM表領域は別のものです。

SYSは「最高権限ユーザー」と呼んでよい?

入門的な説明として「SYSはOracleで最も強力な管理ユーザー」と表現することはあります。実際、SYSには非常に強力な SYSDBA 管理権限が付与されており、Oracle公式資料でもすべての管理機能を実行できるアカウントとして説明されています。

ただし、より正確に理解するなら、SYSというユーザーとSYSDBAという管理権限は別物です。「最高権限ユーザー」と丸暗記するより、「SYSは特殊な管理ユーザーであり、SYSDBA権限を持つ」と覚えるほうが適切です。

OracleにはSYSDBA以外にも、SYSOPER、SYSBACKUP、SYSDG、SYSKM、SYSRACなど目的別の管理権限・管理アカウントがあります。そのため、Oracleの管理体系は単純に「SYSだけがすべての頂点」という一段階構造ではありません。

SYSDBAとはユーザー名ではなく管理権限

SYSDBA はユーザー名ではありません。データベース管理者向けの非常に強力な管理権限です。

Oracle公式ドキュメントでは、SYSDBAにはすべてのシステム権限をADMIN OPTION付きで扱う能力などがあり、データベース作成や高度な管理操作を実行できることが説明されています。SYSDBAの公式説明[参照]

つまり、概念的には次のように分けられます。

名称 種類
SYS ユーザー・スキーマ
SYSDBA 管理権限
DBA ロール
SYSTEM 管理ユーザー

この4つを区別できると、Oracleの権限問題がかなり理解しやすくなります。

SYS以外のユーザーにもSYSDBAを付与できる

SYSDBAはSYS専用のユーザー名ではないため、適切な設定と権限付与を行えば別の管理ユーザーにもSYSDBAを付与できます。

例えば MYDBA という管理ユーザーへSYSDBAを付与し、そのユーザーが次のように接続することが考えられます。

CONNECT mydba AS SYSDBA

Oracle公式ドキュメントによると、SYSDBAとして接続した場合、セッションユーザーは SYS となり、カレントスキーマも SYS になります。SYSDBA接続時の動作[参照]

この点からも、「SYSDBA=SYSというユーザー」と考えるのではなく、「SYSDBAは特別な管理接続・管理権限」と理解する必要があります。

SYSユーザーで接続するときはAS SYSDBAを使う

SQL*PlusなどからSYSとして接続する場合、通常は AS SYSDBA を指定します。

CONNECT sys AS SYSDBA

Oracle公式資料でも、SYSユーザーで接続するときは AS SYSDBA を使用する例が示されています。Oracle SQL*Plus接続例[参照]

この接続は一般ユーザーが通常のユーザー名・パスワードでログインするのとは性質が異なり、データベースの起動や停止など高度な管理処理にも関係します。

SYSとSYSTEMは何が違う?

OracleではSYSと並んで SYSTEM という管理ユーザーも自動作成されます。名前が似ていますが、役割は同じではありません。

SYSはデータ・ディクショナリの基本表やビューを持つ特別なスキーマです。一方、SYSTEMは通常の管理作業に利用できる管理ユーザーとして用意されています。

項目 SYS SYSTEM
自動作成 される される
管理アカウント はい はい
データ・ディクショナリ基本表の所有 SYSスキーマに格納 所有者ではない
SYSDBA 付与される 通常のSYSTEMユーザーとは別概念
通常業務テーブルの保存 行うべきではない 一般業務用スキーマとして使うべきではない

Oracleは日常的な管理作業についても、SYSやSYSTEMを使い続けるのではなく、必要な管理権限を付与した名前付き管理ユーザーを作成することを推奨しています。Oracle公式推奨[参照]

SYSスキーマの基本表を直接UPDATEしてはいけない

SYSがデータ・ディクショナリを所有しているからといって、管理者がSYSでログインして基本表を自由にUPDATE・DELETE・INSERTしてよいわけではありません。

Oracle公式ドキュメントでは、データ・ディクショナリの整合性を維持するため、SYSスキーマ内の基本表はデータベース自身によって管理され、ユーザーやDBAが直接変更してはならないと明確に説明されています。Oracle公式の注意事項[参照]

「SYSなら何でも手動で変更してよい」という理解は危険です。権限が強いことと、直接操作すべきことは別です。

データ・ディクショナリを見るときはビューを利用する

一般的に管理者やユーザーは、SYS内部の基本表を直接参照するのではなく、Oracleが提供するデータ・ディクショナリ・ビューを利用します。

代表的なビューには USER_、ALL_、DBA_ で始まるものがあります。

接頭辞 主な意味 例
USER_ 現在のユーザーが所有する対象 USER_TABLES
ALL_ 現在のユーザーがアクセス可能な対象 ALL_TABLES
DBA_ データベース全体の情報 DBA_TABLES

例えば自分が所有している表の一覧なら次のように確認できます。

SELECT table_name FROM user_tables;

データベース全体の表情報を確認する適切な権限がある場合は、次のような問い合わせが使われます。

SELECT owner, table_name FROM dba_tables;

DBAロールとSYSDBAも同じではない

Oracleでは DBA というロールも登場するため、SYSDBAと混同しやすくなります。しかし、両者は同じものではありません。

DBAは多くの管理用システム権限をまとめたロールです。一方、SYSDBAはデータベースインスタンスが通常状態で開いていない場合にも接続して起動などを実行できる、特別な管理権限です。

Oracle公式ドキュメントでも、SYSDBAやSYSOPERはデータベースがオープンしていない状態でもインスタンスへアクセスできる特別な管理権限として説明されています。Oracle公式情報[参照]

試験問題では「ユーザー・スキーマ・権限・ロール」を分ける

Oracle資格試験や学習問題では、「SYSは何か」「SYSDBAは何か」「SYSTEMは何か」といった用語の区別が問われることがあります。その場合は、まず種類を分類すると判断しやすくなります。

  • SYS:特別な管理ユーザーでありSYSスキーマの所有者
  • SYSDBA:非常に強力な管理権限
  • SYSTEM:Oracleが自動作成する別の管理ユーザー
  • DBA:管理用権限をまとめたロール
  • データ・ディクショナリ基本表:SYSスキーマに格納されるOracle内部の重要オブジェクト

「最高権限」という日本語だけで覚えるより、この分類で整理したほうが応用問題にも対応しやすくなります。

SYSを通常アプリケーションの接続ユーザーにしてはいけない

SYSは強力だから便利に見えますが、Webアプリケーションや業務システムが日常的にSYSでデータベースへ接続する設計は避けるべきです。

例えばECサイトのアプリケーションで必要なのが注文表へのSELECT、INSERT、UPDATEだけなら、その操作に必要な最小限の権限を持つ専用ユーザーを作成します。SYSDBAを与える必要はありません。

これは最小権限の原則にもつながります。万一アプリケーションの認証情報が漏えいした場合でも、権限を限定しておけば被害範囲を抑えやすくなります。

SYSとSYSDBAを理解するための簡単な例

イメージとして、SYSを「データベースの中核管理用アカウント」、SYSDBAを「データベース全体を管理するための特別な権限」と考えると分かりやすくなります。

例えば一般ユーザー APPUSER は自分に許可された表だけを操作します。一方、DBA用ユーザーへSYSDBAを付与すれば、そのユーザーはSYSDBAとして特別な管理接続ができます。

一般ユーザー APPUSER
    ↓
許可された業務データを操作

管理ユーザー MYDBA AS SYSDBA
    ↓
データベース全体の高度な管理

SYS
    ↓
Oracle内部の重要オブジェクトを持つ特別な管理アカウント

このように考えると、「SYSだけが権限というものを所有している」のではなく、Oracleではユーザーへ管理権限を付与する仕組みがあることが理解できます。

まとめ|SYSはデータ・ディクショナリの所有者だがSYSDBAとの区別が重要

Oracle DatabaseのSYSは、データベース作成時に自動作成される非常に特別な管理ユーザーです。データ・ディクショナリを構成する基本表やビューはSYSスキーマに格納され、Oracle Databaseの動作に不可欠な情報を管理しています。

その意味で「SYSはデータ・ディクショナリの基本表を所有する強力な管理ユーザー」という理解は正しいです。一方で、「最高権限ユーザー」という言葉だけで覚えると、SYSとSYSDBAを混同する可能性があります。

正確には「SYSは特別な管理ユーザー・スキーマであり、データ・ディクショナリの基本表やビューを所有し、SYSDBA管理権限も持つ」と整理するのが分かりやすいです。

また、SYSスキーマ内のデータ・ディクショナリ基本表は非常に重要であり、DBAであっても直接変更するものではありません。日常的な管理には専用の管理ユーザーを用意し、アプリケーションには必要最小限の権限だけを与えることが安全なOracle運用の基本です。

コメント

タイトルとURLをコピーしました