Oracle 的用户、权限、角色、及表空间的管理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/God_XiangYu/article/details/80923593

第二章: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

第三章: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:设置保持点

猜你喜欢

转载自blog.csdn.net/God_XiangYu/article/details/80923593