OS_ROLES
属性 描述
参数类型 Boolean
默认值 false
是否可动态修改 No
取值范围 true | false
OS_ROLES定义了是由Oracle还是操作系统来验证和管理每个用户的角色。
设置值的说明:
- TRUE
全部由操作系统管理数据库所有用户的角色分配。当用户尝试创建一个会话,使用操作系统的角色验证,初始化用户名称的安全域。用户可以随后启用由操作系统指定的,与参数MAX_ENABLED_ROLES一样多的角色。
Oralce以前分配的角色,操作系统都会忽略。
- FALSE
Oracle自身验证和管理角色。
角色的创建已经给角色授予相应的权限必须在数据库中完成。只有给用户授权角色的操作是由操作系统完成。用户具有的角色是由操作系统的profile文件(或用户所在的组)决定的,只和操作系统用户有关而与oracle的登陆用户无关,以sysdba身份等录除外。
以linux为例,数据库是9.2.0.8。
修改/etc/group,增加一条:
ora_ora9i_dba_da::601:oracle
组的名称的每一部分都是有其固定含义的,他们之间用下划线'_'分隔。名称必须以"ora"开头,接下来的"ora9i"表明数据库的SID是ora9i,由于操作系统可能对应多个数据库,因此必须标明这个角色在那个数据库中生效(这里小心,对于unix系统,这个标识可是大小写敏感的),然后跟着"dba"的是角色名,是在数据库中建立的,并准备通过操作系统给用户授权的角色。最后的"d"和"a"是可选参数,"d"表示这个角色是用户的默认角色,用户一旦登陆就具有的角色,如果没有设置"d",则用户登陆后必须使用set role才能使用改角色。"a"表示admin option,即用户具有管理该角色的权限,可以把该角色授权给其他角色(只能授权给角色,不能是用户,在OS_ROLES=TRUE的情况下,在oracle中给用户授予角色是无效的)。
创建一个用户osess,只有create session的权限。
SQL> create user osess identified by osess;
User created.
SQL> grant create session to osess;
Grant succeeded.
在oracle用户下使用sqlplus连接数据库,发现osess自动获得了dba角色的权限。查看session_roles具有dba角色,但在dba_role_privs中并没有。
[oracle@ora9i ~]$ sqlplus osess/osess
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
SQL> select * from dba_role_privs where grantee='OSESS';
no rows selected
在ldy用户下使用sqlplus连接,只有create session的权限,其他什么角色都没有。
[ldy@ora9i ~]$ sqlplus osess/osess
SQL> select * from session_roles;
no rows selected
SQL> select * from dba_role_privs where grantee='OSESS';
select * from dba_role_privs where grantee='OSESS'
*
ERROR at line 1:
ORA-00942: table or view does not exist
阅读(1944) | 评论(0) | 转发(0) |