==Oracle Database10g ユーザの管理==
[[Oracle][Oracle Database10g]]
{{include_html banner_html, "!Database"}}
===ユーザの作成===
*初期化パラメータファイルの[http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/server.102/B19228-03/initparams.htm#90315 REMOTE_LOGIN_PASSWORDFILE]をSHAREDにする
SQL> > alter system set remote_login_passwordfile = SHARED scope=spfile;
System altered.
*Oracle 再起動
SQL> > show parameters OS_AUTHENT_PREFIX;
NAME TYPE VALUE
*作成してみる
SQL> > create user ops$oracle
2 identified externally;
ユーザーが作成されました。
SQL> > grant create session to ops$oracle;
権限付与が成功しました。
With the Partitioning, OLAP and Data Mining options
SQL> >
*成功
=====GLOBALLY(グローバル認証)=====
====ACCOUNT {LOCK | UNLOCK}====
*アカウントをロックしておくことができる(デフォルトはアンロック)
SQL> > conn exam/abc123@oradb1
ERROR:
ORA-28000: the account is locked
*[http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/server.102/B19201-02/statements_4.html#14589 ALTER USER]で解除
SQL> > alter user exam account unlock;
ユーザーが変更されました。
=====システム権限=====
*ただし、これだけでは、SQL Plusからログインできない。
SQL> > conn exam/abc123@oradb1
ERROR:
ORA-01045: user EXAM lacks CREATE SESSION privilege; logon denied
*CREATE SESSIONシステム権限を付与
SQL> > conn system/xxxxx@oradb1
接続されました。
SQL> > grant create session to exam;
権限付与が成功しました。
*接続はできるようになる
SQL> > conn exam/abc123@oradb1
接続されました。
*データベースのデフォルトの表領域が指定されていない場合、SYSTEM表領域に格納。
<<blockquote>>ローカル管理の一時表領域(UNDO表領域を含む)またはディクショナリ管理の一時表領域は、ユーザーのデフォルトの表領域として指定できない。<</blockquote>>
*[http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/server.102/B19224-02/tspaces.htm#691776 表領域の管理]
=====データベースの設定値を確認=====
SQL> > select property_name, property_value from database_properties
2 where property_name like 'DEFAULT%'
3 /
*データベースのデフォルトの一時表領域が指定されていない場合は、SYSTEM表領域に格納される。
<<blockquote>>一時表領域で、標準ブロック・サイズである必要がある。<</blockquote>><<blockquote>>UNDO表領域または自動セグメント領域管理の表領域にできない。<</blockquote>>
====QUOTA {サイズ | UNLIMITED} ON 表領域名====
*複数の表領域に対して複数のQUOTA句を指定できる。
*UNLIMITEDを使用すると、表領域の領域を無制限に割り当て可能。
<<blockquote>>一時表領域には指定できない。<</blockquote>>
*[http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/server.102/B19201-02/statements_2.html#22628 ALTER SYSTEM] - リソース制限を使用可能に
SQL> > create profile limited limit
2 sessions_per_user 1
3 cpu_per_session 10
プロファイルが作成されました。
SQL> > alter user exam profile limited
2 ;
ユーザーが変更されました。
SQL> > alter system set resource_limit = true;
システムが変更されました。
=====制限違反の例=====
SQL> > conn exam/abc123@oradb1
ERROR:
ORA-02391: exceeded simultaneous SESSIONS_PER_USER limit
SQL> > select * from all_tables;
select * from all_tables
*
ORA-02393: exceeded call limit on CPU usage
SQL> > select table_name from all_tables;
select table_name from all_tables
*
GRANT システム権限名 [ PUBLIC [,・・・] [WITH ADMIN OPTION ,・・・] TO ユーザー名 ]
[[http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/server.102/B19201-02/statements_9.html#3445231 システム権限一覧]]
{|class="wikitable"
=====CREATE TABLE 権限の付与=====
*テーブル作成ができない
SQL> > show user
ユーザーは"EXAM"です
SQL> > create table test(id number, name char(10));
create table test(id number, name char(10))
*
*SYSTEMから権限付与
SQL> > show user
ユーザーは"SYSTEM"です。
SQL> > grant create table to exam with admin option;
権限付与が成功しました。
*表を作成
SQL> > show user
ユーザーは"EXAM"です。
SQL> > create table test(id number, name char(10));
表が作成されました。
=====Roleおよびユーザーに付与されているシステム権限の一覧=====
*DBA_SYS_PRIVSを使用する
SQL> > select * from dba_sys_privs
2 where grantee = 'EXAM'
3 /
=====付与例=====
*exam2ユーザを作成し、接続し、examユーザのtest表をselect
SQL> > select * from exam.test;
select * from exam.test
*
*examユーザから、exam2へtest表へのselect権限を付与
SQL> > grant select on test to exam2;
権限付与が成功しました。
*exam2ユーザで、select、および insert。insertは失敗する。
SQL> > select * from exam.test;
ID NAME
1 abc
SQL> > insert into exam.test values(2, 'def');
insert into exam.test values(2, 'def')
*
*exam2ユーザへtest表へのすべての権限をgrant optionつきで付与
SQL> > grant all on test to exam2 with grant option;
権限付与が成功しました。
*exam2でデータを削除してみる。truncateはできないが、deleteはできる
SQL> > truncate table exam.test;
truncate table exam.test
*
SQL> > delete from exam.test;
1行が削除されました。
*権限の取り消し
SQL> > revoke all on test from exam2;
取消しが成功しました。
|}
SQL> > select table_name, privilege, grantable from dba_tab_privs
2 where grantee = 'EXAM_MANAGER'
3 /
=====例=====
*ロールの作成
SQL> > conn system/abc123@oradb1
接続されました。
SQL> > create role exam_manager
2 identified by abc123
3 /
*ロールに権限を付与し、ロールをexam2に付与
SQL> > grant all on exam.test to exam_manager;
権限付与が成功しました。
SQL> > grant exam_manager to exam2;
権限付与が成功しました。
*これだけでは、exam2は、exam.test表を操作できない
SQL> > select * from exam.test;
select * from exam.test
*
*ロールを有効にする
SQL> > set role exam_manager identified by abc123;
ロールが設定されました。
*表操作可能に
SQL> > insert into exam.test values(3,'ghi');
1行が作成されました。
=====現在使用可能なRole一覧=====
*SESSION_ROLESデータディクショナリビューに問い合わせる
SQL> > set role exam_manager identified by north123;
ロールが設定されました。
SQL> > select * from session_roles;
ROLE