三:角色管理
角色管理:角色是一组相关权限的组合,可以将权限授予角色,再把角色授予用户,以简化权限管理。一个用户可以拥有一个或多个角色,并可以将角色授予其他用户或角色,无论在角色中增加或减少权限,该用户的权限都会随之变化。
3.1创建角色CREATE ROLE,应该具有CREATE ROLE系统权限。
CREATE ROLE role_name[NOT IDENTIFIEN]|[IDENTIFIED {BY password|USING [scheam.]package |EXTERNALLY|GLOBALLY}]
//role_name 表示要创建的角色的名称
//NOT IDENTIFIED 表示角色被授予其他用户和角色后立刻生效,这是默认值
//IDENTIFIED子句表示被授予其他用户后不会立刻生效,以防止其他用户随意启用和禁用该角色。BY password表示创建角色的同时为角色设置密码,用户不能立即拥有该角色权限,必须使用SET ROLE语句激活后才拥有;默认是没有密码,用户可以立即拥有该角色权限。USING package表示创建的角色是一个应用程序角色,该角色只能在应用程序中使用授权的包来启用。EXTERNALLY 表示要使用外部服务授权来启用该角色。GLOBALLY表示通过企业服务授权的用户来启用该角色。
SCOTT用户创建不成功是因为没有权限
SYSDBA给SCOTT用户创建角色的权限
SCOTT用户创建3个角色
3.2 授予角色权限,可以是系统权限或者对象权限。
GRANT privilege TO ROLE;
例: GRANT create session ,create any table, drop any table TO role1;
为角色e_emp1授予scott模式的EMP表的查询权限和在任何模式下创建,删除视图的系统权限。为角色e_emp2授予scott模式的EMP表的插入、更新和删除的权限。为角色m_emp授予scott模式下的DEPT表的查询、插入、更新、删除权限。
3.3 将角色授予用户:
GRANT role TO user;
例: grant role1 to test2;
3.4查看用户被直接授予的角色信息
查询视图user_role_privs可以查看用户被直接授予的角色的信息。
在用户user1中查看user1用户的角色。
由上图可以看出,角色e_emp1被自动设置为用户user1的默认角色,而M_EMP被设置了密码因此不能自动成为默认角色。对于用户user1只能查询scott模式下EMP表的信息,不能查看DEPT表的信息。
用户user1可以查看EMP表
不能查看dept表
3.5修改默认角色
ALTER user DEFAULT ROLE [role_name |ALL [EXCEPT role_name] |NONE]
//role_name为要设置的角色名,多个用逗号隔开
//ALL启用当前用户的所有角色作为默认角色,但不包括设置密码的角色。
//EXCEPT除了指定的角色外,启用当前用户所有角色作为默认角色
//NONE禁用当前用户的所有角色,即默认角色为零个。
ALTER user user1 DEFAULT ROLE NONE; //修改用户默认角色为0个,登录后不具有任何角色。
ALTER user user1 DEFAULT ROLE ALL EXCEPT e_emp1;//user1登录后启用除e_emp1角色外,其他所有角色为默认角色
ALTER user user1 DEFAULT ROLE ALL;//user1登录后启用所有角色为默认角色
ALTER user user1 DEFAULT ROLE e_emp1;//user1登录后只启用e_emp1角色为默认角色。
3.6启用和禁用角色set
SET ROLE [role_name [IDENTIFIED BY password|ALL [EXCEPT role_name] |NONE]
//role_name为要设置的角色名,多个用逗号隔开
//IDENTIFIED BY 用于启用或禁用角色时要使用的密码
//ALL启用当前用户的所有角色作为默认角色,但不包括设置密码的角色。
//EXCEPT除了指定的角色外,启用当前用户所有角色作为默认角色
//NONE禁用当前用户的所有角色,即默认角色为零个。
SET ROLE m_emp IDENTIFIED BY 123; //启用m_emp角色的同时输入密码
在user1用户中启用
并查看
3.7 从用户收回角色:
REVOKE role1 from user2;//从用户user2中回收role1角色
REVOKE CREATE ANY VIEW,DROP ANY VIEW from e_emp1; //回收e_emp1角色的系统权限
3.8删除角色
DROP ROLE e_emp1
(5)GRANT RESOURCE TO tom:RESOURCE角色允许用户使用数据库中的存储空间(系统自带角色)
备注:
oracle查询不用输入前面的用户名(a.b不用输入a了)
可以使用下面四种方法:空间资源充足或者表数据量小可以使用
1.使用同意词
grant CREATE SYNONYM to scott; //DBA或者有权限的用户授权
create synonym emp_test for scott.emp;
2.使用视图
create view emp_test as SELECT from scott.emp;
3.账户授权
grant SELECT on scott to test; //test用户可以查看scott用户的表
4.创建数据库
create table emp_test1 as SELECT from scott.emp
给用户赋权限
grant SELECT on DEMO_INVOICE_CLOUD.FMB_INVOICE to demo_pc_core01;
GRANT connect, resource TO test;
GRANT RESUMABLE TO TEST; --可以自动扩展空间
GRANT BACKUP ANY TABLE TO TEST;
GRANT EXECUTE ANY TYPE TO TEST;
GRANT SELECT ANY TABLE TO TEST;
GRANT READ ANY FILE GROUP TO TEST;
GRANT SELECT ANY SEQUENCE TO TEST;
GRANT EXECUTE ANY PROCEDURE TO TEST;
connect 用户能登录数据库的权限
resource 用户能创建一些数据库对像的权限,表、视图,存储过程,一般是授予开发人员的
drop user cmsuser cascade;
使用cascade参数可以删除该用户的全部objects
connect 用户能登录数据库的权限
resource 用户能创建一些数据库对像的权限,表、视图,存储过程,一般是授予开发人员的
drop user cmsuser cascade;
使用cascade参数可以删除该用户的全部objects
rowid是Oracle数据库中行标识符,为rowid,它是一个18位数字,以64为基数,该徝包含了该行在oracle数据库中的物理位置,查询rowid如下:
SQL> SELECT rowid,id from test Where rownum< 5;
删除表中重复记录
Delete from test a
Where rowid < (SELECT Max(rowid)from test Where Id = a.Id);
将一个用户下面的所有表的权限授予另一个用户
1.查看出该用户下面使用的表
SELECT * from dba_tables where owner='SCOTT' and status='VALID'
2.将该用户下面的表拼接成授权语句
SELECT 'grant select,delete,update,insert '|| table_name||' to test ;' from dba_tables where owner='SCOTT' and status='VALID'
3.将步骤2中的输出结果用dba或者有授权权限的用户执行,当前用户如有授权权限则可以执行。
注意:如果需要将当前登录用户数据库中所有表授权给test用户可以使用下面语句进行拼接
SELECT 'grant select,delete,update,insert '|| table_name||' to test ;' from user_tables where owner='SCOTT' and status='VALID'