第3章 システム権限(補足)

1.権限とは?

すべて重要!!

[補足]

オブジェクト権限でないものがシステム権限である。

2.システム権限の付与

[構文]

GRANT システム権限名 [ , システム権限名 , ・・・ ]
TO ユーザ名 [ , ユーザ名 , ・・・ ]
[ WITH ADMIN OPTION ];

※WITH ADMIN OPTIONについては3-5で説明

■システム権限は全部で80種類以上およそ126ある。

例)
表を作る権限(CREATE TABLE権限)
ユーザを作る権限(CREATE USER権限)
セッションを開始する(ログインする)権限(CREATE SESSION権限)
など

例えばユーザsakuraにCREATE SESSION権限を与えるには、データベース管理ユーザで次のSQLを実行する。

GRANT create session TO sakura;

■ユーザ名にPUBLICを指定すると、すべてのユーザに権限を与えることができる。PUBLICに与えた権限は、作成済みのユーザだけでなく、それ以降に作成するユーザにも適応する。

例)
ユーザがデータベースに接続するにはCREATE SESSION権限が必要だが、ユーザを作成するたびにCREATE SESSION権限を与えるのは効率が悪い。
CREATE USER ユーザA IDENTIFIED BY パスワードA;
GRANT create session TO ユーザA;
CREATE USER ユーザB IDENTIFIED BY パスワードB;
GRANT create session TO ユーザA;
CREATE USER ユーザC IDENTIFIED BY パスワードC;
GRANT create session TO ユーザA;

そこで、PUBLICに対してCREATE SESSION権限を与えておけば、今後作成するユーザに対して権限を与える必要がなくなる。
GRANT create session TO public;
CREATE USER ユーザA IDENTIFIED BY パスワードA;
CREATE USER ユーザB IDENTIFIED BY パスワードB;
CREATE USER ユーザC IDENTIFIED BY パスワードC;

3.システム権限の確認

■現在接続中のユーザが持っているシステム権限を調べるには、データ・ディクショナリSESSION_PRIVSを参照する。

実習用ユーザでログインし、自分が持つシステム権限を確認しよう。

SQL> CONNECT om??/pass@136ora816
SQL> SELECT * FROM session_privs;

4.システム権限の取消

[構文]

REVOKE システム権限名 [ , システム権限名 , ・・・ ]
FROM ユーザ名 [ , ユーザ名 , ・・・ ];

■GRANT システム権限 TO ユーザ名;で与えたシステム権限を取り消す(剥奪する)にはREVOKEコマンドを使用する。

例)、ユーザsakuraに与えたCREATE TABLE権限を取り消す
REVOKE create table FROM sakura;
注意!!
GRANTは、〜「TO」ユーザ名
REVOKEは、〜「FROM」ユーザ名

■ユーザ名にPUBLICを指定すると、PUBLICに与えた権限(GRANT 〜 TO public;)を取り消すことができる

5.システム権限のオプション

すべて重要!!

[補足]

確認問題

問題1

PUBLICを用いて付与したシステム権限を、特定のユーザだけから取り出すことはできる?
(「できる」「できない」で答えよ)

問題2

次のようにユーザ設定の処理を行った。

SQL> CONNECT system/manager
接続されました。
SQL> CREATE USER aaa IDENTIFIED BY aaa;
ユーザーが作成されました。
SQL> CREATE USER bbb IDENTIFIED BY bbb;
ユーザーが作成されました。
SQL> GRANT create session, create sequence TO aaa;
権限付与が成功しました。
SQL> GRANT create session, alter session TO public;
権限付与が成功しました。
SQL> REVOKE alter session FROM public;
取消が成功しました。

この後、a〜fのように処理を続けるが、それぞれの処理でエラーになるものを答えよ。

  1. SQL> CONNECT aaa/aaa
  2. SQL> ALTER SESSION SET NLS_DATA_FORMAT='YYYY/MM/DD';
  3. SQL> CREATE SEQUENCE ss1;
  4. SQL> CONNECT bbb/bbb
  5. SQL> ALTER SESSION SET NLS_DATA_FORMAT='YYYY/MM/DD';
  6. SQL> CREATE SEQUENCE ss1;

[ TOP ]