OBチュートリアル(Oracle入門1_ユーザー作成と権限付与編)

 2022.08.18  株式会社システムインテグレータ

Object Browserの使い方を覚えながらOracleを勉強しよう

このブログはSI Object Browser for Oracle(以下、OB)のチュートリアルです。せっかくなのでハンズオン形式でOBを操作しながら、Oracleのキホンも学ぶことにしましょう。Oracleの環境のある方は、実際にOBでOracleに接続してみてください。環境のない方でも、読んで理解できるように図や画面を使って説明していますので大丈夫です。

SI Object Browserトライアル版のダウンロード

ホームページからトライアル版のダウンロードができます。申し込むとメールでダウンロード先URLが送られてくるので、zipファイルを落としてローカルドライブに解凍してx64のsetupを起動してReadmeを参考にしながらインストールしましょう。

初回起動は管理者として実行

初回だけは、スタートメニューから「SI Object Browser for Oracle21」を右クリックして「管理者として実行」で起動します。インストールしたフォルダ(例えばProgram FilesのOBO21フォルダー)のファイルを右クリックしてもOKです。

ライセンスキーの登録(トライアル版の場合はスキップ)

起動直後は、ライセンスキーを入れる画面が表示されますが、トライアルとして利用する場合は「スキップ」を押してください。30日間はこの方法で利用することができます。なお、もし購入後の場合はこの画面でライセンスキーを入れることで製品版となり、このダイアログは出なくなります。

OBチュートリアル(Oracle入門1_ユーザー作成と権限付与編) 1

 

その後は、Oracleへのログオン画面が表示されますので、データベース接続文字列、ユーザーID、パスワードを入れてOracleに接続してみましょう。

ユーザーの作成とロールの付与

ここからの作業は、次のような状況を想定して説明します(管理者権限がない人は、読むだけで理解してください)
・Oracleに対して管理者権限でログインしている(ユーザー作成やロール付与する権限がある)
・チュートリアルのために、Oracleにユーザーを追加することを許可されている(怒られない)

1.OB「ユーザー情報」からユーザーを作成

SI Object Browser(以下、OB)のユーザー情報を表示し、新規(N)ユーザーを作成OBチュートリアル(Oracle入門1_ユーザー作成と権限付与編) 2

2.ユーザーERPを作成し、ロールDBAを付与

名前をERP、ロールDBAを付与してユーザーを作成します。(任意のパスワードを設定)OBチュートリアル(Oracle入門1_ユーザー作成と権限付与編) 3
 
 
(参考)ロールとユーザーとスキーマの関係

ロールとは権限(システム権限やオブジェクト権限)の集まりを役割ごとにまとめたものです。上記で付与したDBAは全てのシステム権限を持つロール(”ほぼ神”)です。スキーマとはオブジェクト(テーブルやビューなど)を格納するフォルダのようなものです。ユーザーとスキーマは1対1の関係で、ユーザーを作成すると(その名前で)スキーマが自動的に作成されます。

OBチュートリアル(Oracle入門1_ユーザー作成と権限付与編) 4

NOTE】ユーザーとスキーマーが1対1のざわざわ感

Oracleのユーザーとスキーマーが1対1という関係は、現代の感覚からするとイマイチです。図のようにERPというスキーマにあるオブジェクトをMizunoやYamadaが共有するのが一般的なのですが、①ERPというユーザーができる。②MizunoとYamadaというスキーマーができてしまう。という部分は無駄です。スキーマとユーザーを別々に作成でき、スキーマを1つ、ユーザーを複数作って共有ということができるといいのですが…。

3.ユーザーERPで再ログイン

現在のユーザーをいったんログオフして、ERPユーザーでログインしてみましょう。OB左上のアイコン(DBマイナス記号)をクリックしてデータベース接続を切断し、その左のアイコン(DBプラス記号)をクリックし、ユーザーIDをERPとして(先ほど決めたパスワードで)ログイン(接続)してください。このとき、接続先リストに登録するにチェックすると次回以降のログインが楽になります(リストから削除するときはリストを選んで×ボタンを押します)。

