ラベル 06.USERの作成と権限 の投稿を表示しています。 すべての投稿を表示
ラベル 06.USERの作成と権限 の投稿を表示しています。 すべての投稿を表示

2013/08/14

06-04.USERの作成と権限【権限とロール04--ORACLE DBインストール時のデポルトROLE】

オラクルデーターベースを作成すると基本的に作成されるROLEがある。
DBA_ROLESで既に定義されているROLEを確認できる。


SQL> SELECT * FROM DBA_ROLES;

ROLE                           PASSWORD AUTHENTICAT
------------------------------ -------- -----------
CONNECT                        NO       NONE
RESOURCE                       NO       NONE
DBA                            NO       NONE
SELECT_CATALOG_ROLE            NO       NONE
EXECUTE_CATALOG_ROLE           NO       NONE
DELETE_CATALOG_ROLE            NO       NONE
EXP_FULL_DATABASE              NO       NONE
IMP_FULL_DATABASE              NO       NONE
LOGSTDBY_ADMINISTRATOR         NO       NONE
DBFS_ROLE                      NO       NONE
AQ_ADMINISTRATOR_ROLE          NO       NONE

……
……
……


56行が選択されました。

SQL>


多数のROLEがあるが、良く使う3つについて調べてみる。

■CONNECT ROLE
 -ORCLEへ接続できるセッション及びテーブルを作成、確認できるノーマルな権限で構成されている
 -CONNECT ROLEが無いとユーザーを作成してもORACLEへ接続できない。
 -下記コマンドでCONNECT ROLEの権限が確認できる。

SQL> SELECT grantee, privilege
  2  FROM DBA_SYS_PRIVS
  3  WHERE grantee = 'CONNECT';

GRANTEE                        PRIVILEGE
------------------------------ ----------------------------------------
CONNECT                        CREATE SESSION

SQL>



■RESOURCE ROLE
 -Store Procedure、Trigger等PL/SQLを使用できる権限で構成されている。
 -PL/SQLを使用するにはRESOURC ROLEを付与しなければならない。
 -ユーザーを作成すると基本的にCONNECT、RESOURCEロールを付与する。

■DBA ROLE
 -すべてのシステム権限が付与されているロール。
 -DBA ROLEはデーターベース―管理者のみに付与すべき。

06-04.USERの作成と権限【権限とロール03--ロール(Role)】

■ロール(Role)とは?
 ユーザーへ許可出来る権限の集まりと言える。

 -ROLEを使えば権限の付与と回収を楽にできる。
 -ROLEはCREATE ROLE権限を持つユーザーにより作成できる。
 -1ユーザーは多数のROLEへアクセスでき、多数のユーザーへ同じ権限を付与できる。
 -システム権限を付与、回収する際、同じコマンドを使用してユーザーへ付与、回収する。
 -ユーザーはROLEへROLEを付与可能。
 -オラクルデーターベースをインストールするとデポルトで
  CONNECT,RESOURCE,DBA ROLEが提供される。

DBAが多数のユーザーへいちいち権限を付与するのは手間が掛る。
DBAがユーザーの役割に合うROLEを作成してROLEだけユーザーへ指定することにより
効率的にユーザーを管理できる。

■ROLE作成文

CREATE ROLE role_name


■ROLE作成例文

 ROLE付与手順
  ①ROLEの作成:CREATE ROLE manager
  ②ROLEへ権限付与:GRANT create session, create table TO manager
  ③ROLEをユーザーまたはROLEへ付与:GRANT manager TO scott, test1;

---ROLEを作成する

SQL> CREATE ROLE manager;

ロールが作成されました。

---ROLE権限を付与する

SQL> GRANT create session, create table TO manager;

権限付与が成功しました。

---権限が付与されたROLEをUSERもしくはROLEへ付与する
SQL> GRANT manager TO scott, test1;

権限付与が成功しました。

SQL>



06-04.USERの作成と権限【権限とロール02--オブジェクト権限(Object Privileges)】

■オブジェクト権限(Object Privileges)
 オブジェクト権限はUserが所有する特定のオブジェクトを
 他のユーザーがアクセスまたは操作出来るようにするために作成する。

