Oracle笔记:用户、系统权限、角色
用户
查看Oracle中的用户
SQL> select username,account_status,default_tablespace from dba_users;
USERNAME ACCOUNT_STATUS DEFAULT_TABLESPACE
------------------------------ -------------------------------- ------------------------------
MGMT_VIEW OPEN SYSTEM
SYS OPEN SYSTEM
SYSTEM OPEN SYSTEM
DBSNMP OPEN SYSAUX
SYSMAN OPEN SYSAUX
SCOTT OPEN USERS
SH OPEN USERS
TEST OPEN USERS
OUTLN EXPIRED & LOCKED SYSTEM
FLOWS_FILES EXPIRED & LOCKED SYSAUX
MDSYS EXPIRED & LOCKED SYSAUX
USERNAME ACCOUNT_STATUS DEFAULT_TABLESPACE
------------------------------ -------------------------------- ------------------------------
ORDSYS EXPIRED & LOCKED SYSAUX
EXFSYS EXPIRED & LOCKED SYSAUX
WMSYS EXPIRED & LOCKED SYSAUX
APPQOSSYS EXPIRED & LOCKED SYSAUX
APEX_030200 EXPIRED & LOCKED SYSAUX
OWBSYS_AUDIT EXPIRED & LOCKED SYSAUX
ORDDATA EXPIRED & LOCKED SYSAUX
CTXSYS EXPIRED & LOCKED SYSAUX
ANONYMOUS EXPIRED & LOCKED SYSAUX
XDB EXPIRED & LOCKED SYSAUX
ORDPLUGINS EXPIRED & LOCKED SYSAUX
USERNAME ACCOUNT_STATUS DEFAULT_TABLESPACE
------------------------------ -------------------------------- ------------------------------
OWBSYS EXPIRED & LOCKED SYSAUX
SI_INFORMTN_SCHEMA EXPIRED & LOCKED SYSAUX
OLAPSYS EXPIRED & LOCKED SYSAUX
ORACLE_OCM EXPIRED & LOCKED USERS
XS$NULL EXPIRED & LOCKED USERS
BI EXPIRED & LOCKED USERS
PM EXPIRED & LOCKED USERS
MDDATA EXPIRED & LOCKED USERS
IX EXPIRED & LOCKED USERS
DIP EXPIRED & LOCKED USERS
OE EXPIRED & LOCKED USERS
USERNAME ACCOUNT_STATUS DEFAULT_TABLESPACE
------------------------------ -------------------------------- ------------------------------
APEX_PUBLIC_USER EXPIRED & LOCKED USERS
HR EXPIRED & LOCKED USERS
SPATIAL_CSW_ADMIN_USR EXPIRED & LOCKED USERS
SPATIAL_WFS_ADMIN_USR EXPIRED & LOCKED USERS
已选择37行。
注:EXPIRED & LOCKED
表示账号则是过期和锁定,此状态下的用户不能登录数据库
- 系统用户
system
(权限仅次于sys
用户,其角色是sysoper
数据库操作员)和sys
(数据库中的最高权限者,其角色是sysdba
,数据库管理者),
在权限范围上,sys
可以创建数据库,而system
不可以。
常见问题:利用sys用户修改system账户密码
-- (1)利用sys账号以DBA角色登录数据库
sqlplus /@orcl as sysdba;
-- (2)检查数据库名称
show parameter db_name;
-- (3) 查看此时用户system的账户状态
select username,account_status from dba_users
where lower(username)='system';
-- (4)修改system的属性,首先将其从锁定状态中恢复
alter user system account unlock;
-- (5)再次查看用户system的账户状态
select username,account_status from dba_users
where lower(username)='system';
-- (6)重新设置密码
alter user system identified by abc123;
- 创建用户用法
create user user_name identified by user_password;
--此时还不能登录、查询等,需要进一步授权
系统权限
权限的最终作用对象是用户。
-- 查看系统权限
select distinct privilege from dba_sys_privs;
--oracle11g中有202个
比较常用的系统权限:
- 授权
grant 权限 (on 对象名)to 用户 (with grant option 是否允许用户再授权);
-- 使用数据字典user_tab_privs_made查看是否授权成功
select * from user_tab_privs_made;
例:查看scott用户的权限
--查看当前用户的权限
select * from session_privs;
SQL> select * from session_privs;
PRIVILEGE
----------------------------------------
CREATE SESSION
UNLIMITED TABLESPACE
CREATE TABLE
CREATE CLUSTER
CREATE ANY VIEW
CREATE SEQUENCE
CREATE PROCEDURE
CREATE TRIGGER
CREATE TYPE
CREATE OPERATOR
CREATE INDEXTYPE
DEBUG CONNECT SESSION
已选择12行。
- 回收权限
revoke 权限 (on 对象名)from 用户
角色
引入角色的原因
方便权限的管理;动态的权限管理;提高系统的额效率
角色是指系统权限或者对象权限的集合。Oracle允许首先创建一个角色,然后将角色赋予给用户,从而实现用户权限的添加。
--(1) 创建角色
create role role_emp_test;
--(2)权限分配
grant select on scott.emp to role_emp_test;
/*
查看是否创建成功?
SQL> select * from dba_roles where role='ROLE_EMP_TEST';
ROLE PASSWORD AUTHENTICAT
------------------------------ -------- -----------
ROLE_EMP_TEST NO NONE
*/
--查看角色的权限信息
select table_name,grantee,grantor,privilege from dba_tab_privs where table_name='SCOTT.EMP';
--(3)将角色赋予用户scott
grant role_emp_test to scott;
- 查看当前用户的默认角色信息
SQL> select * from user_role_privs;
USERNAME GRANTED_ROLE ADM DEF OS_
------------------------------ ------------------------------ --- --- ---
SCOTT CONNECT NO YES NO
SCOTT RESOURCE NO YES NO
SCOTT ROLE_EMP_TEST NO YES NO
禁止和激活角色
禁止一个角色将临时地从用户回收该角色,但是角色地定义任然存在于用户地数据字典中。而激活一个角色将临时地授予该角色。
使用set role
命令来激活(开启)和禁止(关闭)角色
-- 查看scott用户地权限
SQL> select * from session_privs;
PRIVILEGE
----------------------------------------
CREATE SESSION
UNLIMITED TABLESPACE
CREATE TABLE
CREATE CLUSTER
CREATE ANY VIEW
CREATE SEQUENCE
CREATE PROCEDURE
CREATE TRIGGER
CREATE TYPE
CREATE OPERATOR
CREATE INDEXTYPE
DEBUG CONNECT SESSION
已选择12行。
--禁止scott用户由角色赋予地系统权限
SQL> set role None;
角色集
-- 再次查看用户权限
SQL> select * from session_privs;
PRIVILEGE
----------------------------------------
UNLIMITED TABLESPACE
CREATE ANY VIEW
DEBUG CONNECT SESSION
-- 激活
SQL> set role all;
角色集
-- 再次确认
SQL> select * from session_privs;
PRIVILEGE
----------------------------------------
CREATE SESSION
UNLIMITED TABLESPACE
CREATE TABLE
CREATE CLUSTER
CREATE ANY VIEW
CREATE SEQUENCE
CREATE PROCEDURE
CREATE TRIGGER
CREATE TYPE
CREATE OPERATOR
CREATE INDEXTYPE
DEBUG CONNECT SESSION
已选择12行。
角色的回收和删除
当不再需要角色所授予的权限后,可以使用revoke
命令从用户那里回收角色。
从用户那里回收角色需要with admin option
和grant any role
权限。
SQL> --回收角色role_emp_test
-- 如果涉及多个用户,可用public替换scott
SQL> revoke role_emp_test from scott;
撤销成功。
SQL> conn scott
输入口令:
已连接。
SQL> select * from user_role_privs;
USERNAME GRANTED_ROLE ADM DEF OS_
------------------------------ ------------------------------ --- --- ---
SCOTT CONNECT NO YES NO
SCOTT RESOURCE NO YES NO
- 删除角色
SQL> conn / as sysdba;
已连接。
SQL> drop role role_emp_test;
角色已删除。
参考:
21天学通ORACLE
ORACLE数据库管理:从入门到精通