| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

差分

ナビゲーションに移動 検索に移動
編集の要約なし
==[[Oracle Database10g ユーザの管理]]==
[[Oracle]] | [[Oracle Database10g]] |
{{include_html [[banner_html]], "!Database"}}
===ユーザの作成===
====[http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/server.102/B19201-02/statements_8.html#14522 CREATE USER]====
/
====IDENTIFIED IDENTIF[[IE]]D { BY パスワード | EXTERNALLY | GLOBALLY AS '外部名' }====
=====パスワード認証=====
*データベースでパスワード管理
*プロファイルで制御可能
=====EXTERNALLYEXTE[[R]]NALLY(OS認証)=====
*OSまたはネットワーク認証サービスでパスワード管理
*ユーザー名には OS_AUTHENT_PREFIX 初期化パラメータで指定されたプレフィックスをつける[[初期化パラメータ]]で指定されたプレフィックスをつける
*初期化パラメータファイルの[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;
権限付与が成功しました。
$ sqlplus /
[[SQL]]*Plus: Release 10.2.0.1.0 - Production on Wed Jul 1 10:17:58 2009
Copyright (c) 1982, 2005, [[Oracle]]. All rights reserved.
Connected to:
Oracle [[Database ]] 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
[[SQL]]>
*成功
=====GLOBALLY(グローバル認証)=====
*[[Oracle ]] Advanced Securityオプションによる認証方式*バイオメトリック、X.509証明書、トークンデバイス、Oracle 509証明書、トークンデバイス、[[Oracle]] Internet Directory(LDAP準拠)を使用してユーザ識別
====ACCOUNT {LOCK | UNLOCK}====
*アカウントをロックしておくことができる(デフォルトはアンロック)
[[SQL]]> conn exam/abc123@oradb1 ERRORE[[R]][[R]]O[[R]]: ORAO[[R]]A-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;
ユーザーが変更されました。
====PASSWORD EXPIREPASSWO[[R]]D EXPI[[R]]E====
*最初のログイン時にパスワード変更を促される。
[[File:0932_ora_pass_expire.jpg]]
=====システム権限=====
*ただし、これだけでは、SQL Plusからログインできない。ただし、これだけでは、[[SQL Plus]]からログインできない。 [[SQL]]> conn exam/abc123@oradb1 ERRORE[[R]][[R]]O[[R]]: ORA-01045: user EXAM lacks CREATE SESSION privilegepri[[vi]]lege; logon denied
*CREATE C[[R]]EATE SESSIONシステム権限を付与 [[SQL]]> conn system/xxxxx@oradb1
接続されました。
[[SQL]]> grant create session to exam;
権限付与が成功しました。
*接続はできるようになる
[[SQL]]> conn exam/abc123@oradb1
接続されました。
=====データベースの設定値を確認=====
[[SQL]]> select property_name, property_value from database_properties
2 where property_name like 'DEFAULT%'
3 /
PROPERTY_NAME P[[R]]OPE[[R]]TY_NAME PROPERTY_VALUEP[[R]]OPE[[R]]TY_VALUE
------------------------------------------------------------ -------------------------
DEFAULT_TEMP_TABLESPACE TEMP
DEFAULT_PERMANENT_TABLESPACE DEFAULT_PE[[R]]MANENT_TABLESPACE USERSUSE[[R]]S
DEFAULT_TBS_TYPE SMALLFILE
====TEMPORARY TEMPO[[R]]A[[R]]Y TABLESPACE 一時表領域名====
*一時セグメントが確保される表領域または表領域グループを指定。
*省略した場合、データベースのデフォルトの一時表領域に格納される。
====PROFILEP[[R]]OFILE====
*ユーザーに割り当てるプロファイルを指定。
*プロファイルによって、ユーザーが使用できるデータベース・リソース容量が制限。
*[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;
システムが変更されました。
!内容
|-
|SESSIONS_PER_USERSESSIONS_PE[[R]]_USE[[R]]
|ユーザーを制限する同時セッション数。
|-
|CPU_PER_SESSIONCPU_PE[[R]]_SESSION
|1セッション当たりのCPU時間制限。100分の1秒単位。
|-
|CPU_PER_CALLCPU_PE[[R]]_CALL
|1コール(解析、実行またはフェッチ)当たりのCPU時間制限。100分の1秒単位。
|-
|セッション中の連続的な非活動時間の長さを制限。分単位。長時間実行の問合せなどの処理は、この制限を受けない。
|-
|LOGICAL_READS_PER_SESSIONLOGICAL_[[R]]EADS_PE[[R]]_SESSION
|1セッション中に読み込まれるデータ・ブロックの数の制限を指定。
|-
|LOGICAL_READS_PER_CALL
|SQL文(解析、実行またはフェッチ)を処理する1つのコールで読み込まれるデータ・ブロックの数の制限を指定。[[SQL]]文(解析、実行またはフェッチ)を処理する1つのコールで読み込まれるデータ・ブロックの数の制限を指定。
|-
|PRIVATE_SGAP[[R]]IVATE_SGA
|1つのセッションでシステム・グローバル領域(SGA)の共有プール内に割り当てることができるプライベート領域の大きさを指定。
|-
|COMPOSITE_LIMIT[[COM]]POSITE_LIMIT
|1セッション当たりのリソースの総コストをサービス単位で指定します。サービス単位の合計は、CPU_PER_SESSION、CONNECT_TIME、LOGICAL_READS_PER_SESSIONおよびPRIVATE_SGAの重み付き合計として計算。
|-
=====制限違反の例=====
[[SQL]]> conn exam/abc123@oradb1 ERRORE[[R]][[R]]O[[R]]: ORAO[[R]]A-02391: exceeded simultaneous SESSIONS_PER_USER SESSIONS_PE[[R]]_USE[[R]] limit
[[SQL]]> select * from all_tables;
select * from all_tables
*
行1でエラーが発生しました。:
ORA-00604: error occurred at recursive [[SQL ]] level 1 ORAO[[R]]A-02393: exceeded call limit on CPU usage
[[SQL]]> select table_name from all_tables;
select table_name from all_tables
*
行1でエラーが発生しました。:
ORAO[[R]]A-02396: exceeded maximum idle time, please connect again
===[http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/server.102/B19201-02/statements_9.html#25446 権限の付与]===
*Oracleでは権限は、データベースに対して行う操作の権限である、システム権限と、個々のオブジェクト操作の権限であるオブジェクト権限の2つに分類できる。[[Oracle]]では権限は、データベースに対して行う操作の権限である、システム権限と、個々のオブジェクト操作の権限であるオブジェクト権限の2つに分類できる。
*システム権限はデータベース管理者が付与し、オブジェクト権限はオブジェクト所有者が付与する。
====システム権限====
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 C[[R]]EATE TABLE
|権限を付与したスキーマ内での表の作成
|-
|CREATE C[[R]]EATE ANY TABLE
|任意のスキーマ内での表の作成.表を定義するための割当て制限が必要
|-
|INSERT INSE[[R]]T ANY TABLE
|任意のスキーマ内の表またはビューへの行の挿入
|-
|任意のスキーマ内の表またはビューの行の更新
|-
|CREATE C[[R]]EATE TABLESPACE
|表領域の作成
|-
|任意の表領域の無制限な使用。設定されている任意の割当て制限を上書き。このシステム権限をロールに付与することはできません。
|-
|CREATE USERC[[R]]EATE USE[[R]]
|ユーザーの作成
|-
|ALTER USERALTE[[R]] USE[[R]]
|任意のユーザーの変更
|-
|※1参照
|-
|SYSOPERSYSOPE[[R]]
|※2参照
|-
|}
=====SYSDBA システム権限(※1)=====
*STARTUPおよびSHUTDOWN操作の実行STA[[R]]TUPおよびSHUTDOWN操作の実行*ALTER DATABASE(オープン、マウント、バックアップまたはキャラクタ・セットの変更)DATABASE(オープン、マウント、[[バックアップ]]またはキャラクタ・セットの変更)*CREATE C[[R]]EATE DATABASE*ARCHIVELOGおよびRECOVERYA[[R]]CHIVELOGおよび[[R]]ECOVE[[R]]Y*CREATE C[[R]]EATE SPFILE*RESTRICTED [[R]]EST[[R]]ICTED SESSION権限を含みます。
=====SYSOPER SYSOPE[[R]] システム権限(※2)=====*STARTUPおよびSHUTDOWN操作の実行STA[[R]]TUPおよびSHUTDOWN操作の実行*ALTER DATABASE(オープン、マウントまたはバックアップ)DATABASE(オープン、マウントまたは[[バックアップ]])*ARCHIVELOGおよびRECOVERYA[[R]]CHIVELOGおよび[[R]]ECOVE[[R]]Y*CREATE C[[R]]EATE SPFILE*RESTRICTED [[R]]EST[[R]]ICTED SESSION権限を含みます。
=====CREATE C[[R]]EATE TABLE 権限の付与=====
*テーブル作成ができない
[[SQL]]> show user
ユーザーは"EXAM"です
[[SQL]]> create table test(id number, name char(10));
create table test(id number, name char(10))
*
行1でエラーが発生しました。:
ORA-01031: insufficient privilegespri[[vi]]leges
*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));
表が作成されました。
*[http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/server.102/B19201-02/statements_9.html#27717 ユーザーに対してシステム権限を付与する]
=====Roleおよびユーザーに付与されているシステム権限の一覧[[R]]oleおよびユーザーに付与されているシステム権限の一覧=====*DBA_SYS_PRIVSを使用するDBA_SYS_P[[R]]IVSを使用する [[SQL]]> select * from dba_sys_privs
2 where grantee = 'EXAM'
3 /
GRANTEE GR[[ANT]]EE PRIVILEGE
------------------------------------------------------------ ------------------
EXAM CREATE C[[R]]EATE SESSION EXAM CREATE C[[R]]EATE TABLE
====オブジェクト権限====
|UPDATE文での表のデータの変更。
|-
|INSERTINSE[[R]]T|INSERT文での表への新しい行の追加。 INSE[[R]]T文での表への新しい行の追加。
|-
|DELETE
|DELETE文での表の行の削除。
|-
|ALTERALTE[[R]]|ALTER ALTE[[R]] TABLE文での表定義の変更。
|-
|}
|UPDATE文でのビューのデータの変更。
|-
|INSERTINSE[[R]]T|INSERT文でのビューへの新しい行の追加。INSE[[R]]T文でのビューへの新しい行の追加。
|-
|DELETE
|DELETE文でのビューの行の削除。
|-
|UNDERUNDE[[R]]
|ビューのサブビューの作成。
|-
|-
|SELECT
|CURRVAL疑似列およびNEXTVAL疑似列を使用した順序の値の検査および増分。CU[[R]][[R]]VAL疑似列およびNEXTVAL疑似列を使用した順序の値の検査および増分。
|-
|ALTERALTE[[R]]|ALTER ALTE[[R]] SEQUENCE文での順序定義の変更。
|-
|}
=====付与例=====
*exam2ユーザを作成し、接続し、examユーザのtest表をselect
[[SQL]]> select * from exam.test;
select * from exam.test
*
行1でエラーが発生しました。:
ORA-00942: table or view [[vi]]ew does not exist
*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')
*
行1でエラーが発生しました。:
ORA-01031: insufficient privilegespri[[vi]]leges
*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
*
行1でエラーが発生しました。:
ORA-01031: insufficient privilegespri[[vi]]leges
[[SQL]]> delete from exam.test;
1行が削除されました。
*権限の取り消し
[[SQL]]> revoke all on test from exam2;
取消しが成功しました。
!内容
|-
|DBA_TAB_PRIVSDBA_TAB_P[[R]]IVS
|オブジェクト権限(列固有の権限を除く)
|-
|DBA_COL_PRIVSDBA_COL_P[[R]]IVS
|列固有の権限
|-
|}
[[SQL]]> select table_name, privilege, grantable from dba_tab_privs 2 where grantee = 'EXAM_MANAGEREXAM_MANAGE[[R]]'
3 /
TABLE_NAME PRIVILEGE GRANTAGR[[ANT]]A
------------ ---------------------- ------
[[TEST ]] FLASHBACK NO [[TEST ]] DEBUG NO [[TEST ]] QUERY REWRITE NO [[TEST ]] ON COMMIT REFRESH NO [[TEST ]] UPDATE NO [[TEST ]] SELECT NO [[TEST ]] INSERT NO [[TEST ]] DELETE NO [[TEST ]] ALTER NO
====ロール====
*目的ごとに作成した権限のセット
*WITH ADMIN OPTIONを指定し、他のユーザに付与することを許可できる
CREATE ROLE C[[R]]EATE [[R]]OLE ロール名
[IDENTIFIED { BY パスワード | EXTERNALLY | GLOBALLY AS '外部名' }
=====例=====
*ロールの作成
[[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
*
行1でエラーが発生しました。:
ORA-00942: table or view [[vi]]ew does not exist
*ロールを有効にする
[[SQL]]> set role exam_manager identified by abc123;
ロールが設定されました。
*表操作可能に
[[SQL]]> insert into exam.test values(3,'ghi');
1行が作成されました。
=====現在使用可能なRole一覧現在使用可能な[[R]]ole一覧=====*SESSION_ROLESデータディクショナリビューに問い合わせるSESSION_[[R]]OLESデータディクショナリビューに問い合わせる [[SQL]]> set role exam_manager identified by north123;
ロールが設定されました。
[[SQL]]> select * from session_roles;
ROLE[[R]]OLE
------------------------------------------------------------
EXAM_MANAGEREXAM_MANAGE[[R]]
----
{{include_html [[banner_html]], "!Oracle"}}

案内メニュー