作業系統管理角色

tonywi888發表於2007-11-01

簡要描述一下如何使用作業系統管理角色。

首先,角色的建立已經給角色授予相應的許可權必須在資料庫中完成。只有給使用者授權角色的操作是由作業系統完成。

其次,使用者具有的角色是由作業系統的profile檔案(或使用者所在的組)決定的,只和作業系統使用者有關而與oracle的登陸使用者無關,以sysdba身份等錄除外。

使用作業系統管理角色,需要把初始化引數OS_ROLES設定為TRUE,然後重起oracle。

注意一點,一旦設定了OS_ROLES=TRUE,以前給使用者授權的所有角色都無效了。

SQL> conn yangtk/yangtk@test
已連線。
SQL> show parameter os_roles

NAME TYPE VALUE
------------------------------------ ----------- -------------------------
os_roles boolean FALSE
remote_os_roles boolean FALSE
SQL> ALTER SYSTEM SET OS_ROLES = TRUE SCOPE = SPFILE;

系統已更改。

SQL> CONN /@TEST AS SYSDBA
已連線。
SQL> SHUTDOWN
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> STARTUP
ORACLE 例程已經啟動。

Total System Global Area 89201304 bytes
Fixed Size 453272 bytes
Variable Size 62914560 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
資料庫裝載完畢。
資料庫已經開啟。

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


警告: 您不再連線到 ORACLE。

由於設定了OS_ROLES=TRUE,所以以前授權的dba角色失效了。

下面在作業系統中給使用者授權

Windows中 控制皮膚->計算機管理->本地使用者和組->組建立一個組 ora_test_dba_da,把當前使用者YANGTINGKUNytk加入(YANGTINGKUN為主機名,ytk為當前使用者名稱)。

組的名稱的每一部分都是有其固定含義的,他們之間用下劃線‘_’分隔。名稱必須以“ora”開頭,接下來的“test”表明資料庫的SID是test,由於作業系統可能對應多個資料庫,因此必須標明這個角色在那個資料庫中生效(這裡小心,對於unix系統,這個標識可是大小寫敏感的),然後跟著“dba”的是角色名,是在資料庫中建立的,並準備透過作業系統給使用者授權的角色。最後的“d”和“a”是可選引數,“d”表示這個角色是使用者的預設角色,使用者一旦登陸就具有的角色,如果沒有設定“d”,則使用者登陸後必須使用set role才能使用改角色。“a”表示admin option,即使用者具有管理該角色的許可權,可以把該角色授權給其他角色(只能授權給角色,不能是使用者,在OS_ROLES=TRUE的情況下,在oracle中給使用者授予角色是無效的)。

建好組之後,現在重新連線一下

SQL> CONN YANGTK/YANGTK@TEST
已連線。
SQL> select * from session_roles;

ROLE
------------------------------
DBA
SELECT_CATALOG_ROLE
HS_ADMIN_ROLE
EXECUTE_CATALOG_ROLE
DELETE_CATALOG_ROLE
EXP_FULL_DATABASE
IMP_FULL_DATABASE
GATHER_SYSTEM_STATISTICS
WM_ADMIN_ROLE

已選擇9行。

SQL> conn yangtk/yangtk@test
已連線。
SQL> select * from session_roles;

ROLE
------------------------------
DBA
SELECT_CATALOG_ROLE
HS_ADMIN_ROLE
EXECUTE_CATALOG_ROLE
DELETE_CATALOG_ROLE
EXP_FULL_DATABASE
IMP_FULL_DATABASE
GATHER_SYSTEM_STATISTICS
WM_ADMIN_ROLE

已選擇9行。

SQL> create role test_role;

角色已建立

SQL> grant dba to test_role;

授權成功。

SQL> grant dba to yangtk;
grant dba to yangtk
*
ERROR 位於第 1 行:
ORA-01956: 使用 OS_ROLES 時命令無效

可見,作業系統授權的角色已經生效。而且,角色的獲得與登陸oracle的使用者無關(sys除外)。

下面簡單看一個unix下面的例子。

已經將os_roles設定為true

SQL> conn / as sysdba
Connected.
SQL> show parameter os_roles

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
os_roles boolean TRUE
remote_os_roles boolean FALSE
SQL> create role role1;

Role created.

Elapsed: 00:00:01.32
SQL> grant create table to role1;

Grant succeeded.

Elapsed: 00:00:00.02
SQL> grant create session to yangtk;

Grant succeeded.

Elapsed: 00:00:14.43
SQL> grant unlimited tablespace to yangtk;

Grant succeeded.

Elapsed: 00:00:00.04
SQL> conn yangtk/yangtk
Connected.
SQL> create table a (id number);
create table a (id number)
*
ERROR at line 1:
ORA-01031: insufficient privileges


Elapsed: 00:00:09.21

SQL> exit
Disconnected from Oracle9i Enterprise Edition Release 9.2.0.4.0 - 64bit Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.4.0 - Production
$
$ su -
Password:
Sun Microsystems Inc. SunOS 5.8 Generic Patch October 2001
Sourcing //.profile-EIS.....
yangtk/yangtk@test # groupadd ora_test_role1
UX: groupadd: ora_test_role1 name too long.
UX: groupadd: ora_test_role1 name should be all lower case or numeric.
yangtk/yangtk@test # groups oracle
dba
yangtk/yangtk@test # vi /etc/group
"/etc/group" 18 lines, 309 characters
root::0:root
other::1:
bin::2:root,bin,daemon
sys::3:root,bin,sys,adm
adm::4:root,adm,daemon
uucp::5:root,uucp
mail::6:root
tty::7:root,tty,adm
lp::8:root,lp,adm
nuucp::9:root,nuucp
staff::10:
daemon::12:root,daemon
sysadmin::14:
nobody::60001:
noaccess::60002:
nogroup::65534:
dba::101:
ora_test_role1::102:oracle
~
~
~
~
~
~
~
~
~
~
:q
yangtk/yangtk@test # groups oracle
dba ora_test_role1
yangtk/yangtk@test # exit
$ su - oracle
Password:
Sun Microsystems Inc. SunOS 5.8 Generic Patch October 2001
You have mail.
$ sqlplus yangtk/yangtk

SQL*Plus: Release 9.2.0.4.0 - Production on Wed Nov 17 17:31:56 2004

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.


Connected to:
Oracle9i Enterprise Edition Release 9.2.0.4.0 - 64bit Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.4.0 - Production

SQL> select * from session_roles;

no rows selected

Elapsed: 00:00:00.09
SQL> create table b (id number);
create table b (id number)
*
ERROR at line 1:
ORA-01031: insufficient privileges


Elapsed: 00:00:02.51
SQL> set role role1;

Role set.

Elapsed: 00:00:00.01
SQL> create table b (id number);

Table created.

Elapsed: 00:00:00.22
SQL> select * from session_roles;

ROLE
------------------------------
ROLE1

Elapsed: 00:00:00.02

Unix下的授權和windows下的大同小異。

這個例子中建立一個沒有“d”選項的組,因此登陸到oracle後,必須set role才能具有該角色

[@more@]

轉載http://blog.itpub.net/post/468/5415

謝謝yangtingkun

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8570952/viewspace-980382/,如需轉載,請註明出處,否則將追究法律責任。

相關文章