Oracleユーザーの権限とロールORACLE MASTER Bronze DBA講座(8)

Oracleデータベースエンジニアとしての実力を証明するORACLE MASTER資格。その入り口であるBronze資格の取得は難しくない。本連載と、同時掲載中の連載「Bronze SQL基礎I 講座」で合格を目指そう!(参考記事:「Oracle 10g対応のORACLE MASTERとは?」)

» 2005年12月16日 00時00分 公開
[有限会社 G.F.インフィニティ (Project - ∞)]

 前回に引き続き、ユーザーとセキュリティの管理について学びます。前回「Oracleユーザーを管理する」で、ユーザーの作成と管理を紹介しました。今回はユーザーの権限とロールについて学びましょう。

理解しておきたいこと

1.確認しておきたい内容

  • 権限とロールの付与
  • ロールの作成と管理

2.起動や停止が可能な管理者権限

 データベースの起動や停止を行うために、SYSDBA権限とSYSOPER権限という特別な権限があります。

権限 説明
SYSDBA 起動、停止、データベースの作成、リカバリなどとすべてのデータベース権限
SYSOPER 起動、停止、基本的なリカバリのみ。データディクショナリなどへのアクセスは不可

 どちらの権限もデータベースの起動ができるわけですから、データベースがオープンしていない状態(インスタンスが停止した状態など)でも接続できます。

問題

問題1

データベースの起動や停止が可能な管理者権限を2つ選択しなさい。

a.DBA
b.SYSDBA
c.SYSOPER
d.Administrator
e.SYSMAN

正解:b、c

解説

 データベースの起動や停止には特別な権限が必要です。SYSDBA(正解b)とSYSOPER(正解c)がそれです。

 権限は、Database Controlに接続するときの「接続モード」リストで選択できます(図1)。

図1 Database Controlへの接続リスト 図1 Database Controlへの接続リスト

 Database Controlに「Normal」で接続している場合、停止などを行うときには「ホスト資格証明」と「データベース資格証明」の入力が必要です(図2)。

図2 資格証明の入力(クリックで全体を表示します) 図2 資格証明の入力(クリックで全体を表示します)

 不正解となる選択肢を解説しましょう。

選択肢a:DBAロールはOracleデータベースに対するすべての権限を持っていますが、データベースの起動と停止は除かれます。DBAロールを持っているだけでは、起動や停止を行うことができません。

選択肢d:Administratorという権限は存在しません。

選択肢e:SYSMANはユーザー名です。権限の名称ではありません。SYSMANは、Enterprise Managerにてデータベースを管理するユーザーとして用意されています。

問題2

インスタンスが停止していても接続できるロールまたはシステム権限を2つ選択しなさい。

a.CONNECT
b.CREATE SESSION
c.SYSDBA
d.RESOURCE
e.SYSOPER

正解:c、e

解説

 本質的には問題1と同じです。データベースの起動や停止を行うには、データベースの外部で認証されているユーザーである必要があります。データベースの外部で認証されているのが、SYSDBA(正解c)とSYSOPER(正解e)システム権限です。SYSDBAとSYSOPERの認証は、OSのグループを使って管理(OS認証)またはOracleユーザーにて認証(パスワードファイル認証)します。パスワードファイル認証を使用する場合はシステム権限として付与します(図3)。

図3 システム権限の付与(クリックで全体を表示します) 図3 システム権限の付与(クリックで全体を表示します)
SQL> connect sys as sysdba
パスワードを入力してください:
アイドル・インスタンスに接続しました。

 「アイドル・インスタンスに接続しました」は、インスタンスが停止している状態を表します。このとき権限のないユーザーで接続すると、「ORA-01034: ORACLE not available」というエラーが発生します。

SQL> connect scott
パスワードを入力してください:
ERROR:
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist

警告: Oracleにはもう接続されていません。


不正解となる選択肢を解説しましょう。

選択肢a:エンドユーザー向けのロールです。セッションを確立したり表を作成したりする権限が含まれていますが、データベースがオープンしていなければ接続できません。

選択肢b:データベースにセッションを確立するためのシステム権限です。データベースがオープンしていなければ接続できません。

選択肢d:開発者向けのロールです。プロシージャと呼ばれるプログラムなどの作成はできますが、このロールだけではデータベース接続できません。

3.システム権限とオブジェクト権限

 ユーザーがデータベースで何の操作を行えるかは、システム権限で管理されます。表を作成する権限(CREATE TABLE権限)やユーザーを作成する権限(CREATE USER権限)などはシステム権限です。一方、ほかのスキーマ・オブジェクトへのアクセスを許可するのはオブジェクト権限です。スキーマ・オブジェクトの所有者はすべての権限を所有していますが、SELECTやDMLなどはオブジェクト権限を付与することで可能になります。

問題

問題1

Database Controlを使用してオブジェクト権限を付与します。オブジェクトタイプとして「表」を選択してオブジェクト権限を付与する場合に必要な情報を選択しなさい。

a.オブジェクト権限を付与されるユーザー
b.表の名前
c.表の名前とオブジェクト権限
d.表の名前とオブジェクト権限を付与されるユーザー

正解:c

解説

 オブジェクト権限は、対象となるオブジェクトタイプによって付与される権限内容が変わります。例えばこの問題で使用している「表」タイプであれば、次のオブジェクト権限が使用できます。

  • SELECT:行の参照(SELECT文)を許可
  • INSERT:行の挿入(INSERT文)を許可
  • UPDATE:行の更新(UPDATE文)を許可
  • DELETE:行の削除(DELETE文)を許可
  • ALTER:表の変更(ALTER TABLE文)を許可
  • INDEX:索引の作成を許可
  • REFERENCES:この表の主キーまたは一意キーを参照する外部キーの作成を許可

 Database Controlを使用してオブジェクト権限を付与する場合、対象ユーザーの編集ページで「オブジェクト権限」タブを選択し、「オブジェクトタイプの選択」リストからオブジェクトタイプを選択します(図4)。

