基於上篇文章的環境下進行操做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:級聯關係