Oracle⽤户,⾓⾊,权限等
Oracle ⽤户,⾓⾊,权限等
权限管理是 Oracle 系统的精华,不同⽤户登录到同⼀数据库中,可能看到不同数量的表,拥有不同的权限。Oracle 的权限分为系统权限和数据对象权限,共⼀百多种,如果单独对⽤户授权,很囧,有⼀些⽤户需要的权限是相同的,就把这些⽤户归为同⼀类——某种⾓⾊,通过设⽴⼀些有预定权限的⾓⾊简化和明确授权操作,⾓⾊出现的动机也就是为了简化权限管理,它是权限的集合。⼀般做法是:系统把权限赋给⾓⾊,然后把⾓⾊赋给⽤户,当然也可以直接把某权限赋给⽤户。Oracle 提供细粒度的权限,可以对表的某⼀列单独设置权限,可以对某⽤户查询某表⾃动增添 where 限制条件。
权限允许⽤户访问属于其它⽤户的对象或执⾏程序,ORACLE系统提供三种权限:Object 对象级、System 系统级、Role ⾓⾊级。这些权限可以授予给⽤户、特殊⽤户public或⾓⾊,如果授予⼀个权限给特殊⽤户"Public"(⽤户public是oracle预定义的,每个⽤户享有这个⽤户享有的权限),那么就意味作将该权限授予了该数据库的所有⽤户。对管理权限⽽⾔,⾓⾊是⼀个⼯具,权限能够被授予给⼀个⾓⾊,⾓⾊也能被授予给另⼀个⾓⾊或⽤户。⽤户可以通过⾓⾊继承权限,除了管理权限外⾓⾊服务没有其它⽬的。权限可以被授予,也可以⽤同样的⽅式撤销。
Oracle 的⾓⾊存放在表 dba_roles 中,某⾓⾊包含的系统权限存放在 dba_sys_privs 中,包含的对象权限
存放在 dba_tab_privs 中。
下⾯是“⾓⾊”、“⽤户”和“权限”的互查:
1. ⽤户
例:
@>conn system/888888
Connected.
SYSTEM@userdata>create user user50 identified by user50;
User created.
SYSTEM@userdata>grant connect,resource to user50;
Grant succeeded.
查看当前登录⽤户拥有的所有⾓⾊和系统权限
USER50@userdata>select*from session_privs;
PRIVILEGE
------------------------------------------------------------------------------------------------------------------------
CREATE SESSION
UNLIMITED TABLESPACE
CREATE TABLE
CREATE CLUSTER
CREATE SEQUENCE
CREATE PROCEDURE
CREATE TRIGGER
CREATE TYPE
CREATE OPERATOR
CREATE INDEXTYPE
10 rows selected.
USER50@userdata>select*from role_sys_privs;
ROLE PRIVILEGE ADMIN_OPT
---------------- ------------------------ ---------
RESOURCE CREATE SEQUENCE NO
RESOURCE CREATE TRIGGER NO
RESOURCE CREATE CLUSTER NO
RESOURCE CREATE PROCEDURE NO
RESOURCE CREATE TYPE NO
CONNECT CREATE SESSION NO
RESOURCE CREATE OPERATOR NO
RESOURCE CREATE TABLE NO
RESOURCE CREATE INDEXTYPE NO
9 rows selected.
查看某⼀⽤户所拥有的⾓⾊和系统权限
SYSTEM@userdata>select*from dba_role_privs where GRANTEE='USER50';
GRANTEE GRANTED_ROLE ADMIN_OPT DEFAULT_R
------------------------------ -------------------- --------- ---------
USER50 RESOURCE NO YES
oracle 新建用户USER50 CONNECT NO YES
SYSTEM@userdata>select*from dba_sys_privs where GRANTEE='USER50';
GRANTEE PRIVILEGE ADMIN_OPT
------------------------------ ------------------------------ ---------
USER50 UNLIMITED TABLESPACE NO
查看某⼀⽤户拥有的对象权限
SYSTEM@userdata>grant select p to user50;
SYSTEM@userdata>select*from dba_tab_privs where GRANTEE='USER50';
GRANTEE OWNER TABLE_NAME GRANTOR PRIVILEGE GRANTABLE HIERARCHY
-------------------- --------------- --------------- --------------- --------------- --------- ---------
USER50 SCOTT EMP SCOTT SELECT NO NO
2. 权限
系统权限:系统规定⽤户使⽤数据库的权限。(系统权限是对⽤户⽽⾔)。
对象权限:某种权限⽤户对其它⽤户的表或视图的存取权限。(是针对表或视图⽽⾔的)。
2.1. 系统权限管理
2.1.1 系统权限分类
DBA: 拥有全部特权,是系统最⾼权限,只有DBA才可以创建数据库结构。
RESOURCE:拥有Resource权限的⽤户只可以创建实体,不可以创建数据库结构。
CONNECT:拥有Connect权限的⽤户只可以登录Oracle,不可以创建实体,不可以创建数据库结构。
对于普通⽤户:授予connect, resource权限。
对于DBA管理⽤户:授予connect,resource, dba权限。
2.1.2 系统权限授权命令
[系统权限只能由DBA⽤户授出:sys, system]
授权命令:SQL> grant connect, resource, dba to ⽤户名1 [,⽤户名2]...;
[普通⽤户通过授权可以具有与system相同的⽤户权限,但永远不能达到与sys⽤户相同的权限,system⽤户的权限也可以被回收。] 2.1.3.权限相关的视图
与权限,⾓⾊相关的视图⼤概有下⾯这些:
DBA_SYS_PRIVS: 查询某个⽤户所拥有的系统权限
USER_SYS_PRIVS: 当前⽤户所拥有的系统权限
SESSION_PRIVS: 当前⽤户所拥有的全部权限
ROLE_SYS_PRIVS: 某个⾓⾊所拥有的系统权限
注意: 要以SYS⽤户登陆查询这个视图,否则返回空.
ROLE_ROLE_PRIVS: 当前⾓⾊被赋予的⾓⾊
SESSION_ROLES: 当前⽤户被激活的⾓⾊
USER_ROLE_PRIVS: 当前⽤户被授予的⾓⾊
另外还有针对表的访问权限的视图:
TABLE_PRIVILEGES
ALL_TAB_PRIVS
ROLE_TAB_PRIVS: 某个⾓⾊被赋予的相关表的权限
3. ⾓⾊
3.1 何为⾓⾊
⾓⾊。⾓⾊是⼀组权限的集合,将⾓⾊赋给⼀个⽤户,这个⽤户就拥有了这个⾓⾊中的所有权限。
3.2 系统预定义⾓⾊
预定义⾓⾊是在数据库安装后,系统⾃动创建的⼀些常⽤的⾓⾊。下介简单的介绍⼀下这些预定⾓⾊。⾓⾊所包含的权限可以⽤以下语句查询:
sql>select * from role_sys_privs where role='⾓⾊名';
1.CONNECT, RESOURCE, DBA
这些预定义⾓⾊主要是为了向后兼容。其主要是⽤于数据库管理。oracle建议⽤户⾃⼰设计数据库管理和安全的权限规划,⽽不要简单的使⽤这些预定⾓⾊。将来的版本中这些⾓⾊可能不会作为预定义⾓⾊。
2.DELETE_CATALOG_ROLE, EXECUTE_CATALOG_ROLE, SELECT_CATALOG_ROLE
这些⾓⾊主要⽤于访问数据字典视图和包。
3.EXP_FULL_DATABASE, IMP_FULL_DATABASE
这两个⾓⾊⽤于数据导⼊导出⼯具的使⽤。
4.AQ_USER_ROLE, AQ_ADMINISTRATOR_ROLE
AQ:Advanced Query。这两个⾓⾊⽤于oracle⾼级查询功能。
5. SNMPAGENT
⽤于oracle enterprise manager和Intelligent Agent
6.RECOVERY_CATALOG_OWNER
⽤于创建拥有恢复库的⽤户。关于恢复库的信息,参考oracle⽂档《Oracle9i User-Managed Backup and Recovery Guide》
7.HS_ADMIN_ROLE
A DBA using Oracle's heterogeneous services feature needs this role to access appropriate tables in the data dictionary.
3.3 管理⾓⾊
1.建⼀个⾓⾊
sql>create role role1;
2.授权给⾓⾊
sql>grant create any table,create procedure to role1;
3.授予⾓⾊给⽤户
sql>grant role1 to user1;
4.查看⾓⾊所包含的权限
sql>select * from role_sys_privs;
5.创建带有⼝令的⾓⾊(在⽣效带有⼝令的⾓⾊时必须提供⼝令)
sql>create role role1 identified by password1;
6.修改⾓⾊:是否需要⼝令
sql>alter role role1 not identified;
sql>alter role role1 identified by password1;
7.设置当前⽤户要⽣效的⾓⾊
(注:⾓⾊的⽣效是⼀个什么概念呢?假设⽤户a有b1,b2,b3三个⾓⾊,那么如果b1未⽣效,则b1所包含的权限对于a来讲是不拥有的,只有⾓⾊⽣效了,⾓⾊内的权限才作⽤于⽤户,最⼤可⽣效⾓⾊数由参数MAX_ENABLED_ROLES设定;在⽤户登录后,oracle将所有直接赋给⽤户的权限和⽤户默认⾓⾊中的权限赋给⽤户。)
sql>set role role1;//使role1⽣效
sql>set role role,role2;//使role1,role2⽣效
sql>set role role1 identified by password1;//使⽤带有⼝令的role1⽣效
sql>set role all;//使⽤该⽤户的所有⾓⾊⽣效
sql>set role none;//设置所有⾓⾊失效
sql>set role all except role1;//除role1外的该⽤户的所有其它⾓⾊⽣效。
sql>select * from SESSION_ROLES;//查看当前⽤户的⽣效的⾓⾊。
8.修改指定⽤户,设置其默认⾓⾊
sql>alter user user1 default role role1;
sql>alter user user1 default role all except role1;
详见oracle参考⽂档
9.删除⾓⾊
sql>drop role role1;
⾓⾊删除后,原来拥⽤该⾓⾊的⽤户就不再拥有该⾓⾊了,相应的权限也就没有了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论