図4 オブジェクトタイプの選択(クリックで全体を表示します) 図4 オブジェクトタイプの選択(クリックで全体を表示します)

 続いて「表オブジェクトの選択」で表の名前を選択し、「使用可能な権限」リストからオブジェクト権限を選択します(図5)。

図5 オブジェクト権限の選択(クリックで全体を表示します) 図5 オブジェクト権限の選択(クリックで全体を表示します)

 選択肢a選択肢dにある「オブジェクト権限を付与されるユーザー」は、最初に対象となるOracleユーザーを選択するので、画面内では選択できません。

 実際にDatabase Controlを使用してみれば、どのような情報が必要かが分かります。試験対策として、Database Controlでの操作をひととおり行っておくことをお勧めします。

4.ロール

 システム権限やオブジェクト権限を直接ユーザーに付与するのでは、管理が煩雑になってしまいます。そこで権限をグループ化することを検討します。権限をグループ化するためにはロールを作成し、ロールに権限を付与します。ロールをユーザーに付与することで、ロール単位での権限管理ができます。

 OEMでユーザーを作成すると、デフォルトで「CONNECT」ロールが付与されます。CONNECTロールには次の権限が含まれています(図6)。

図6 CONNECTロール(クリックで全体を表示します) 図6 CONNECTロール(クリックで全体を表示します)
権限 説明
ALTER SESSION セッションのパラメータを変更できる
CREATE CLUSTER クラスタセグメントを作成できる
CREATE DATABASE LINK データベースリンクを作成できる
CREATE SEQUENCE 順序オブジェクトを作成できる
CREATE SESSION セッションを確立できる
CREATE SYNONYM シノニム(別名オブジェクト)を作成できる
CREATE TABLE 表を作成できる
CREATE VIEW ビューを作成できる

 なお、ロールを別のロールに付与することもできます。管理しやすい形のロールを作成するとよいでしょう。

問題

問題1

CONNECTロールとRESOURCEロールと同じ権限を管理するCON_RESロールを作成します。まずは、CONNECTロールから類似作成を使用してCON_RESロールを作成しました。この後実施するべきことを2つ選択しなさい。

a.CON_RESロールをCONNECTロールに付与する
b.CON_RESロールをRESOURCEロールに付与する
c.RESOURCEロールをCON_RESロールに付与する
d.CONNECTロールに含まれる権限をCON_RESロールに付与する
e.RESOURCEロールに含まれる権限をCON_RESロールに付与する
f.CONNECTロールとRESOURCEロールに含まれていない権限をCON_RESロールから削除する

正解:c、e

解説

 前回、宿題とした問題です。ロールは権限をグループ化するための入れ物です。ロール内にはシステム権限、オブジェクト権限だけでなく、ほかのロールを入れることもできます。そのロールが付与されたユーザーは、それらすべての権限を使用した処理ができるようになります。

 今回の問題では、CONNECTロールとRESOURCEロールに含まれている権限を持つ別のロールCON_RESロールを作成します。

 一から作成するのであれば、(1)空のロール作成、(2)権限をロールに入れる(権限の付与)で完了します。しかし今回は「類似作成」を使用しているので、CONNECTロールに含まれていた権限はすでにCON_RESロールに含まれています。残るRESOURCEロール内の権限を含めればよいので、正解eのようにRESOURCEロールに含まれる権限をCON_RESロールに付与すれば完了します。

 もっと簡単な方法は、正解cのように、RESOURCEロール自体をCON_RESロールに付与することです。ロールにロールを含めることもできるということを覚えておきましょう。

 ほかの選択肢の不正解の理由を解説しましょう。

選択肢a選択肢b:CON_RESロールを作成するのですから、CON_RESロールをほかのロールに付与するというのはおかしいですね。

選択肢d選択肢f:CONNECTロールを基に類似作成を使用したので、CON_RESロールには、CONNECTロールに含まれていた権限が入っています。選択肢dの作業は必要ありませんね。正解cか正解dを行ったのであれば余計な権限は含まれていませんから、選択肢fの作業も不要です。

まとめ

 前回と今回の2回にわたって、ユーザーとセキュリティの管理について解説しました。次の内容をチェックしておきましょう。

  • システムユーザーの位置付け(SYS、SYSTEM、SYSMAN、DBSNMPなど)
  • アカウントロックとパスワード期限切れ
  • Database Controlによるユーザー作成ページの各種情報(必須属性はユーザー名とパスワードなど)
  • データベースの起動や停止ができるのは、SYSDBAとSYSOPER権限
  • Database Controlによるシステム権限、オブジェクト権限、ロールの付与方法

宿題

 次回は、「スキーマ・オブジェクトの管理」を確認します。次の宿題を解いておいてください。

問題

列に一意な値のみが格納されるように制限できる制約を2つ選択しなさい。

a.主キー制約
b.外部キー制約
c.NOT NULL制約
d.一意キー制約
e.チェック制約

IT資格試験の模擬問題をWebベースで学習できる@IT自分戦略研究所の新サービス「@IT資格攻略」では、Oracle関連の資格をテーマとして取り上げています。Bronze SQL 基礎 I、Bronze DBA 10gも近日中に追加予定です。「無料お試し版」もありますので、記事と併せてご覧ください。



Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。