ユーザ作成

  ユーザの意味



Oracle では、ユーザは特別な意味を持ちます。

データベースシステムとして通常は一つのマシンに一つのインスタンスとして Oracle が存在し、
インスタンスから見てデータベースは一つです

他の RDBMS では、一つのインスタンス内に 複数のデータベースを持ち、そのデータベース単位に
テーブルをはじめとするオブジェクトが管理されますが、Oracle ではスキーマと呼ばれるオブジェクト
一まとめにする概念が ユーザとなります

例えば、SQLServer や、MySQL における 「CREATE DATABASE」Oracle では
「CREATE USER」 になります。そして、同時にユーザとしてのアカウントの概念も存在します



  ユーザ作成の SQL構文



通常は以下の構文で作成します

  
create user ユーザ名
	identified by パスワード
	default tablespace 表領域名
	temporary tablespace 一時表領域名
	quota unlimited on 表領域名
	account unlock
  

省略できる句もありますが、最低限これだけは指定するようにします。

重要なのは、表領域です。ユーザを作成する前に表領域を作成しておく必要があります。

表領域は、データを格納する為の領域です。通常は一つのシステムを作ろうとする場合、その単位に格納領域を作成する手順となりますが、Oracle では同時に ユーザを作成する必要があります。一般的な「データベース」を実現するには、物理ファイル・表領域・ユーザは1セットと考えて下さい。最低限必要なものです。

テーブル等のオブジェクトを作成する際、意図的に任意の表領域に作成する事ができますが、特に指定しなければ作成するスキーマ。つまり、ユーザのデフォルト表領域に作成されます。

QUOTA 句は複数指定が可能で、ユーザが利用できる表領域の最大スペースを定義します。ユーザをスキーマとして一つのシステムとして考えれば、その為に用意された表領域は当然 unlimited で指定します。数値も指定できますが{K|M}、0 を指定するとその領域に対する割り当て権限が無い事になり、指定しないのと同じ事です。

但し、既に運用されてオブジェクトが存在する状態で、ALTER USER で サイズを 0 に変更するとその時点での領域はそのままで、以降の領域追加が不可となります

後、特殊な方法ですが QUOTA 句を全く指定しなくても UNLIMITED TABLESPACE システム権限を与えると、全てのテープルスペースへの無制限の領域使用権限を与える事になります。これは、サンプルスキーマである SCOTT にも与えられている権限です

「Enterprise Manager Console」 では、セキュリティからユーザを開きます



  権限の付与

ユーザを作成しただけでは全く権限が存在せず、データベースに接続する事すらできません。

Oracle では、いろいろな場面で「権限」という厳密な概念が出てきますが、最初に出くわすのがこのユーザに対する権限です。当然、SYSTEM ユーザは殆どの権限を持っているわけですが、権限を与えるのにも権限が必要です。表領域作成からユーザ作成や権限付与は 特別な理由がなければ SYSTEM ユーザで行います


権限付与の単位は、基本的には 「システム権限」と呼ばれるもので、覚えきれないほどたくさんの種類があります。いろいろな作業レベルを想定していくつかの権限を付与するわけですが、非常に煩雑な作業になります。そこで、目的に応じた「権限のセット」を作るようにします。このセットの事を ロール と言います。



  学習用ロールの作成

以下にそのシステム権限の一覧を示します

ROLE PRIVILEGE ADMIN_OPTION
1 LEARN_USER ALTER PROFILE NO
2 LEARN_USER ALTER SESSION NO
3 LEARN_USER ALTER SYSTEM NO
4 LEARN_USER ALTER TABLESPACE NO
5 LEARN_USER ALTER USER NO
6 LEARN_USER CREATE PROCEDURE NO
7 LEARN_USER CREATE PROFILE NO
8 LEARN_USER CREATE PUBLIC SYNONYM NO
9 LEARN_USER CREATE ROLE NO
10 LEARN_USER CREATE ROLLBACK SEGMENT NO
11 LEARN_USER CREATE SEQUENCE NO
12 LEARN_USER CREATE SESSION NO
13 LEARN_USER CREATE SYNONYM NO
14 LEARN_USER CREATE TABLE NO
15 LEARN_USER CREATE TABLESPACE NO
16 LEARN_USER CREATE TRIGGER NO
17 LEARN_USER CREATE VIEW NO
18 LEARN_USER EXECUTE ANY PROCEDURE NO
19 LEARN_USER SELECT ANY DICTIONARY NO
20 LEARN_USER SELECT ANY SEQUENCE NO
21 LEARN_USER SELECT ANY TABLE NO

ADMIN_OPTION は、その権限を与えられたユーザが他のユーザにその権限を付与できるかどうかのフラグです

ロールの作成自体は、「CREATE ROLE ロール名」です。権限は、GRANT 文で ロールに対して与えます。上記権限は、以下の SQL で出力したものです

select * from ROLE_SYS_PRIVS where ROLE = 'LEARN_USER'

つまり、まず CREATE ROLE LEARN_USER を実行してから、以下の GRANT 文を実行します

  
grant 
	 ALTER PROFILE 
	,ALTER SESSION 
	,ALTER SYSTEM 
	,ALTER TABLESPACE 
	,ALTER USER 
	,CREATE PROCEDURE 
	,CREATE PROFILE 
	,CREATE PUBLIC SYNONYM 
	,CREATE ROLE 
	,CREATE ROLLBACK SEGMENT 
	,CREATE SEQUENCE 
	,CREATE SESSION 
	,CREATE SYNONYM 
	,CREATE TABLE 
	,CREATE TABLESPACE 
	,CREATE TRIGGER 
	,CREATE VIEW 
	,EXECUTE ANY PROCEDURE 
	,SELECT ANY DICTIONARY 
	,SELECT ANY SEQUENCE 
	,SELECT ANY TABLE
to LEARN_USER
  



  ユーザに対するロールの付与

  
grant LEARN_USER to ユーザ名
  

ユーザでログインし、以下の SQL で確認します

  
select * from USER_ROLE_PRIVS
  










  infoboard   管理者用   
このエントリーをはてなブックマークに追加





フリーフォントWEBサービス
SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