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:級聯關係

相關文章
相關標籤/搜索