オブジェクトの作成とオブジェクト権限の付与

1.テーブル「EMP]をスキーマ「ERP」内に作成

左のオブジェクトリストのTABLEを右クリックして「新規作成(N)」を選んでください。スキーマERPに「定義情報」タブで図のような項目を登録してEMPというテーブルを作成します。OBチュートリアル(Oracle入門1_ユーザー作成と権限付与編) 5

上記はOBがわかりやすいように表形式に見せているもので、実際にはCREATE TABLE文が発行されてOracleの「ERP」スキーマ内にテーブル「EMP」が作成されます。試しに「ソース」タブに切り換えると、下図のCREATE TABLE文が確認できます(このSQLを直接編集することもできます)。

OBチュートリアル(Oracle入門1_ユーザー作成と権限付与編) 6

2.別のユーザーを作成

ユーザー「ERP」はDBA権限(神)を持っていますので、他のユーザーを作成して権限を与えることができます。上の図の「Mizuno」と「Yamada」ユーザーを作成して権限を付与してみましょう。

通常、DBA権限はOracleを管理する人だけに付与し、プログラムを開発するだけのユーザーには、その作業ができるだけの権限しか付与しません。デフォルトで用意されているロール(権限の束)はたくさんありますが、新規ユーザーに与える代表的なロール3つを表に示します。テーブルやビューなどオブジェクトの作成は行わないならCONNECT、オブジェクトの作成・変更も行うならRESOURCE、データベース管理者ならDBAというところでしょうか。

役割 ロール

ロールに含まれるシステム権限

オブジェクトにアクセス CONNECT

CREATE SESSHON

SET CONTAINER

オブジェクトの作成や変更 RESOURCE

CREATE CLUSTER

CREATE INDEXTYPE

CREATE OPERATOR

CREATE PROCEDURE

CREATE SEQUENCE

CREATE TABLE

CREATE TRIGGER

CREATE TYPE

Oracle自体の管理など全般(神) DBA

ほとんどのシステム権限

先ほどユーザー「ERP」を作った要領で、ユーザー「MIZUNO」にロールCONNECTを付与して作成してください。

OBチュートリアル(Oracle入門1_ユーザー作成と権限付与編) 7

「作成」を押すとCREATE USER文が発行され、USERSという表領域にMIZUNOというユーザー(&スキーマ)が作成されます。タブをデータに切り換えると、OBが裏で次のようなCREATE USER文を発行していることが確認されます。

OBチュートリアル(Oracle入門1_ユーザー作成と権限付与編) 8

3.他のユーザーにオブジェクト権限を付与

今、あなたは「ERP」というユーザーでログインしていますので、自分のスキーマー「ERP」内にあるオブジェクト(テーブルやビューなど)にアクセスする権限(オブジェクト権限)を持っており、この権限を誰かに付与することもできます。先ほど作成した「EMP」テーブルのオブジェクト権限をユーザー「MIZUNO」に付与してみましょう。

左覧のオブジェクトリストからTABLEを選択し、「EMP」を右クリックしてメニューから権限(G)を選択してください。ユーザー一覧から「MIZUNO」を選び、権限一覧からDELETE、INSERT、SELECT、UPDATEという4つの権限を付与して実行してください。GRANT文が発行され、下側の付与済みの権限覧に付与された権限が表示されます。これでMIZUNOは「EMP」テーブルのデータを操作するDML(データを操作するSQL)を発行できることになります。
OBチュートリアル(Oracle入門1_ユーザー作成と権限付与編) 9

ユーザーロールの作成とロールやオブジェクト権限の付与

「CONNECT」はOracleがデフォルトで用意しているロールですが、ユーザーが自分でロールを作成することもできます。デフォルトのロールはシステム権限だけでオブジェクト権限がありません(デフォルトではオブジェクトがないので当然ですが)。そのため、通常はユーザーロールを作成して(もしくはデフォルトのロールに対して)オブジェクト権限を付与して、それを開発メンバーに付与します。
ユーザー情報画面を表示し、ロールタブに切り換えて新規ユーザーロール「CONNECT_DML」を作ってください。ロールには、他のロールやシステム権限、オブジェクト権限を付与できます。ここではデフォルトロールの「CONNECT」を付与しておきます(上の図を参照)。
 OBチュートリアル(Oracle入門1_ユーザー作成と権限付与編) 10
 

