Oracle⽤户、授权、⾓⾊管理
每个Oracle⽤户都有⼀个名字和⼝令,并拥有⼀些由其创建的表、视图和其他资源。Oracle⾓⾊(role)就是⼀组权限(privilege)(或者是每个⽤户根据其状态和条件所需的访问类型)。⽤户可以给⾓⾊授予或赋予指定的权限,然后将⾓⾊赋给相应的⽤户。⼀个⽤户也可以直接给其他⽤户授权。
Oracle 权限设置
⼀、权限分类:
系统权限:系统规定⽤户使⽤的权限。(系统权限是对⽤户⽽⾔)。
实体权限:某种权限⽤户对其它⽤户的表或视图的存取权限。(是针对表或视图⽽⾔的)。
⼆、系统权限管理:
1、系统权限分类:
DBA: 拥有全部特权,是系统最⾼权限,只有DBA才可以创建数据库结构。
RESOURCE:拥有Resource权限的⽤户只可以创建实体,不可以创建数据库结构。
CONNECT:拥有Connect权限的⽤户只可以登录Oracle,不可以创建实体,不可以创建数据库结构。
对于普通⽤户:授予connect, resource权限。
对于DBA管理⽤户:授予connect,resource, dba权限。
2、系统权限授权命令:
[系统权限只能由DBA⽤户授出:sys, system(最开始只能是这两个⽤户)]
授权命令:SQL> grant connect, resource, dba to ⽤户名1 [,⽤户名2]...;
[普通⽤户通过授权可以具有与system相同的⽤户权限,但永远不能达到与sys⽤户相同的权限,system⽤户的权限也可以被回收。]
例:
SQL> connect system/manager
SQL> Create user user50 identified by user50;
SQL> grant connect, resource to user50;
查询⽤户拥有哪⾥权限:
SQL> select * from dba_role_privs;
SQL> select * from dba_sys_privs;
SQL> select * from role_sys_privs;
删除⽤户:SQL> drop user ⽤户名 cascade; //加上cascade则将⽤户连同其创建的东西全部删除
3、系统权限传递:
增加WITH ADMIN OPTION选项,则得到的权限可以传递。
SQL> grant connect, resorce to user50 with admin option; //可以传递所获权限。
4、系统权限回收:系统权限只能由DBA⽤户回收
命令:SQL> Revoke connect, resource from user50;
说明:
1)如果使⽤WITH ADMIN OPTION为某个⽤户授予系统权限,那么对于被这个⽤户授予相同权限的所有⽤户来说,取消该⽤户的系统权限并不会级联取消这些⽤户的相同权限。
2)系统权限⽆级联,即A授予B权限,B授予C权限,如果A收回B的权限,C的权限不受影响;系统权限可以跨⽤户回收,即A可以直接收回C⽤户的权限。
三、实体权限管理
1、实体权限分类:select, update, insert, alter, index, delete, all //all包括所有权限
execute //执⾏存储过程权限
user01:
SQL> grant select, update, insert on product to user02;
SQL> grant all on product to user02;
user02:
SQL> select * from user01.product;
// 此时user02查user_tables,不包括user01.product这个表,但如果查all_tables则可以查到,因为他可以访问。
2. 将表的操作权限授予全体⽤户:
SQL> grant all on product to public; // public表⽰是所有的⽤户,这⾥的all权限不包括drop。
[实体权限数据字典]:
SQL> select owner, table_name from all_tables; // ⽤户可以查询的表
SQL> select table_name from user_tables; // ⽤户创建的表
SQL> select grantor, table_schema, table_name, privilege from all_tab_privs; // 获权可以存取的表(被授权的)
SQL> select grantee, owner, table_name, privilege from user_tab_privs; // 授出权限的表(授出的权限)
3. DBA⽤户可以操作全体⽤户的任意基表(⽆需授权,包括删除):
DBA⽤户:
SQL> Create table stud02.product(
id number(10),
name varchar2(20));
SQL> drop p;
SQL> create ployee
as
select * p;
4. 实体权限传递(with grant option):
user01:
SQL> grant select, update on product to user02 with grant option; // user02得到权限,并可以传递。
5. 实体权限回收:
user01:
SQL>Revoke select, update on product from user02; //传递的权限将全部丢失。
说明
1)如果取消某个⽤户的对象权限,那么对于这个⽤户使⽤WITH GRANT OPTION授予权限的⽤户来说,同样还会取消这些⽤户的相同权限,也就是说取消授权时级联的。
Oracle ⽤户管理
⼀、创建⽤户的Profile⽂件
SQL> create profile student limit // student为资源⽂件名
FAILED_LOGIN_ATTEMPTS 3 //指定锁定⽤户的登录失败次数
PASSWORD_LOCK_TIME 5 //指定⽤户被锁定天数
PASSWORD_LIFE_TIME 30 //指定⼝令可⽤天数
⼆、创建⽤户
SQL> Create User username
Identified by password
Default Tablespace tablespace
Temporary Tablespace tablespace
Profile profile
Quota integer/unlimited on tablespace;
例:
SQL> Create user acc01
identified by acc01 // 如果密码是数字,请⽤双引号括起来
default tablespace account
temporary tablespace temp
profile default
quota 50m on account;
SQL> grant connect, resource to acc01;
[*] 查询⽤户缺省表空间、临时表空间
SQL> select username, default_tablespace, temporary_tablespace from dba_users; [*] 查询系统资源⽂件名:
SQL> select * from dba_profiles;
资源⽂件类似表,⼀旦创建就会保存在数据库中。
SQL> select username, profile, default_tablespace, temporary_tablespace from dba_users;
SQL> create profile common limit
failed_login_attempts 5
idle_time 5;
SQL> Alter user acc01 profile common;
三、修改⽤户:
SQL> Alter User ⽤户名
Identified ⼝令
Default Tablespace tablespace
Temporary Tablespace tablespace
Profile profile
Quota integer/unlimited on tablespace;
1、修改⼝令字:
SQL>Alter user acc01 identified by "12345";
2、修改⽤户缺省表空间:
SQL> Alter user acc01 default tablespace users;
3、修改⽤户临时表空间
SQL> Alter user acc01 temporary tablespace temp_data;
4、强制⽤户修改⼝令字:
SQL> Alter user acc01 password expire;
5、将⽤户加锁
SQL> Alter user acc01 account lock; // 加锁
SQL> Alter user acc01 account unlock; // 解锁
四、删除⽤户
SQL>drop user ⽤户名; //⽤户没有建任何实体
SQL> drop user ⽤户名 CASCADE; // 将⽤户及其所建实体全部删除
*1. 当前正连接的⽤户不得删除。
五、监视⽤户:
1、查询⽤户会话信息:
SQL> select username, sid, serial#, machine from v$session;
2、删除⽤户会话信息:
SQL> Alter system kill session 'sid, serial#';
3、查询⽤户SQL语句:oracle登录命令
SQL> select user_name, sql_text from v$open_cursor;
Oracle ⾓⾊管理
⼀、何为⾓⾊
⾓⾊。⾓⾊是⼀组权限的集合,将⾓⾊赋给⼀个⽤户,这个⽤户就拥有了这个⾓⾊中的所有权限。
⼆、系统预定义⾓⾊
预定义⾓⾊是在数据库安装后,系统⾃动创建的⼀些常⽤的⾓⾊。下介简单的介绍⼀下这些预定⾓⾊。⾓⾊所包含的权限可以⽤以下语句查询:
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.
三、管理⾓⾊
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;
⾓⾊删除后,原来拥⽤该⾓⾊的⽤户就不再拥有该⾓⾊了,相应的权限也就没有了。
说明:
1)⽆法使⽤WITH GRANT OPTION为⾓⾊授予对象权限
2)可以使⽤WITH ADMIN OPTION 为⾓⾊授予系统权限,取消时不是级联
查询⽤户权限
数据字典
1、动态数据字典是以v$xxx开始的数据字典,在数据库中约有150个左右,这些数据字典反映数据库动态运⾏状况,在不同时间查询会得到不同的结果。
2、DBA数据字典是以DBA_xxx表⽰,该数据字典存储数据库结构,查询DBA数据字典可以反映数据库结构设置,管理磁盘空间和表空间、事务与回退段、⽤户与表空间等信息。
3、⽤户数据字典是以USER_xxx表⽰,这些数据字典反应⽤户所创建的实体信息。如,USER_TABLES、USER_VIEWS,数据库管理员具有操作全体⽤户所有实体的权限,可以查询这类数据字典,了解⽤户所创建实体状况,必要时可以将⽤户创建的不正确的实体删除。
4、ALL_xxx类数据字典,表⽰⽤户所创建的实体及⽤户有权可以存取的实体。
select privilege from dba_SYS_privs where grantee=‘USERNAME’
转
Oracle查询⽤户权限
-- 确定⾓⾊的权限
select * from role_tab_privs ; 包含了授予⾓⾊的对象权限
select * from role_role_privs ; 包含了授予另⼀⾓⾊的⾓⾊
select * from role_sys_privs ; 包含了授予⾓⾊的系统权限
-- 确定⽤户帐户所授予的权限
select * from DBA_tab_privs ; 直接授予⽤户帐户的对象权限
select * from DBA_role_privs ; 授予⽤户帐户的⾓⾊
select * from DBA_sys_privs ; 授予⽤户帐户的系统权限
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论