oracle之sql简单操做

基于上篇文章的环境下进行操做http://huangsir007.blog.51cto.com/6159353/1854392 sql

oracle用户sys、system区别:数据库

sys用户是超级用户,具备最高权限,具备sysdba角色,有create database的权限网络

system用户是管理操做员,权限也很大,具备sysoper角色,没有create database的权限session

通常来讲,对数据库维护,使用system用户登陆就能够oracle

sqlplus:
ide

Usage 2: sqlplus [ [<option>] [{logon | /nolog}] [<start>] ]spa

<option> is: [-C <version>] [-L] [-M "<options>"] [-R <level>] [-S]对象

<logon> is: {<username>[/<password>][@<connect_identifier>] | / }blog

            [AS {SYSDBA | SYSOPER | SYSASM}] [EDITION=value]索引


oracle一个数据库就是一个单实例(建立一个数据库就是建立一个单实例,默认有那么几个用户)

链接命令

一、conn,用法:conn 用户名/密码@网络服务名 [as sysdba/sysoper]

当用特权用户身份链接时,必须带上as sysdba或者as sysoper

使用空用户登陆:

[oracle@oracle11g ~]$ sqlplus /nolog

SQL*Plus: Release 11.2.0.1.0 Production on Thu Sep 15 22:31:50 2016

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

SQL> show user;

USER is ""

SQL> 


使用system用户登陆

[oracle@oracle11g ~]$ sqlplus system/redhat

SQL*Plus: Release 11.2.0.1.0 Production on Thu Sep 15 19:56:40 2016

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

Connected to:

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> 

SQL> show user;

USER is "SYSTEM"

SQL> 

进行切换用户到scott

SQL> conn scott/redhat;

ERROR:

ORA-28000: the account is locked     代表用户已经被锁定了

使用系统用户进行解锁

SQL> conn system/redhat

Connected.

SQL> alter user scott account unlock;  该条命令进行解锁

User altered.

而后从新使用Scott用户登陆

SQL> conn scott/tiger;

ERROR:

ORA-28001: the password has expired   告知用户scott密码过时

Changing password for scott

New password: 

Retype new password: 

Password changed

Connected.

SQL> show user;

USER is "SCOTT"


文件操做命令:

一、运行sql脚本,start /root/a.sql

SQL>start /home/oracle/a.sql

二、spool将sqlplus屏幕上的输入到一个文件中

SQL>spool /home/oracle/b.sql;

SQL>select * from emp;

SQL>spool off;  将select * from emp查询出来的内容保存到某个文件中


&:能够替代变量,而该变量在执行时,须要用户输入

SQL>select * from emp where job='&job';这里就会输入job的一个值来替代

SQL> select * from emp where job='&job';   

Enter value for job: MANAGER

old   1: select * from emp where job='&job'

new   1: select * from emp where job='MANAGER'


     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM

---------- ---------- --------- ---------- --------- ---------- ----------

    DEPTNO

----------

      7566 JONES      MANAGER         7839 02-APR-81       2975

        20


      7698 BLAKE      MANAGER         7839 01-MAY-81       2850

        30


      7782 CLARK      MANAGER         7839 09-JUN-81       2450


显示和设置环境变量:

SQL> show linesize;

linesize 80

SQL>set linesize 50;


建立用户

在oracle中要建立一个新的用户使用create user语句,通常是具备dba的权限才能使用

SQL> create user xiaoming identified by redhat;

User created.

SQL> show user;

USER is "SYSTEM"

给用户修改密码,须要dba权限或者alter user的系统权限

SQL> password xiaoming

Changing password for xiaoming

New password: 

Retype new password: 

Password changed

或者

sql>alter user 用户名 identified by 新密码;

SQL> alter user xiaoming identified by redhat;

User altered.


note:新建立的用户并不能立刻可以登陆,建立的新用户没有任何权限,因此登陆不了

SQL> conn xiaoming/huang;

