2
1
programming
1
Oracle SQL开发基础
2
2
programming
课程结构
内容
课时(H)
第一章 Oracle数据库基础
2.5
第二章 编写简单的查询语句
1.5
第三章 限制数据和对数据排序
2
第四章 单行函数
4
第五章 多表查询
4
第六章 分组函数
3
第七章 子查询
4
第八章 数据操作与事务控制
4
第九章 表和约束
4
第十章 其他数据库对象
4
2
3
programming
第十一章 用户、权限和角色
目标:
本章旨在向学员介绍:
1) 用户的概念及管理
2)权限的概念及管理
3)角色的概念及管理
时间: 2学时
教学方法:讲授ppt+上机练习
2
4
programming
本章要点
.用户的概念及管理
.权限的概念及管理
.角色的概念及管理
2
5
programming
第十一章 用户、权限和角色
用户、权限和角色:
11.1管理用户
11.2权限
11.3角色
2
6
programming
11.1管理用户
.用户
–用户是数据库的使用者。用户相关的信息包括用户的用户
名称和密码、用户的配置信息(包括用户的状态,用户的
默认表空间等)、用户的权限、用户对应的方案中的对象
等。
–用户一般是由DBA来创建和维护的。创建用户后,用户不
可以执行任何Oracle操作(包括登陆),只有赋予用户相
关的权限,用户才能执行相关权限允许范围内的相关操作。
对用户授权可以直接授权,也可以通过角色来间接授权。
2
7
programming
11.1.1创建和修改用户语法 1/11
.创建用户
–创建用户语法
–Deafult tablespace 用户的默认表空间
–Temporary tablespace 用户的临时表空间
–Quota on 表示允许该用户在表空间中使用的空间总大小。
可以设置多个不同的表空间
–执行该语句的用户需要有“创建用户”的权限,一般为系
统的DBA用户。
CREATE USER user
IDENTIFIED BY password [default tablespace 默认表空间名
temp tablespace 临时表空间名 quota 配额大小 on 表空间名]
2
8
programming
11.1.1创建和修改用户语法 2/11
.创建用户示例
–以SYSTEM用户登陆。
–用户被创建后,没有任何权限,包括登陆。
CREATE USER test IDENTIFIED BY test;
conn system
请输入口令: ******
已连接。
2
9
programming
11.1.1创建和修改用户语法 3/11
.登陆权限
–用户如果想登陆,至少需要有“CREATE SESSION”的权
限。
GRANT CREATE SESSION TO test;
2
10
programming
11.1.1创建和修改用户语法 4/11
.用户建表相关权限
–对新建用户,默认情况,用户对于其所拥有对象具有所有
的数据的增删改查权限,但没有定义的权限(如创建表
等)。用户要想创建对象,需要有对象的创建权限
CREATE TABLE、CREATE SEQUENCE等
–以test用户身份建表:
CREATE TABLE emp1(id NUMBER,last_name
VARCHAR2(20),salary NUMBER);
返回权限不足。
2
11
programming
11.1.1创建和修改用户语法 5/11
.用户建表相关权限
–赋予test用户的创建表的权限。
–test用户身份执行建表操作:
–建表的相关权限:
.CREATE TABLE
.空间使用权限,需要DBA来分配。
CREATE TABLE emp1(id NUMBER,last_name
VARCHAR2(20),salary NUMBER);
返回错误“表空间‘SYSTEM’中无权限”
Conn system/oracle;
GRANT CREATE TABLE TO test;
2
12
programming
11.1.1创建和修改用户语法 6/11
.用户空间分配和管理:
–给用户分配表空间的配额;
–给用户指定一个默认的表空间,如果没有特殊指定,则对
象都是在该用户默认表空间中创建的。如果不指定默认表
空间,则系统缺省默认表空间是SYSTEM,默认情况下,
SYSTEM表空间也没有给任何普通用户分配配额(SYS和
SYSTEM用户除外。
–查询数据库表空间。以SYSTEM用户身份:
SELECT * FROM v$tablespace;
2
13
programming
11.1.1创建和修改用户语法 7/11
.修改默认表空间和配额
–语法
ALTER USER 用户名
QUOTA 10m ON 表空间名;
ALTER USER 用户名
DEFAULT TABLESPACE 默认表空间名;
2
14
programming
11.1.1创建和修改用户语法 8/11
.修改默认表空间和配额
–以SYSTEM用户身份执行:
–以test用户身份执行
–以SYSTEM用户身份执行,给test分配配额。
ALTER USER test
QUOTA 10m ON example;
CREATE TABLE emp1(id NUMBER,last_name
VARCHAR2(20),salary NUMBER);
返回错误“ 表空间‘EXAMPLE’中无权限”。
ALTER USER test
DEFAULT TABLESPACE example;
2
15
programming
11.1.1创建和修改用户语法 9/11
.修改默认表空间及配额
–以test用户身份执行建表命令。
–上例显示了test用户在表空间“example”上分配了10m的
空间使用权限,用户在该表空间上只有10M的使用权限,
如果超过该限度,用户的相关操作执行失败。
CREATE TABLE emp1(id NUMBER,last_name
VARCHAR2(20),salary NUMBER);
表已创建。
2
16
programming
11.1.1创建和修改用户语法 10/11
.修改用户密码
–语法
–DBA可以修改任何普通用户的密码,而不需要知道用户
的旧密码。
–在sqlplus下执行password命令来修改登陆用户自己的密
码,提示会输入旧密码和新密码。
ALTER USER user IDENTIFIED BY 新密码;
2
17
programming
11.1.1创建和修改用户语法 11/11
.用户状态
–用户状态:OPEN、EXPIRED、LOCKED。
.OPEN表正常状态,为用户帐号初始创建后状态。
.EXPIRED表示密码过期,用户下次登陆的时候需要修改密
码;
.LOCKED表示该帐户已被锁定,不能执行任何Oracle相关操
作(即使拥有相关的权限)。
–状态管理语句:
ALTER USER user PASSWORD EXPIRE;--密码过期
ALTER USER user ACCOUNT LOCK[UNLOCK];--帐户锁定/解锁
2
18
programming
11.1.2删除用户
.删除用户
–删除用户语法
–CASCADE表示系统先自动删除该用户下的所有对象,然后
再删除该用户的定义。
–已经登陆的用户是不允许被删除的。
DROP USER user [CASCADE]
2
19
programming
11.1.3查询用户信息
.数据字典视图
–与用户信息相关的数据字典视图有
.DBA_USERS是关于用户的属性信息
.DBA_TS_QUOTAS是用户的相关表空间的配额信息。
–数据字典视图一般是以SYSTEM用户身份执行:
SELECT username,account_status,default_tablespace FROM
dba_users;
SELECT * FROM dba_ts_quotas;
2
20
programming
第十一章 用户、权限和角色
用户、权限和角色:
11.1管理用户
11.2权限
11.3角色
2
21
programming
11.2.1系统权限概念及分类 1/6
.权限管理
–Oracle中存在两种权限
.系统权限(SYSTEM PRIVILEGE):允许用户在数据
库中执行指定的行为,一般可以理解成比较通用的一类
权限。
.对象权限(OBJECT PRIVILEGE):允许用户访问和
操作一个指定的对象,该对象是一个确切存储在数据库
中的命名对象。
2
22
programming
11.2.1系统权限概念及分类 2/6
.系统权限
–包含100多种系统权限,其主要作用:
.执行系统端的操作,比如CREATE SESSION是登陆的
权限,CREATE TABLESPACE创建表空间的权限
.管理某类对象,比如CREATE TABLE是用户建表的权
限
.管理任何对象,比如CREATE ANY TABLE,ANY关键
字表明该权限“权力”比较大,可以管理任何用户下的
表,所以一般只有DBA来使用该权限,普通用户是不应
该拥有该类权限的。
2
23
programming
11.2.1系统权限概念及分类 3/6
.表的系统权限
–CREATE TABLE(建表)
–CREATE ANY TABLE(在任何用户下建表)
–ALTER ANY TABLE(修改任何用户的表的定义)
–DROP ANY TABLE(删除任何用户的表)
–SELECT ANY TABLE(从任何用户的表中查询数据)
–UPDATE ANY TABLE(更改任何用户表的数据)
–DELETE ANY TABLE(删除任何用户的表的记录)。
2
24
programming
11.2.1系统权限概念及分类 4/6
.索引及会话系统权限
–索引:
.CREATE ANY INDEX(在任何用户下创建索引)
.ALTER ANY INDEX(修改任何用户的索引定义)
.DROP ANY INDEX(删除任何用户的索引)
–会话:(SESSION)
.CREATE SESSION(创建会话,登陆权限)
.ALTER SESSION(修改会话)
2
25
programming
11.2.1系统权限概念及分类 5/6
.表空间系统权限
–表空间
.CREATE TABLESPACE(创建表空间)
.ALTER TABLESPACE(修改表空间)
.DROP TABLESPACE(删除表空间)
.UNLIMITED TABLESPACE(不限制任何表空间的配
额)
–注意: 表空间的所有权限都不应该分配给普通用户。
2
26
programming
11.2.1系统权限概念及分类 6/6
.系统特权
–系统特权权限SYSDBA和SYSOPER
.SYSOPER的权限:启动停止数据库,恢复数据库等
.SYSDBA的权限:所有SYSOPER功能的管理权限;创
建数据库等权限。
–注意: 以系统特权权限登陆的用户一般都是特权用户,或
称为超级用户。以SYSDBA身份登陆的用户在ORACLE中
是权限最大的用户,可以执行数据库的所有操作。这些特
权权限是不应该随便赋予给普通用户的。
2
27
programming
11.2.2授予和回收系统权限 1/3
.系统权限授予
–授予用户系统权限语法
–sys_priv_list:是一个系统特权的列表,由逗号分隔
–User_list:是一个用户的列表,由逗号分隔
–WITH ADMIN OPTION:允许权限的接受者再把此特权授予
其他用户。
GRANT sys_priv_list TO user_list [WITH ADMIN OPTION]
2
28
programming
11.2.2授予和回收系统权限 2/3
.系统权限授予
–授予test用户CREATE SESSION权限
–以test身份执行CREATE SESSION权限管理:
GRANT create session TO neu;
GRANT create session TO test WITH ADMIN OPTION;
2
29
programming
11.2.2授予和回收系统权限 3/3
.系统权限回收
–回收系统权限
语法:REVOKE 系统权限列表 FROM user列表;
–只能回收使用GRANT授权过的权限,权限被回收后,用户就失去
了原权限的使用权和管理权(如果有管理权限的话)。
–注意:使用WITH ADMIN OPTION选项授予的权限在回收时候的
级联回收策略如下:
.如果用户A授予权限给用户B,同时带有选项WITH ADMIN OPTION,
用户B又把该权限赋予给用户C;如果此时用户A把权限从用户B处收
回,那么用户B给予出去的权限(用户C对该权限的使用权)是否还继
续存在。在系统权限的管理中,ORACLE的策略是继续保留权限,用
户C继续拥有该权限的使用权。
.也就是说,系统权限不会级联回收。所以在权限回收时必须将获权
用户的权限一一回收。
2
30
programming
11.2.3对象权限概念及分类 1/3
.对象权限
–对象权限 是在指定的表、视图、序列或过程上执行指定动作
的权限或权利。
–每个对象都有一个特殊的可授予的权限集。
2
31
programming
11.2.3对象权限概念及分类 2/3
.对象权限
–对象权限的种类不是很多,但数量较大,因为具体对象
的数量很多。
–对象权限的分类
权限分类﹨对象类型
表(Table)
视图(View)
序列
(Sequence)
存储
(Procedure)
SELECT(选择)
○
○
○
INSERT(插入)
○
○
UPDATE(更改)
○
○
DELETE(删除)
○
○
ALTER(修改)
○
○
INDEX(索引)
○
REFERENCE(引用)
○
○
EXECUTE(执行)
○
2
32
programming
11.2.3对象权限概念及分类 3/3
.对象权限
–不同的对象有不同的对象权限
–对象的所有者自动拥有包含在该用户的方案中的所有对象的所有
权限
–对象的所有者能够给予指定的权限到其他的帐户或者角色
2
33
programming
11.2.4授予和回收对象权限 1/3
.授予对象权限
–object_priv:是将被授予的对象权限
–ALL: 指定所有对象权限
–Columns: 从一个表或视图中指定被授予权限的列,但需要注意,只有授予
INSERT、REFERENCES或UPDATE特权时才可以指定列。
–ON object: 是权限被授予的对象
–TO: 指定权限被授予谁
–PUBLIC 授予权限给所有用户
–WITH GRANT OPTION 允许被授予权限的人再授予对象权限给其他用户和角色
–SCHEMA:指定用户名,如果省略,默认为当前用户
.GRANT object_priv |ALL PRIVILEGES ]|[(columns)]
. ON [schema.]object
. TO {user|PUBLIC} [WITH GRANT OPTION];
2
34
programming
11.2.4授予和回收对象权限 2/3
.授予对象权限
–授予对象权限的用户是对象的拥有者(OWNER)或其他有对
象管理权限的用户(常为DBA)。
–以neu身份执行授权命令:
GRANT select on employees To test;
2
35
programming
11.2.4授予和回收对象权限 3/3
.回收对象权限
–回收对象权限语法:
–对象的权限会级联回收。
–权限的查询
.DBA_SYS_PRIVS:查询所有的系统权限的授权情况。
.SESSION_PRIVS:能够查询出当前会话已经激活的所
有系统权限。
.DBA_TAB_PRIVS:查询出表的对象权限的授权情况。
REVOKE 对象权限种类 ON 对象名 FROM user
2
36
programming
第十一章 用户、权限和角色
用户、权限和角色:
11.1管理用户
11.2权限
11.3角色
2
37
programming
11.3.1角色的作用及好处 1/2
.角色(ROLE)的目的就是为了简化权限的管理。
权限 J0199727
J0199727
J0199727
J0199727
J0199727
J0199727
J0199727
J0199727
J0195384
J0195384
J0195384
J0195384
J0195384
J0195384
用户
单独授予权限
使用角色授予权限
role
2
38
programming
11.3.1角色的作用及好处 2/2
.使用角色的好处
–简化权限的管理,而且易于以后的维护,使得维护成本降低。
–动态权限的管理
–权限的可选择性
2
39
programming
11.3.2创建角色/授予角色权限 1/4
.角色管理
–创建角色语法:
–以SYSTEM的用户身份建立测试角色tr。
CREATE ROLE role;
CREATE ROLE tr;
2
40
programming
11.3.2创建角色/授予角色权限 2/4
.角色管理
–为角色授权语法:
–给角色tr授予create sequence的权限。
GRANT 权限列表 TO 角色列表
GRANT create sequence TO tr;
2
41
programming
11.3.2创建角色/授予角色权限 3/4
.角色管理
–通过角色为用户授权语法:
–通过角色为用户test授权
–以test用户登陆,验证是否已拥有相关权限
GRANT tr TO test;
SELECT * FROM session_privs;
GRANT 角色列表 To 用户列表;
2
42
programming
11.3.2创建角色/授予角色权限 4/4
.收回角色
–通过角色从用户收回权限语法:
–从角色收回权限语法:
–删除角色语法:
REVOKE 权限 FROM 角色;
REVOKE 角色 FROM 用户;
DROP ROLE 角色;
2
43
programming
11.3.3预定义的角色 1/3
.预定义角色
–常用预定义角色:
.DBA角色。该角色中的权限通常赋给数据库管理员。
.CONNECT角色。
.RESOURCE角色。
–CONNECT和RESOURCE是相对较安全的角色,角色中包
含的权限仅限于用户自己的对象范围,因此,可使用
CONNECT和RESOURCE来简化权限管理。
–两者区别是RESOURCE中没有登陆的权限,并增加了几种
对象的创建权限。
2
44
programming
11.3.3预定义的角色 2/3
.查看预定义角色的权限
–角色DBA中包含的系统权限
–CONNECT角色的相关权限:
–RESOURCE角色中的权限:
SELECT * FROM DBA_SYS_PRIVS
WHERE GRANTEE='RESOURCE'
SELECT * FROM DBA_SYS_PRIVS
WHERE GRANTEE='CONNECT‘
SELECT * FROM DBA_SYS_PRIVS
WHERE GRANTEE='DBA‘
2
45
programming
11.3.3预定义的角色 3/3
.PUBLIC
–PUBLIC对象既不是用户,也不是角色,代表公众,公开,
PUBLIC中拥有的所有权限,所有数据库的用户都会自动拥
有。为安全起见,PUBLIC中不应该拥有任何权限。
–给PUBLIC赋予权限
–所有的用户都会自动从public中获得登陆的权限。
GRANT create session TO public;
2
46
programming
11.3.4获取角色信息
.角色相关的数据字典视图
–DBA_ROLES:数据库中的角色列表
–DBA_ROLE_PRIVS:查询把哪些角色赋予给哪些对象了
(包括给用户、角色、PUBLIC)
–SESSION_ROLES:当前用户激活的角色。
2
47
programming
本章小结
.用户的管理
.权限的管理
.角色的管理
2
48
programming
练习
.1.建立新用户user_neu
.2. 给用户user_neu授权,使其能够登陆到数据库,能够查询neu
下的employees表,能修改employees表的salary,last_name两
个字段
.3.查询用户user_neu的权限
.4.回收用户user_neu的登陆权限
.5.回收用户user_neu的所有对象权限
.6.建立角色role_neu
2
49
programming
练习(续)
.7.给角色role_neu授权,使其能够登陆到数据库
.8.赋角色role_neu给用户user_neu
.9.删除角色role_neu
.10.删除用户user_neu
2
50
programming
谢谢