ラベル GRANT の投稿を表示しています。 すべての投稿を表示
ラベル GRANT の投稿を表示しています。 すべての投稿を表示

2013/08/14

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権限を持っている
QLOOKアクセス解析