ERROR:

ORA-01045: user XIAOMING lacks CREATE SESSION privilege; logon deniedWarning: You are no longer connected to ORACLE.

SQL> show user;

USER is ""


删除用户:

通常以dba的身份去删除某个用户,若是用其余的用户去删除某个用户,须要具备drop user的权限

好比:drop user 用户名 [cascade]

在删除用户时,注意,若是删除的用户已经建立了表,那么就须要在删除的时候加上一个参数cascade

这个参数的意思就是删除用户以及用户建立的表


用户管理----》受权

建立的新用户是没有任何权限的,连登陆都不行,须要为其制定相应的权限,赋予权限用grant命令

回收权限的命令为revoke

oracle事先就有权限这个定义,有两种

一、系统权限:用户对数据库访问的相关权限(建库建表建索引登陆数据库等等)

create session(系统权限140个)

二、对象权限:用户对其余用户的数据对象访问操做的权限

数据对象:每一个用户建立的表、视图、触发器等等(25个)


oracle角色:为了授予权限方便,事先定义了一些角色,赋予了一些权限

从系统权限中选出某些权限赋予给指定的角色

connect就是其中的一个角色(包含7个权限)

grant connect to xiaoming 


角色也分两种:

一、自定义角色:本身定义角色

二、预约义角色:数据库已经制定好的角色(connect就是预约义角色)


角色举例:

connect

dba:授予dba角色就会有dba系统的全部权限

resource:可让某个用户在表空间建表


例子:

SQL> grant connect to xiaoming ;  将connect角色授予给xiaoming,并具有一些权限

Grant succeeded.

再次使用用户xiaoming登陆:

SQL> conn xiaoming/redhat;   这样受权以后,用户xiaoming就能够登陆了

Connected.


刚建立的用户并无任何表,新建立的用户可否建立表呢?

SQL> conn xiaoming/redhat;

Connected.

SQL> show user;

USER is "XIAOMING"

SQL> create table student(id number,name varchar2(20));

create table student(id number,name varchar2(20))

*

ERROR at line 1:

ORA-01031: insufficient privileges

由上述报错发现,授予connect角色并不能建立表,那么在加上resource角色呢?

切换用户,并授予角色给xiaoming

SQL> show user;

USER is "XIAOMING"

SQL> conn system/redhat;

Connected.

SQL> grant resource to xiaoming;

Grant succeeded.

再次建立表

SQL> show user;

USER is "XIAOMING"

SQL> conn system/redhat;

Connected.

SQL> grant resource to xiaoming;

Grant succeeded.

SQL> conn xiaoming/redhat

Connected.

SQL> create table student(id number,name varchar2(20));

Table created.

SQL> desc student;

 Name                                      Null?    Type

 ----------------------------------------- -------- ----------------------------

 ID                                                 NUMBER

 NAME                                               VARCHAR2(20)

能够看出表建立成功,这就是resource角色的做用


对象权限:用户对其余用户的数据对象访问操做的权限

一、select

二、insert

三、update

四、delete

五、all

六、create index等等

数据对象:每一个用户建立的表、视图、触发器等等(25个)

xiaoming这个用户可否查询scott用户下的某个表?

SQL> select * from emp;

select * from emp

              *

ERROR at line 1:

ORA-00942: table or view does not exist   能够清楚的看出不能访问scott下的表emp

该如何操做呢?

因为表emp是scott用户下面的,因而须要使用scott用户向xiaoming用户进行受权

SQL> conn scott/redhat

Connected.

SQL> grant select on emp to xiaoming;   使用scott用户进行受权

Grant succeeded.

SQL> conn xiaoming/redhat   链接xiaoming这个用户

Connected.

SQL> select * from emp;    查询表emp,可是依然失败,因为是scoot的表emp

select * from emp

              *

ERROR at line 1:

ORA-00942: table or view does not exist

因此须要下面这样进行查询

