Object Browserの使い方を覚えながらOracleを勉強しよう
SI Object Browserトライアル版のダウンロード
初回起動は管理者として実行
初回だけは、スタートメニューから「SI Object Browser for Oracle21」を右クリックして「管理者として実行」で起動します。インストールしたフォルダ(例えばProgram FilesのOBO21フォルダー)のファイルを右クリックしてもOKです。
ライセンスキーの登録(トライアル版の場合はスキップ)
起動直後は、ライセンスキーを入れる画面が表示されますが、トライアルとして利用する場合は「スキップ」を押してください。30日間はこの方法で利用することができます。なお、もし購入後の場合はこの画面でライセンスキーを入れることで製品版となり、このダイアログは出なくなります。
その後は、Oracleへのログオン画面が表示されますので、データベース接続文字列、ユーザーID、パスワードを入れてOracleに接続してみましょう。
ユーザーの作成とロールの付与
・Oracleに対して管理者権限でログインしている(ユーザー作成やロール付与する権限がある)
・チュートリアルのために、Oracleにユーザーを追加することを許可されている(怒られない)
1.OB「ユーザー情報」からユーザーを作成
SI Object Browser(以下、OB)のユーザー情報を表示し、新規(N)ユーザーを作成
2.ユーザーERPを作成し、ロールDBAを付与
名前をERP、ロールDBAを付与してユーザーを作成します。(任意のパスワードを設定)ロールとは権限(システム権限やオブジェクト権限)の集まりを役割ごとにまとめたものです。上記で付与したDBAは全てのシステム権限を持つロール(”ほぼ神”)です。スキーマとはオブジェクト(テーブルやビューなど)を格納するフォルダのようなものです。ユーザーとスキーマは1対1の関係で、ユーザーを作成すると(その名前で)スキーマが自動的に作成されます。
【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がわかりやすいように表形式に見せているもので、実際にはCREATE TABLE文が発行されてOracleの「ERP」スキーマ内にテーブル「EMP」が作成されます。試しに「ソース」タブに切り換えると、下図のCREATE TABLE文が確認できます(このSQLを直接編集することもできます)。
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を付与して作成してください。
「作成」を押すとCREATE USER文が発行され、USERSという表領域にMIZUNOというユーザー(&スキーマ)が作成されます。タブをデータに切り換えると、OBが裏で次のようなCREATE USER文を発行していることが確認されます。
3.他のユーザーにオブジェクト権限を付与
左覧のオブジェクトリストからTABLEを選択し、「EMP」を右クリックしてメニューから権限(G)を選択してください。ユーザー一覧から「MIZUNO」を選び、権限一覧からDELETE、INSERT、SELECT、UPDATEという4つの権限を付与して実行してください。GRANT文が発行され、下側の付与済みの権限覧に付与された権限が表示されます。これでMIZUNOは「EMP」テーブルのデータを操作するDML(データを操作するSQL)を発行できることになります。
ユーザーロールの作成とロールやオブジェクト権限の付与
1.ユーザーロールにオブジェクト権限を付与
先ほどはユーザー画面からオブジェクト権限を付与しましたが、オブジェクト側からユーザーやロールに権限を付与することもできます。今度はテーブルの「権限」タブからオブジェクト権限を付与してみましょう。テーブル「EMP」を開き、「権限」タブに切り換えます。表示対象を”全てのユーザーを表示”とすると、下のリスト覧にユーザー「MIZUNO」やロール「CONNECT_DML」が表示されます。
先ほどはオブジェクト権限をユーザーに付与しましたが、今回はユーザーでなくロールに付与してみましょう。「CONNECT_DML」というロールを選び、選択したユーザーの権限としてDELETE、INSERT、SELECT、UPDATEにチェックします。上部の「作成」を押すとGRANT文が発行され、ロール「CONNECT_DML」にテーブル「EMP」のオブジェクト権限が付与されます。
2.新規ユーザーにユーザーロールを付与
ユーザー情報画面で新規ユーザー「YAMADA」を作成し、ユーザーロール「CONNECT_DML」を付与してください。これで「YAMADA」は、システム権限「CONNECT」とテーブル「EMP」のオブジェクト権限の両方が付与されることになります。
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アドレスを含めた接続履歴をトレースする方法はあります。 |
まとめ
- Oracleのユーザーとスキーマーは1対1の関係である
- スキーマとは、オブジェクトを入れるフォルダのようなもの
- ユーザーに付与する権限には、システム権限とオブジェクト権限の2種類ある
- システム権限はデータベースに対する権限、オブジェクト権限はオブジェクト単位のアクセス権限
- 自分のスキーマのオブジェクトに他のユーザーがアクセスするにはオブジェクト権限を付与する。
- ロールは権限の束。ユーザーに個別に権限を与えるのは面倒なので、通常はロールを付与する。
- ロールには、DBAやCONNECTなどデフォルトロールのほかに、ユーザーがロールを作成もできる
- ロールには、システム権限のほかにオブジェクト権限も付与でき、他のロールも付与できる。
- 複数オブジェクトの権限を一括付与はできるが、複数ユーザーに一括付与はできない
- カテゴリ:
- キーワード: