操作系统管理角色

简要描述一下如何使用操作系统管理角色。

首先,角色的创建已经给角色授予相应的权限必须在数据库中完成。只有给用户授权角色的操作是由操作系统完成。

其次,用户具有的角色是由操作系统的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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值