※オブジェクト権限(Object Privileges)とは?
 -テーブル、ビュー、シーケンス、プロシーザー、ファンクションまたはパッケージの中から
  指定された1つのオブジェクトへ特別な作業を実施できるようにする。
 -オブジェクト所有者は他ユーザーへ特定のオブジェクト権限を付与できる。
 -PUBLICで権限を付与すると回収する時もPUBLICで回収しなければならない。
 -基本的に所有するオブジェクトに対してすべての権限が自動で与えられる。
 -WITH GRANT OPTIONはROLEへ権限を付与するとは使えない。

■オブジェクト権限付与文


GRANT object_privilege [  ] 
ON object
TO { user[,user] | role | PUBLIC }
[ WITH GRANT OPTION ]

-object_privilege:付与するオブジェクト権限名
-object:オブジェクト名
-user, role:付与するユーザー名と他DBの役割名
-PUBLIC:オブジェクト権限、DB役割をすべてのユーザーへ付与
-WITH GRANT OPTION:権限を付与されたユーザーもその権限を他ユーザー、役割へ付与できる


表の列(ALTER,DELETE,EXECUTE…)はobject_privilegeになり、
行(テーブル、ビュー、シーケンス、プロシーザー…)がONの次のobjectとなる。


■オブジェクト権限付与例文
---オブジェクト権限を付与するユーザーを作成(test1,test2)
---test1,test2へ基本権限を付与

SQL> show user
ユーザーは"SYS"です。
SQL> CREATE USER test1 IDENTIFIED BY test;

ユーザーが作成されました。

SQL> CREATE USER test2 IDENTIFIED BY test;

ユーザーが作成されました。

SQL> GRANT CONNECT, RESOURCE, CREATE TABLE TO test1, test2;

権限付与が成功しました。

SQL>


---scottで接続する
---test1へempテーブルをSELECT,INSERT出来る権限を付与
---test1も他ユーザーへその権限を付与できる。

SQL> CONN scott/tiger
接続されました。
SQL> show user
ユーザーは"SCOTT"です。
SQL> GRANT SELECT, INSERT
  2  ON emp
  3  TO test1
  4  WITH GRANT OPTION;

権限付与が成功しました。

---test1で接続してempテーブルを参照する。
SQL> CONN test1/test
接続されました。
SQL> show user
ユーザーは"TEST1"です。
SQL> SELECT * FROM scott.emp;

     EMPNO ENAME      JOB              MGR HIREDATE        SAL       COMM     DEPTNO
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
      7369 SMITH      CLERK           7902 13-08-13        800                    20
      7499 ALLEN      SALESMAN        7698 13-08-13       1600        300         30
      7521 WARD       SALESMAN        7698 13-08-13       1250        500         30
      7566 JONES      MANAGER         7839 13-08-13       2975                    20
      7654 MARTIN     SALESMAN        7698 13-08-13       1250       1400         30
      7698 BLAKE      MANAGER         7839 13-08-13       2850                    30
      7782 CLARK      MANAGER         7839 13-08-13       2450                    10
      7788 SCOTT      ANALYST         7566 13-08-13       3000                    20
      7839 KING       PRESIDENT            13-08-13       5000                    10
      7844 TURNER     SALESMAN        7698 13-08-13       1500          0         30
      7876 ADAMS      CLERK           7788 13-08-13       1100                    20

     EMPNO ENAME      JOB              MGR HIREDATE        SAL       COMM     DEPTNO
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
      7900 JAMES      CLERK           7698 13-08-13        950                    30
      7902 FORD       ANALYST         7566 13-08-13       3000                    20
      7934 MILLER     CLERK           7782 13-08-13       1300                    10

14行が選択されました。

SQL>



---test2で接続し、empテーブルを確認
---test1で接続し、SELECT権限をtest2へ付与する
---test2で接続し、empテーブルを再確認

SQL> CONN test2/test
接続されました。
SQL> show user
ユーザーは"TEST2"です。
SQL> SELECT * FROM scott.emp;
SELECT * FROM scott.emp
                    *