1.ユーザーロールにオブジェクト権限を付与

先ほどはユーザー画面からオブジェクト権限を付与しましたが、オブジェクト側からユーザーやロールに権限を付与することもできます。今度はテーブルの「権限」タブからオブジェクト権限を付与してみましょう。テーブル「EMP」を開き、「権限」タブに切り換えます。表示対象を”全てのユーザーを表示”とすると、下のリスト覧にユーザー「MIZUNO」やロール「CONNECT_DML」が表示されます。

先ほどはオブジェクト権限をユーザーに付与しましたが、今回はユーザーでなくロールに付与してみましょう。「CONNECT_DML」というロールを選び、選択したユーザーの権限としてDELETE、INSERT、SELECT、UPDATEにチェックします。上部の「作成」を押すとGRANT文が発行され、ロール「CONNECT_DML」にテーブル「EMP」のオブジェクト権限が付与されます。

OBチュートリアル(Oracle入門1_ユーザー作成と権限付与編) 11

2.新規ユーザーにユーザーロールを付与

ユーザー情報画面で新規ユーザー「YAMADA」を作成し、ユーザーロール「CONNECT_DML」を付与してください。これで「YAMADA」は、システム権限「CONNECT」とテーブル「EMP」のオブジェクト権限の両方が付与されることになります。

OBチュートリアル(Oracle入門1_ユーザー作成と権限付与編) 12

3.複数オブジェクトを一括付与する

オブジェクトが200個あって、これを開発者50人に付与するとしましょう。個別に付与するのは大変なので、次の2ステップで一括で行いたいですね。

①複数オブジェクトを選択して、ユーザーロール「CONNECT_DML」にオブジェクト権限を付与する。

②複数ユーザーを選択して、ユーザーロール「CONNECT_DML」を付与する。

①はOKです。OBで複数オブジェクトを選択し、右クリック「権限」から一括付与できます。

②はできません。ユーザー1人ずつロールを付与する必要があります。

【NOTE】ユーザーIDを共有する文化

実はOracleは、役割ごとにユーザーID(とパスワード)を共有する文化があります。開発者が50人いた場合、50人一人一人がユーザーIDを持つのではなく、ERPというユーザーIDをみんなで使いまわしするのです。現代の感覚だとID使いまわしは、誰が変なことをしたかわからないので気持ち悪いですが、そういう文化だと割り切りましょう。なお、やっちまった人を特定する手段として、Oracleの監査ログ(ALTER_TRAIL)でIPアドレスを含めた接続履歴をトレースする方法はあります。

まとめ

  1. Oracleのユーザーとスキーマーは1対1の関係である
  2. スキーマとは、オブジェクトを入れるフォルダのようなもの
  3. ユーザーに付与する権限には、システム権限とオブジェクト権限の2種類ある
  4. システム権限はデータベースに対する権限、オブジェクト権限はオブジェクト単位のアクセス権限
  5. 自分のスキーマのオブジェクトに他のユーザーがアクセスするにはオブジェクト権限を付与する。
  6. ロールは権限の束。ユーザーに個別に権限を与えるのは面倒なので、通常はロールを付与する。
  7. ロールには、DBAやCONNECTなどデフォルトロールのほかに、ユーザーがロールを作成もできる
  8. ロールには、システム権限のほかにオブジェクト権限も付与でき、他のロールも付与できる。
  9. 複数オブジェクトの権限を一括付与はできるが、複数ユーザーに一括付与はできない
いまさら聞けない Oracleの基本

RELATED POST関連記事


RECENT POST「チュートリアル」の最新記事


チュートリアル

OBチュートリアル(Oracle入門2_SQL操作編)

OBチュートリアル(Oracle入門1_ユーザー作成と権限付与編)
新規CTA