创建用户:
CREATE USER username
IDENTIFIED BY password
DEFAULT TABLESPACE tablespacename
TEMPORARY TABLESPACE tablespacename
QUOTA size ON tablespacename;//磁盘限额
create user c##test_user
identified by oracle
default tablespace users
temporary tablespace temp;
查看用户信息:
dba_users
user_objects
desc dba_users;
desc user_objects;
select * from dba_users;
select * from user_objects;
修改用户:
修改密码
Alter user 用户名 identified by newpwd
password
用户锁定与解锁
Alter user username account lock
Alter user username account unlock
分配表空间配额
Alter user username quota size on tablespace
修改用户east在表空间上的磁盘限额为20m(原始为10m,增加10m)。
alter user c##east quota 20m on tbsp_1;
修改用户密码:
alter user c##east identified by 123456;
在 管理员用户下可以使用:
password c##scott;//修改密码
删除用户:
drop user username [cascade]
(1)如果用户方案中包括任何对象,在删除用户时,必须加上cascade短语。
(2)如果用户当前正与Oracle服务器连接,则不能删除。
(3)只有管理员才能删除用户
权限分类:系统权限和对象权限。
数据库级别执行某些操作的权限
create session
create tablespace
create table
create view
Alter命令
Drop命令
对象权限:
用户对某个特定的数据库对象执行某种操作的权限
指对数据库中的特定对象(如表、视图、序列等)的访问控制权限,以及用户可以在这些数据库对象上执行哪些操作
数据库用户拥有对自己的对象的所有对象权限,所以对象权限管理实际上是对象所有者对其他用户操作该对象的权限管理。
常用权限:增删改查
grant select on emp to c##rose;//授予对象权限。
授权:
在没有权限传递时,只有管理员才能授权系统权限。
Grant 系统权限 to user
Grant 对象权限 on 数据对象 to user
grant create session to xiaoming
grant select on emp to xiaoming
问题:
1.如果scott将修改emp表的权限给rose用户,该如何操作?
grant update on c##scott.emp to c##rose;
2.如果scott希望将对emp表的查询、插入、删除和修改表的权限都给rose ,该如何操作?
grant select,insert,delete on c##scott.emp to c##rose;
3.如果只允许rose修改emp表的工资列,该怎么操作?
grant update(sal) on c##scott.emp to c##rose;
4.如果给数据库中所有用户分配相同的权限,该怎么操作?
授予权限:
1.系统权限级联:with admin option----回收时其他用户不受影响
2. 对象权限级联:with grant option----回收时其他用户的权限也随之消失
允许被授予者进一步为其他用户授予权限
撤销权限:
撤销系统权限
revoke 权限 from user
撤销系统权限时没有级联效果。
撤销对象权限
revoke object_privilege [all] on object from user
级联问题:如果对象是用with grant option授予的,则撤销对象权限也将导致级联撤销
从rose用户撤销scott.emp表的update和delete权限
revoke update,delete on c##scott.emp from c##rose;
撤销rose用户的create session系统权限
revoke create session from c##rose;
查看权限:
可以通过查询以下视图来获取有关权限的信息:
dba_sys_privs:列出授予用户和角色的系统权限
session_privs:列出用户当前可用的权限
dba_tab_privs:列出对于数据库中所有对象的所有权限
dba_col_privs:描述数据库中的所有对象的授权
角色权限:
分类:预定义角色和自定义角色
常用预定义角色:
connect: 登录数据库,执行查询语句和操作
resource: create table,对该表的所有权限
DBA: 执行某些授权命令、创建表,以及对任何表的数据进行操纵。它包括了上面两种角色的操作。(不要轻易给出DBA权限)
创建角色:
创建角色也需要加上c##
有两种方式:
不验证
create role 角色名
create role c##rose;
数据库验证
Create role 角色名 identified by 密码
create role c##rose identified by 123456;
1.授予系统权限和角色可以放在同一个语句中授权或者回收。
2.对象权限只能单独授权和单独回收
一个用户可以被授予多个角色
一个角色也可以被授予多个用户
一个角色还可以被授予另一个角色
为角色授权
grant all on emp to testrole;
为用户授予角色
grant testrole,create session to tom;
回收权限
revoke testrole,create session from tom;
查看数据库中有哪些角色(包含预定义和自定义)
select * from dba_roles;
查看当前用户有哪些角色
select * from user_role_privs;
查看角色包含的权限
select * from role_role_privs where role='ROLE1';
select * from role_sys_privs where role='ROLE1';
select * from role_tab_privs where role='ROLE1';
设置角色口令
alter role role_name not idenitfied|identified by password
删除角色
drop role role_name
删除角色后,原来拥有该角色的用户将失去相应的权限
验证权限:
系统权限需要重新连接。
对象权限不需要重新连接。
事务:
事务: 一系列语句构成的逻辑单元
用于保证数据的一致性,它由一组相关的 dml 语句组成,该组的 dml(数据操作语言,增删改,没有查询)语句要么全部成功,要么全部失败。
锁: 当执行事务操作时(dml 语句),oracle 会在被作用的表上加锁,防止其它用户修改表的结构。会在数据行上加锁,防止其它用户修改数据。
事务开启
从执行的第一条dml语句开始。(增删改)
事务结束
显示结束:主动提交或撤销
commit 提交事务
rollback 回滚事务
savepoint 保存点
隐式结束:被动提交或撤销
隐式结束事务
执行一条数据定义语句(create\drop\alter)
执行一个数据控制命令(grant\revoke)
正常断开数据库连接
回滚事务
- 撤销对数据库进行的全部操作
- 保存点(回退点):在含有较多sql语句的事务中间设定的回滚标记。
- 利用保存点可以将事务划分成若干部分,这样回滚时就不必回滚整个事务,而可以回滚到指定的保存点,有更大的灵活性。
savepoint a;
update bank set mon=mon-500 where nam='tom';
savepoint b;
update bank set mon=mon+500 where nam='jack';
rollback to a;
commit;
最终回滚到了a点,相当于什么也没干。
有没有保存点的区别:
1. 执行没有“TO”回滚子句的ROLLBACK语句,它实现如下功能:
结束事务;
撤销事务中所有对数据库的修改;
清除事务中设置的所有保留点;
释放事务中的加锁;
2. 执行包含“TO”保留点子句的ROLLBACK语句,它完成如下操作:
只回滚保留点之后的那部分事务;
撤销该保留点之后所设置的保留点;
释放该保留点之后所施加的表锁和行锁;
有些SQL命令的提交工作是隐式的,并不需要COMMIT命令就可完成提交工作:
connect, disconnect ,quit, exit,
create table, alter table, drop table,
create view,alter view,drop view,
grant, revoke, DCL
SQL>delete from emp where eid=3; --开始一个事务
已删除一行
SQL>create table tab(id number(5)); --提交事务
表已创建。--事务结束
SQL>delete from emp where eid=4 --开始一个新事务