第二章:Oracle的用户、权限、角色及表空间的管理
Oracle数据库查询时如何对满屏的sql命令做清屏处理呢?很多朋友喜欢使用SQL*Plus,SQL*Plus工具怎么清屏呢?
oracle清屏命令汇集:
- 1、同时按SHIFT和DELETE键,然后点OK即可清屏 。
- 2、若在window窗口下sqlplus 中清屏命令:host cls 或是clear screen 或只是4位clea scre。
- 3、若在dos的窗口下进入sql/plus就要用clear SCR。
以上就是3种最好用的oracle清屏命令。
1.1 Oracle 用户登陆的语法格式
{<username>[/<password>][@<connect_identifier>] |/}[AS{SYSDBA | SYSOPER}]
- username/password:指定数据库账户用户名,口令
- connect_identifier:数据库连接的连接标识符(服务器名)。有连接标识符,SQL*Plus 将连接到默认数据库。
- SYSDAB、SYSOPER 选项是数据库管理权限。
- SYSDBA:数据库管理员的权限
- SYSOPER:数据库操作员的权限
1.2 启用scott用户
- 给scoott用户解锁[语法格式]
alter user username account unlock
例子:
alter user scott account unlock
conn scott/tiger
1.3 了解scott用户下的四张表
- Emp(雇员表)
- Dept(部门表)
- Salgrade(薪水等级表)
- Bonus(奖金表)
1.4 oracle 11g 登录 sqlplus 两种方式
1、scott@orcl
密码
2、scott/密码@orcl
2.2 Oracle的表空间管理–创建表空间
什么是表空间?(1)
- 数据库与表空间:
- 表空间实际上是数据库上的逻辑存储结果,可以把表空间理解为在数据库中开辟的一个空间,用于存放我们数据库的对象,一个数据库可以由多个表空间构成。
什么是表空间?(2)
- 表空间与数据文件
- 表空间实际上是由一个或多个数据文件构成的,数据文件的位置和大小可以由我们用户自己来定义。我们所操作的一些表啊,一些其它的数据对象都是存放在数据文件里的。那么数据文件是物理存储结构,真正可以看到的,而表空间是逻辑存储结果
- 表空间实际上是由一个或多个数据文件构成的,数据文件的位置和大小可以由我们用户自己来定义。我们所操作的一些表啊,一些其它的数据对象都是存放在数据文件里的。那么数据文件是物理存储结构,真正可以看到的,而表空间是逻辑存储结果
表空间的分类
系统表空间
系统表空间包括SYSTEM和SYSAUX表空间,其它表空间是非系统表空间。系统表空间在所有数据库中都是必须的,是在建库的时候自动创建的,一般存放数据字典表及其数据。)
永久表空间
永久表空间用于保存永久性的数据,如系统数据,应用系统数据。每个用户都会分配一个永久表空间,以便保存其schema对象的数据。除了undo表空间,相对于临时表空间( temporary)来说,其它表空间就是永久表空间(permanent),如系统表空间。)
临时表空间
执行具有排序(order by)、分组汇总(group by)、索引(create index)等功能的SQL语句时,会产生大量临时数据。服务器进程首先将临时数据存放到PGA区的排序区中,当排序区不够用时,服务器进程就会在临时表空间中建立临时段,并将这些临时数据存放到临时段中。
如果在创建用户时没有为用户指定一个临时表空间,那么就会使用SYSTEM表空间来创建临时段,存放临时数据。
这样做的结果是:
- 占用SYSTEM表空间的存储空间,是可用的存储空间下降
- 频繁地分配和释放临时段,会使SYSTEM表空间中产生大量的存储碎片,使磁盘的读取效率下降
- 由于这些原因,会直接影响数据库的性能
如果在数据库运行过程中,经常有大量的并发程序,为了避免在SYSTEM表空间中存储临时数据,DBA应该在数据库中创建一个专门用来存储临时数据的临时表空间,对应的文件称为临时文件。临时表空间可以被所有用户共享使用,如TEMP表空间。
用户的临时表空间是创建这个用户时指定的。数据库默认临时表空间是在创建(create database)数据库时,使用default temporary table space子句指定。)
UNDO表空间
运行在自动undo管理(automatic undo management)模式的数据库,用undo表空间来存储、管理undo数据。Oracle使用撤销数据来隐式或显式地回退事务、提供数据的读一致性,帮助数据库从逻辑错误中恢复、实现闪回查询(Flashback Query)等。
在Oracle中可以创建多个undo表空间,但同一时刻只允许激活一个撤销表空间。在初始化参数文件中用UNDO_TABLESPACE指出要激活的撤销表空间。不使用的撤销表空间可以删除。撤销表空间的组织与管理是由Oracle内部自动完成的。当回退段不足时,一个事务可以使用多个回退段,不会终止事务的运行。DBA只需要知道撤销表空间是否有足够的空间,而不必为每个事务设置回退段。)
创建表空间的语法格式
create [TEMPORMARY] TABLESPACE
tablespace_name
TEMPFILE | DATAFILE 'xx.dbf' SIZE XX
查找表空间存放的位置
select file_name from dba_data_files where tablespace_name = '永久表空间名字';(永久表空间的位置)
select file_name from dba_temp_files where tablespace_name = '临时表空间的名字';(临时表空间的位置)
2.3 Oracle 的用户管理
创建用户的语法格式
create user <user_name>
identified by <password>
default tablespace <default tablespace>
temporary tablespace <temporary tablespace>
完整的创建用户(细节)
例子:sql>create user lixiaojun identified by HIS default tablespace users temporary tablespace temp quota 3m on users;
- indetified by :表明该用户lixiaojun 将用数据库方式验证default tablespace users //用户的表空间在users上
- temporary tablespace temp //用户lixiaojun 的临时表建在temp空间
- quota 3m on users //表明用户lixiaojun建立的数据对象(表,索引,视图,pl/sql块…)最大只能是3m
刚刚创建的用户是没有任何权限的,因此,需要dba 给该用户授权。
sql>grant connect to lixiaojun
如果你希望该用户成为dba
sql>grant dba lixiaojun
举例
create user yan identified by test default tablespace test1_tablespace temporary tablespace temptest1_tablespace
查看创建的用户
select username from dba_users
给创建的用户授权
- grant 权限 to 用户名
- 例子:grant connect to yan
管理用户
- 连接用户
- Connect 用户名/口令
- 更改密码
- Alter user 用户名 identified by 新密码
- 不希望某用户登录,而又不删除其用户,可以将用户锁定
- Alter user 用户名 account lock
- 删除用户
- drop user 用户名 cascade
- //加上cascade 则将用户连同其创建的东西全部删除
使用profile 管理用户口令(限制用户的恶意登录)
概述:profile 是口令限制,资源限制的命令集合,当建立数据时,oracle 会自动建立名称为default 的 profile,当建立用户没有指定profile 选项,那oracle 就会将default 分配给用户
- (1)账户锁定
概述:指定该账户(用户)登陆时最多可以输入密码的次数,也可以指定用户锁定的时间(天)一般用dba 的身份去执行
例子:
指定scott 这个用户最多只能尝试3次登陆,锁定时间为2天
语法格式:
sql->create profile profile 文件名 limit failed_login_attempts 3(次数) password_lock_time 2(锁定的天数);
sql->alter user tea profile lock_account;
创建profile 文件
sql->conn system/HIS@orcl;
sql->create profile userprofile1 failed_login_attempts 3 password_lock_time 2;
sql->alter user scoot profile userpfrofile1;
sql->conn scott/xxx@orcl(连续输错3次密码,输第4次时发现账户被锁住);
解锁:
sql->alter user scoot account unlock;
(2)给账户(用户)解锁
sql->alter user tea(用户名) account unlock;
(3)终止口令(用户 profile 口令管理(限制口令的使用期限))
为了让用户定期修改密码可以使用终止口令的指令来完成,同样这个命令也需要dba身份来操作。
语法:
sql->create profile myprofile(文件名) limit password_life_time 10 password_grace_time 2;
sql->alter user tea profile myprofile;
例子:
给前面创建的用户tea,创建一个profile文件,要求该用户每隔10天要修改自家的登陆密码,宽限期为2天。
sql->crate profile userprofile2 password_life_time 10 password_grace_time 2; sql->alter user scott profile userprofile2; 注意:此时修改oracle 服务器的时间,往后延迟10天与12天、13天 #查看使用scott 登录的提示信息 sql->conn scott/HIS@orcl;
删除 profile
drop profile profile(文件名)[cascade]
2.4 Oracle 的角色管理
什么是角色?
- Oracle角色(role)就是一组权限(或者说是权限的集合)
- 用户可以给校色赋予指定的权限,然后将角色赋给相应的用户。
角色的作用
三种标准的角色
1、connect(连接角色)
拥有connect 权限的用户只可以登录Oracle,不可以创建实体,不可以创建数据库结构
2、resource(资源角色)
拥有resource 权限的用户只可以创建实体,不可以创建数据库结构
3、DBA(数据库管理员角色)
拥有全部权限,是系统最高权限,只有DBA才可以创建数据库结构
- 对于普通用户:授予connect,resoucre权限
- 对于DBA管理用户:授予dba权限
创建角色
语法格式:
create role 角色名
例子:
reate role manager
为角色赋予权限
语法格式:
grant 权限 to 角色
例子:
grant create table,create view to manager
为角色赋予用户
语法格式:
grant 角色 to 用户
例子:
grant manager to user01,user02
删除角色
语法格式:
drop role 角色
例子:
drop role manager
收回权限
语法格式:
revoke 角色 from 用户
例子:
revoke manager from user02
2.5 Oracle 用户的权限管理
什么是权限?
- 权限指的是执行特定命令或访问数据库对象的权力
权限的作用?
- 数据库安全性:
- 系统安全性
- 数据安全性 -
权限的分类
- 系统权限:允许用户执行特定的数据库动作,如创建表、创建索引、连接实例等
- 对象(实体)权限:允许用户操纵一些特定的对象,如读取视图,可更新某些列,执行存储过程等
系统权限
查询Oracle 所有系统权限:
select *from system_privilege_map
常用的系统权限如:
- create session ( 创建会话 )
- create sequence ( 创建序列 )
- create table ( 创建表 )
- create user ( 创建用户 )
- alter user ( 更改用户 )
- drop user ( 删除用户 )
- create view ( 创建视图 )
举例:创建sofware 用户,让其能够查看scott 用户的emp表
1、使用 system 创建 software 用户,密码设置为HIS
create user software identified by HIS
2、要想让 software 登录(连接)数据库,需要给其 connect、session 权限(角色)
grant connect to software;
grant resource to software;
3、使用scott 用户登录系统
sql->conn scott/HIS@orcl
sql->grant select on emp to software;
或
sql->conn system/HIS@orcl
sql->grant select on scott.emp to software;
4、使用 software 登录
sql->conn software/HIS@orcl
sql—>select * from scott.emp;
方案(schema)
1、scott用户能够查看emp表,但是software 用户不能
问题:scott 用户与software 位于同一个数据库实例(orcl)里,为什么不能查看呢?
1、当用户创建好后,如果该用户创建了一个数据对象(表等),此时dbms 就会创建一个对应的方案与该用户对应,并且该方案的名称和用户名称一致。因此,得出结论system 与 scott 都拥有自己的方案
2、Oracle 实例里,能不能再同一个实例里不同的用户创建同样名称的数据对象(表)呢?
答案是可以的
3、方案(schema),当某用户创建一个数据对象时,此时 dbms 就会创建一个对应的方案与该用户对应,并且该方案的名称和用户名名称一致。因此,得出结论 system 与 scott 都拥有自己的方案
4、如果想查看某一用户的数据对象,可以通过pl/sql developer 查看;
授予系统权限的语法格式
grant privilege [,privilege…] to user [,user | role,public…]
举例:
grant create table,create sequence to manager;
grant manager to user01,user02;
- 注意:这句话的意思是对用户user01,user02分配了创建表,创建序列的权限
回收系统权限的语法格式:
revoke{privilege | role} from {user_name | role_name | public}
- 举例:
revoke manager from user01;
revoke create table,create sequence from manager;
对象权限
查询Oracle所有对象权限
select * form table_privilege_map
常用的对象权限如:
- select,update,insert,delete,all等
- //all包括所有权限
授予对象权限的语法格式
grant object_priv | all[(columns)] on object to {user | role | public}
- 举例:
- grant select,update,insert on scott.emp to manager2;
- grant manager2 to user03;
- grant all on scott.emp to user04;
回收对象权限的语法格式
revoke {privilege [,privilege...] | all} on object from {user[,user...] |role | public}
- 举例:
- revoke all on scott.emp from user04;
Oracle 表空间管理–查看用户的表空间
查看用户的表空间
相关的数据字典:
- dba_tablespaces
- user_tablespces
例子:
select tablespace_name from dba_tablespaces; select tablespace_name from user_tablespaces;
查看系统用户的表空间
数据字典:
- dba_users
- user_users
例:查看system 用户的表空间信息
select default_tablespace,temporary_tablespace from dba_users where username = 'system';
设置用户默认或临时表空间
语法格式:
alter user username default | temporary tablespace tablespace_name;
例子:
alter user user01 default tablespace Test1_tablespace temporary tablespace TempTest1_tablespace;
2.7 Oracle 的表空间管理–修改与删除表空间
修改表空间
- 修改表空间的状态
- 修改数据文件
修改表空间的状态1
设置联机或脱机状态
alter teblespace tablespace_name online | offline
特别说明:
- 如果一个表空间设置成脱机状态,表示该空间暂时不让访问,设置成脱机状态不是删除,当我们使用该表空间时还可以将其设置成联机状态,正常使用
查看表空间的状态:
select status from dba_tablespace where tablespace_name=’表空间名字’;
修改表空间的状态2
设置只读或可读写状态
alter tablespace tablespace_name read only | read write
- 默认是可读写状态
修改数据文件
- 增加数据文件
- 删除数据文件
增加数据文件
语法格式:
alter tablespace tablespace_name add datafile ‘filename.dbf’ size xx;
- 说明:
- 向创建号的表空间里增加数据文件
删除数据文件
语法格式:
alter tablespace tablespace_name drop datafile 'filename.dbf'
- 说明:
- 不能删除表空间中的第一个创建的数据文件,如果需要删除的话,我们需要把整个的表空间除掉
删除表空间
语法格式
drop tablespace tablespace_name [including contents]
- 说明:
- 1、如果删除时只是单纯的想删除表空间,而不删除数据文件的话,可以如下:
- drop tablespace tablespace_name;
- 2、如果在删除表空间的同时,还想把数据文件也删除的话,那么需要添加如下:
- including contents
- 1、如果删除时只是单纯的想删除表空间,而不删除数据文件的话,可以如下:
第三章:Oracle 数据库表的管理
3.1 SQLDeveloper 工具的介绍
下载链接地址
链接上需要用的数据库用户
连接时报错码:Listener refused the connection with following error:ORA-12505,TNS:listener……
确定这是连接数据库的SID错误,
- 解决方法:
1.知道你的SID名:可以再注册表中查找,也可以通过借助Oracle的sqlplus工具并以管理员方式连接敲命令查看:select instance_name from v$instance;必须是管理员身份,否则“视图不存在”。我的操作如下:
2.在Oracle SQL Developer连接工具上修改你的数据库SID名,我的如下(把”xe”修改成”orcl”):
3.勾选“保存命令”,“角色”选择数据库管理员。
4.点击“保存”和“测试”,并连接,剩下的就是连接成功了。
特别提示:
如若再不行!那就得修改监听文件了oracle 的Developer连接不上报错:listener does not currently know of SID given in connect descriptor
- 解决办法:
在 D:\app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN中找到listener.ora文件,修改后的文件在“下面”中,复制并覆盖就ok了。
- listener.ora Network Configuration File: D:\app\Administrator\product\11.2.0\dbhome_1\network\admin\listener.ora
Generated by Oracle configuration tools.
把listener.ora中的配置改成如下即可:
SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = CLRExtProc) (ORACLE_HOME = D:\app\Administrator\product\11.2.0\dbhome_1) (PROGRAM = extproc) (ENVS = "EXTPROC_DLLS=ONLY:D:\app\Administrator\product\11.2.0\dbhome_1\bin\oraclr11.dll") ) (SID_DESC = (GLOBAL_DBNAME = orcl) (ORACLE_HOME = D:\app\Administrator\product\11.2.0\dbhome_1) (SID_NAME = orcl) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) ) ) ADR_BASE_LISTENER = D:\app\Administrator
如按照以上操作还是连接不上,可能是你的SID错误!
3.2 Oracle 的SQL
- 结构化查询语言(Structured query Language) 简称SQL
- 是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统的语言
Oracle 的SQL查询语言
- DDL(data definition language) 数据定义语言
- DML(data manipulation language) 数据操作语言
- DCL(data control language) 数据控制语言
- TCL(transaction control language) 事物控制语言
常用的DDL 语句
- create table:创建数据库表
- create index:创建数据库表的索引
- drop table:删除据库表
- drop index:删除数据库表的索引
- truncate:删除表中的所有行
- alter table:更改表结构,增加,修改,删除列
- alter table add constraint:在已有的表上增加约束
常用的DEM 语句
- insert:添加数据到数据库中
- update:修改数据库中的数据
- delete:删除数据库中的数据
- select:选择(查询)数据
- select 是SQL语言的基础,最为重要。
常用的DCL 语句
- grant:将权限或角色授予用户或其它角色(授予访问权限)
- revoke:从用户或数据库角色回收权限(撤销访问权限)
- lock:对数据库的特定部分进行锁定
常用的TCL 语句
- commit:提交事物处理
- rollback:事物处理回退
- savepoint:设置保持点