行1でエラーが発生しました。:
ORA-00942: 表またはビューが存在しません。


SQL> CONN test1/test
接続されました。
SQL> show user
ユーザーは"TEST1"です。
SQL> GRANT SELECT on scott.emp TO test2;

権限付与が成功しました。

SQL> CONN test2/test
接続されました。
SQL> show user
ユーザーは"TEST2"です。
SQL> SELECT * FROM scott.emp;

     EMPNO ENAME      JOB              MGR HIREDATE        SAL       COMM     DEPTNO
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
      7369 SMITH      CLERK           7902 13-08-13        800                    20
      7499 ALLEN      SALESMAN        7698 13-08-13       1600        300         30
      7521 WARD       SALESMAN        7698 13-08-13       1250        500         30
      7566 JONES      MANAGER         7839 13-08-13       2975                    20
      7654 MARTIN     SALESMAN        7698 13-08-13       1250       1400         30
      7698 BLAKE      MANAGER         7839 13-08-13       2850                    30
      7782 CLARK      MANAGER         7839 13-08-13       2450                    10
      7788 SCOTT      ANALYST         7566 13-08-13       3000                    20
      7839 KING       PRESIDENT            13-08-13       5000                    10
      7844 TURNER     SALESMAN        7698 13-08-13       1500          0         30
      7876 ADAMS      CLERK           7788 13-08-13       1100                    20

     EMPNO ENAME      JOB              MGR HIREDATE        SAL       COMM     DEPTNO
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
      7900 JAMES      CLERK           7698 13-08-13        950                    30
      7902 FORD       ANALYST         7566 13-08-13       3000                    20
      7934 MILLER     CLERK           7782 13-08-13       1300                    10

14行が選択されました。

SQL>


■オブジェクト権限回収例文

---test1へ付与したempテーブルに対するSELECT, INSERT権限回収例文
---test1の権限が回収されるとtest1が権限付与したtest2の権限も回収される。

SQL> CONN scott/tiger
接続されました。
SQL> show user
ユーザーは"SCOTT"です。
SQL> REVOKE SELECT, INSERT
  2  ON emp
  3  FROM test1;

取消しが成功しました。

SQL> CONN test1/test
接続されました。
SQL> show user
ユーザーは"TEST1"です。
SQL> SELECT * FROM scott.emp;
SELECT * FROM scott.emp
                    *
行1でエラーが発生しました。:
ORA-00942: 表またはビューが存在しません。


SQL> CONN test2/test
接続されました。
SQL> show user
ユーザーは"TEST2"です。
SQL> SELECT * FROM scott.emp;
SELECT * FROM scott.emp
                    *
行1でエラーが発生しました。:
ORA-00942: 表またはビューが存在しません。


SQL>


■WITH GRANT OPTIONによるオブジェクト権限回収
 WITH GRANT OPTIONを使用して付与したオブジェクト権限を回収すると
 付与されたユーザーが付与したユーザーの権限も回収される。
 【解説】
1.SCOTTがTEST1にWITH GRANT OPTIONを使用してempテーブルのSELECT権限を付与
2.TEST1がempテーブルのSELECT権限をTEST2へ付与
3.SCOTTがTEST1に付与したempテーブルのSELECT権限を回収


【結果】
 -SCOTTがTEST1に付与したempテーブルのSELECT権限を回収するとTEST2のempテーブル
  SELECT権限も自動的に回収される。

06-03.USERの作成と権限【権限とロール01--システム権限(System Privileges)】

■システム権限(Sysytem Privileges)
 Oracleでの権限(Privileges)は特定タイプのSQL実行、DBオブジェクトへアクセス出来る権限を言う。 

※システム権限(Sysytem Privileges)とは?
  -システム権限はユーザーがDBで特定作業を実施出来るようにする。
  -権限のANYキーワードはユーザーがすべてのスキーマで権限を持つ事を意味する。
  -GRANTコマンドはユーザーまたはROLEについて権限を付与出来る
  -REVOKEコマンドは権限を回収できる。

 ※代表的なシステム権限
  -CREATE SESSION:DBに接続できる権限
  -CREATE ROLE:ORACLE DB役割を作成出来る権限
  -CREATE VIEW:ビューの作成権限
  -ALTER USER:作成したユーザーの定義を修正出来る権限
  -DROP USER:作成したユーザーを削除する権限


