权限

权限

1 控制用户存取

访问数据库里的数据,要经过oracle用户名和密码的验证,通过验证后才能登陆到数据库对数据进行访问

sqlplus scott/tiger   使用用户名/密码验证

sqlplus / as sysdba操作系统认证方式,操作系统中oracle用户属于dba组,有权限对数据库进行管理

外部认证:把用户名和口令存储在目录服务器

 

2 创建用户

DBA使用create user语句创建用户:

语法:create user user_name identified by user_password;

create user venom identified by venom666;

2.1 修改用户密码

DBA可以创建用户和修改密码

用户可以自己使用alter user语句来修改密码

语法:alter user user_name identified by user_password;

【修改密码方法一】:

alter user venom identified by oracle;

【修改密码方法二】:

sqlplus / as sysdba
password venom;

2.2 解锁用户

为用户解锁:

用户:alter user user_name account unlock;

为用户设置密码并解锁:

语法:alter user user_name identified by user_password account unlock;

2.3 使用新用户登录

conn venom/oracle

缺少创建会话的权限(create session)

 

3 权限

系统权限:能够在数据库中做什么操作(如创建表)

对象权限:能够对指定的对象做什么操作(如对表的DML操作权限)

【模式定义】:

schema:某个用户下所有对象的集合。模式与用户一一对应

【例子】:select * from scott.emp;

【例子说明】访问scott模式emp这个对象

 

4 系统权限

create table在自己的方案中创建表

create any table跨方案创建表

8i 80+9i 100+10g 11g 200+

权限分布细化,提高安全性

sysdbadba关系】

sysdba是系统权限,权限最大,用sys用户登录时,要使用as sysdba

dba是角色

角色:权限的集合

4.1 用户的系统权限

 

5 角色

dba是角色   sysdba是系统权限

【角色目的】oracle可以用角色来简化权限的管理

【授予流程】创建角色 -> 把所需的权限给角色 -> 把角色给用户

5.1 创建角色并给角色授权

5.2 默认角色connect/resource

CONNECTRESOURCE是系统默认角色

查看CONNECTRESOURCE角色包含的权限:

select * from role_sys_privs where role in ('CONNECT','RESOURCE');

【分配权限原则】:给用户分配能够完成任务的最低标准权限

例子eg:授予venom用户CONNECTRESOURCE默认角色,并测试创建表:

grant connect,resource to venom;
grant unlimited tablespace to venom;

ORACLE 12C之后的版本中需要授予空间占有权限,才可以创建表:11G之前的版本不用单独授此权限

 

6 对象权限

index权限在表上创建索引的权限

references权限参考一个对象的权限

6.1 授予对象权限

  • 不同的对象具有不同的对象权限
  • 对象的拥有者拥有所有权限
  • 对象的拥有者可以向外分配权限

grant select on emp to venom;

select * from scott.emp;

【说明】

对象权限可以精确到列(insert/update)

grant update (dname,loc) on dept to venom;

6.2 with grant option和public

with grant option这个用户还可以把授权给他的权限给其他用户

【例如】A把权限授予B,B还可以把这个权限授予其他用户C

grant select,insert on dept to venom with grant option;

这个例子中Damon用户可以把相关权限,再授予给其他用户

grant select on scott.dept to hr;

PUBLIC 角色】:

数据库中任何一个用户都默认拥有public角色,授予给public权限(grant ... to public),会使所有用户拥有这个权限。

 

7 权限相关数据字典视图

select * from session_privs;
select * from session_roles;
select * from role_sys_privs;
select * from user_sys_privs;
select * from user_tab_privs_recd;
select * from user_col_privs_recd;

col owner for a10
col table_name for a10
col privilege for a10
col grantor for a10
select * from user_tab_privs_recd;

 

8 收回权限

  • 使用revoke语句撤销权限
  • 使用with grant option子句所分配的权限同样被收回

cascade constraints收回外键约束权限时,先把外键约束删掉

A -> B -> C -> D

对象权限:with grant option

对象权限的回收是级联A收回B的权限,CD权限也被收回

回收原则谁授予谁回收A不能直接回收 C 的权限

scott -> damon -> hr

A -> B -> C -> D

系统权限:with admin option

系统权限的回收不是级联A 收回B的权限,CD 权限还在

回收原则:只要被授权时有with admin option,就可以回收这个权限

 

9 总结

系统权限和对象权限语法格式不同,不能混合使用

系统权限和角色语法相同,可以合并授予

一条语句可以给多个用户授权

可以通过授权语句来创建用户

【知识扩展:如何阅读官方脚本中的授权语句

查看创建scott用户方案的脚本,里面有一些授权的例子可以参考:

more $ORACLE_HOME/rdbms/admin/utlsampl.sql

 

10 补充扩展:select any table

1)使用demo用户查询scott.dept,没有权限

select * from scott.dept;

2)使用sys用户把select any table权限赋予给demo

grant select any table to demo;

3)demo用户再次查询,可以查看scott.dept

select * from scott.dept;

问:普通用户如何查询数据字典视图

答:给用户赋予权限select any dictionary

1)demo用户查询dba_数据字典(视图),如dba_users,无法查询

select username,account_status from dba_users where USERNAME='DEMO';

2)给用户赋予权限select any dictionary

grant select any dictionary to demo;

3)demo用户再次查询,可以查看dba_users

select username,account_status from dba_users where USERNAME='DEMO';

 

11 补充扩展:设置用户密码永不过期

*查看用户的profile(一般是default)

col USERNAME for a20
col PROFILE for a20
select username,profile from dba_users;

*查看default概要文件设置的密码有效期(默认180天)

col LIMIT for a20
col RESOURCE_NAME for a30
select * from dba_profiles where resource_name ='PASSWORD_LIFE_TIME' and profile='DEFAULT';

*将密码有效期设置为无限制

alter profile default limit password_life_time unlimited;
select * from dba_profiles where resource_name ='PASSWORD_LIFE_TIME' and profile='DEFAULT';

 

12 扩展:查看执行计划set autotrace

plustrace是一个角色,public也是一个角色

set autotrace on/off/traceonly

例子eg:简单使用

1)sys用户创建plustrace角色

@?/sqlplus/admin/plustrce.sql

2)将角色赋给scott

grant plustrace to scott;

2)或者将角色赋给public,这样所有用户都可set autotrace

grant plustrace to public;
conn scott/tiger
show autotrace

3)查看执行结果和执行计划

set autotrace on
select * from dept where deptno=10;

4)只查看执行计划

set autotrace traceonly
select * from dept where deptno=10;

5)关闭自动跟踪

set autotrace off
show autotrace

posted @ 2021-05-18 18:07  chchcharlie、  阅读(168)  评论(0编辑  收藏  举报