简要描述一下如何使用操作系统管理角色。
首先,角色的创建已经给角色授予相应的权限必须在数据库中完成。只有给用户授权角色的操作是由操作系统完成。
其次,用户具有的角色是由操作系统的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/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/8570952/viewspace-980382/