■システム権限付与文
GRANT [ system_privilege | role ] TO [ user | role | PUBLIC ] [ WITH ADMIN OPTION ]

-system_privilege:付与するシステム権限の名前
-role:付与するDB役割の名前
-user,role:付与するユーザー名と別DB役割名
-PUBLIC:システム権限またはDB役割をすべてのユーザーへ付与可能
-WITH ADMIN OPTION:権限を付与されたユーザーも自分の権限を他のユーザーまたはロールへ付与できるようになる



■システム権限付与例文
---SYS権限で接続する
SQL> CONN sys/manager AS SYSDBA
接続されました。

---scottユーザーへユーザー作成、修正、削除権限を付与し、
---scottユーザーも他ユーザーへその権限を付与出来るように権限を付与
SQL> GRANT CREATE USER, ALTER USER, DROP USER TO scott WITH ADMIN OPTION;

権限付与が成功しました。

SQL>


■システム権限回収
REVOKE [ system_privilege | role ] FROM [ user | role | PUBLIC ]


■システム権限回収例文
---scottユーザーへ付与した作成、修正、削除権限を回収する
SQL> REVOKE CREATE USER, ALTER USER, DROP USER FROM scott;

取消しが成功しました。

SQL>

■WITH ADMIN OPTIONで付与した権限の回収
WITH ADMIN OPTIONを使用してシステム権限を付与しても権限を回収する際は別々に回収しなければならない。
【解説】
1.DBAがSTORMへWITH ADMIN OPTIONでCREATE TABLEシステム権限を付与
2.STORMがテーブルを作成
3.STORMがCREATE TABLEシステム権限をSCOTTに付与
4.SCOTTがテーブルを作成
5.DBAがSTORMに付与したCREATE TABLE権限を回収


【結果】
 -STORMのテーブルは存在するが、新しいテーブルを作成できる権限は無い
 -SCOTTはテーブルが存在し、新しいテーブルを作成できるCREATE TABLE権限を持っている

2013/08/13

06-02.USERの作成と権限【USERの変更と削除】

■ALTER USER文で変更可能なオプション
 ・パスワード
 ・デポルトテーブルスペース
 ・テンポラリテーブルスペース
 ・テーブルスペース配分
 ・プロファイル、デフォルト役割


■USER修正文
ALTER USER user_name
[ IDENTIFIED {BY password | EXTERNALLY } ]
[ DEFAULT TABLESPACE tablespace ]
[ TEMPORARY TABLESPACE tablespace ]
[ PASSWORD EXPIRE ]
[ ACCOUNT {LOCK | UNLOCK} ]


■USER編集例文

---SYS権限で接続
SQL> CONN /AS SYSDBA
接続されました。

---scott USERのパスワードを変更
SQL> ALTER USER scott IDENTIFIED BY lion;

ユーザーが変更されました。

---scott USERのパスワードが変更されたのを確認出来る
SQL> CONN scott/lion
接続されました。
SQL> CONN /AS SYSDBA
接続されました。

---scott USERのパスワードは初期に戻す
SQL> ALTER USER scott IDENTIFIED BY tiger;

ユーザーが変更されました。

SQL>


■USER削除

DROP USER user_name [CASCADE]

CASCADEを使用するとユーザー関連のすべてのデーターベーススキーマが削除され、
スキーマオブジェクトも物理的に削除される。

■USER情報確認

---DBに登録されているユーザーを確認するにはDBA_USERを参照する
---SQL PLUSを実行し、SYSアカウントで接続する
SQL> CONN / AS SYSDBA
接続されました。

SQL> SELECT username, default_tablespace, temporary_tablespace FROM DBA_USERS;