SQL> select * from scott.emp;  scott用户下面的表

     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM

---------- ---------- --------- ---------- --------- ---------- ----------

    DEPTNO

----------

      7369 SMITH      CLERK           7902 17-DEC-80        800

        20


收回权限revoke

scott收回xiaoming有查询的权限

revoke select on emp from xiaoming;

revoke收回权限,必须是原始用户对其赋予权限的那个用户收回

SQL> show user;

USER is "XIAOMING"

SQL> conn scott/redhat;

Connected.

SQL> revoke select on emp from xiaoming;

Revoke succeeded.


对权限的维护:

一、若是是对象权限

但愿xiaoming用户能够去查询scott的emp表,并且还但愿xiaoming能够把这个权限可以给另外的用户?

利用scott用户进行以下受权

SQL> show user;

USER is "SCOTT"

SQL> grant select on emp to xiaoming with grant option;

Grant succeeded.

而后新建一个用户,授予connect角色权限

SQL> conn system/redhat

Connected.

SQL> create user xiaobai identified by redhat;

User created.

SQL> grant connect to xiaobai;

Grant succeeded.

而后使用xiaoming用户给xiaobai用户进行受权

SQL> conn xiaoming/redhat

Connected.

SQL> grant select on scott.emp to xiaobai;

Grant succeeded.

最后使用xiaobai用户进行查询emp表

SQL> conn xiaobai/redhat

Connected.

SQL> select * from scott.emp;

     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM

---------- ---------- --------- ---------- --------- ---------- ----------

    DEPTNO

----------

      7369 SMITH      CLERK           7902 17-DEC-80        800

        20


二、若是是系统权限

system用户给xiaoming受权,而且使用户可以受权权限给其余用户

grant connect to xiaoming with admin option;   with admin option这里不一样而已


使用profile管理用户口令

profile是口令限制,资源限制的命令集合,当监理数据库时,oracle会自动创建

名称为default的profile,当创建用户没有指定profile选项,那么oracle就会将default分配给用户

一、帐户锁定

指定该帐户登陆时最多能够输入密码的次数,也能够指定用户锁定的时间,通常用dba的身份去执行该命令

例如:指定tea这个用户最多只能尝试三次登陆,锁定时间为两天

建立profile文件(规则)

SQL>create profile lock_account limit failed_login_attempts 3 password_lock_time 2;   -----》lock_account为profile名称随便起

SQL>alter user tea profile lock_account;  给用户tea添加上profile文件约束


二、解决锁定:

SQL> conn system/redhat;

Connected.

SQL> alter user scott account unlock;

User altered.

SQL> conn scott/redhat;

Connected


三、终止口令

为了让用户按期修改密码可使用终止口令的指令来完成,一样这个命令也须要dba身份来操做

例子:给前面建立的用户tea建立一个profile文件,要求该用户每隔10天要修改自家的登陆密码

宽限为2天        ----->宽限期限表示过了10以后,提醒你还有两天时间进行修改,至关于一共12天

SQL>create profile myprofile limit password_life_time 10 password_grace_time 2;

SQL>alter user tea profile myprofile;


四、口令历史

若是但愿用户在修改密码时,不能使用之前使用过的密码,口令历史就是这样将口令修改的信息存放在一个数据字典中

这样当用户修改密码时,oracle就会对新旧密码进行比较,当发现新旧密码同样时 ,就会提示用户须要从新输入密码

例子:

一、创建profile文件

SQL>create profile password_history limit password_life_time 10 password_grace_time 2 password_reuse_time 10;

---->password_reuse_time:指定口令可重用时间即10天后就能够重用(新旧密码同样,须要过10天才能使用)

二、分配给某个用户---》tea

SQL>alter user tea profile password_history;


删除profile

当不须要某个profile文件时,能够删除该文件

SQL>drop profile password_history [cascade];

用此profile约束过的用户都将失效

cascade:级联关系

相关文章
相关标签/搜索