USERNAME                       DEFAULT_TABLESPACE             TEMPORARY_TABLESPACE
------------------------------ ------------------------------ ------------------------------
MGMT_VIEW                      SYSTEM                         TEMP
SYS                            SYSTEM                         TEMP
SYSTEM                         SYSTEM                         TEMP
DBSNMP                         SYSAUX                         TEMP
SYSMAN                         SYSAUX                         TEMP
SCOTT                          USERS                          TEMP
TEST                           USERS                          TEMP
OUTLN                          SYSTEM                         TEMP
FLOWS_FILES                    SYSAUX                         TEMP
MDSYS                          SYSAUX                         TEMP
ORDSYS                         SYSAUX                         TEMP

---ユーザーとテーブルスペースに関する情報が表示される

06-01.USERの作成と権限【USER 作成】

■USER作成

CREATE USER user_name
IDENTIFIELD [BY password | EXTERNALLY]
 [ DEFAULT TABLESPACE tablespace ]
 [ TEMPORARY TABLESPACE tablespace ]
 [ QUOTA { integer [K|M] | UNLIMITIED } ON tablespace ]
 [ PASSWORD EXPIRE ]
 [ ACCOUNT { LOCK | UNLOCK } ]
 [ PROFILE { profile | DEFAULT } ]

・user_name : USERの名前
・BY password : USERログイン時のパスワード
・EXTERNALLY : USERのOSによる認証指定
・DEFAULT TABLESPACE : USERスキーマの為の基本テーブルスペースを指定
・TEMPORARY TABLESPACE : USERの一時的テーブルスペースを指定
・QUOTA : USERが使用するテーブルスペースの領域を指定
・PASSWORD EXPIRE : USERがSQLPLUSでDBにログインする時パスワードを再設定
 (USERがDBにより認証される場合のみ適切なオプションだ。)
・ACCOUNT LOCK/UNLOCK : USERアカウントをロック、アンロックする時使用
 (UNLOCKが基本)
・PROFILE : 資源使用を制御し、USERへ使用される暗号制御処理方式を指定

ここでは簡単なユーザー作成について記載、
詳細なユーザー管理とPROFILE管理はアドミンで…

※TEMPORARY TABLESPACEを指定しないとシステムのテーブルスペースが基本的に指定されるが、システムのテーブルスペースに斷片が発生する可能性があるのでUSER作成時には、TEMPORARY TABLESPACEを指定するのが望ましい

また、DEFAULT TABLESPACEもUSER作成時に指定しないと基本的にシステムテーブルスペースが指定される。だが、USER作成時にDEFAULT TABLESPACEを指定してUSERが持つデーターとオブジェクトの保存スペースを別途管理する必要がある。

システムテーブルスペースは本来の目的(すべてのデーター情報、保存プロシーザー、パッケージ、DBトリーガー等を保存)の為に使う物であり、一般USERのデーター保存に使用してはいけない。

※テーブルスペースとは
 ・オラクルサーバーがデーターを保存する論理的な構造
 ・テーブルスペースは1つまたは多数のデーターファイルで作られる論理的データー保存構造

■USER作成実記

---SQL PLUS実行後、SCOTT/TIGERで接続

SQL> CREATE USER TEST IDENTIFIED BY TEST;
CREATE USER TEST IDENTIFIED BY TEST
                               *
行1でエラーが発生しました。:
ORA-01031: 権限が不足しています。


---SCOTT USERはユーザー作成権限がないので作成不可
---DBA Roleのあるユーザーで接続

SQL> CONN sys/manager AS SYSDBA
接続されました。

---USERを再作成
SQL> CREATE USER TEST IDENTIFIED BY TEST;

ユーザーが作成されました。

SQL>


新しく作成したユーザーで接続してみよう

SQL> CONN TEST/TEST
ERROR:
ORA-01045: user TEST lacks CREATE SESSION privilege; logon denied


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

---新しく作成したTESTユーザーは権限がないので接続できない
---すべてのユーザーは権限が付与され付与された権限のことしかできない
---TESTユーザーも使用するための権限を付与してあげなければならない

SQL> CONN sys/manager AS SYSDBA
接続されました。
SQL>
SQL> GRANT connect, resource to TEST;

権限付与が成功しました。

SQL> CONN TEST/TEST
接続されました。
SQL>


QLOOKアクセス解析