共計 7206 個字符,預計需要花費 19 分鐘才能閱讀完成。
這篇文章將為大家詳細講解有關 oracle 中 sql 如何操作,丸趣 TV 小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
oracle 用戶 sys、system 區別:
sys 用戶是超級用戶,具有最高權限,具有 sysdba 角色,有 create database 的權限
system 用戶是管理操作員,權限也很大,具有 sysoper 角色,沒有 create database 的權限
一般來說,對數據庫維護,使用 system 用戶登錄就可以
sqlplus:
Usage 2: sqlplus [[ option] [{logon | /nolog}] [start] ]
option is: [-C version] [-L] [-M options] [-R level] [-S]
logon is: {username [/ password][@ connect_identifier] | / }
[AS {SYSDBA | SYSOPER | SYSASM}] [EDITION=value]
oracle 一個數據庫就是一個單實例(創建一個數據庫就是創建一個單實例,默認有那么幾個用戶)
連接命令
1、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
文件操作命令:
1、運行 sql 腳本,start /root/a.sql
SQL start /home/oracle/a.sql
2、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 事先就有權限這個定義,有兩種
1、系統權限:用戶對數據庫訪問的相關權限(建庫建表建索引登錄數據庫等等)
create session(系統權限 140 個)
2、對象權限:用戶對其他用戶的數據對象訪問操作的權限
數據對象:每個用戶創建的表、視圖、觸發器等等(25 個)
oracle 角色:為了授予權限方便,事先定義了一些角色,賦予了一些權限
從系統權限中選出某些權限賦予給指定的角色
connect 就是其中的一個角色(包含 7 個權限)
grant connect to xiaoming
角色也分兩種:
1、自定義角色:自己定義角色
2、預定義角色:數據庫已經制定好的角色(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 角色的作用
對象權限:用戶對其他用戶的數據對象訪問操作的權限
1、select
2、insert
3、update
4、delete
5、all
6、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.
對權限的維護:
1、如果是對象權限
希望 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
2、如果是系統權限
system 用戶給 xiaoming 授權,并且使用戶能夠授權權限給其他用戶
grant connect to xiaoming with admin option; with admin option 這里不同而已
使用 profile 管理用戶口令
profile 是口令限制,資源限制的命令集合,當監理數據庫時,oracle 會自動建立
名稱為 default 的 profile,當建立用戶沒有指定 profile 選項,那么 oracle 就會將 default 分配給用戶
1、賬戶鎖定
指定該賬戶登錄時最多可以輸入密碼的次數,也可以指定用戶鎖定的時間,一般用 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 文件約束
2、解決鎖定:
SQL conn system/redhat;
Connected.
SQL alter user scott account unlock;
User altered.
SQL conn scott/redhat;
Connected
3、終止口令
為了讓用戶定期修改密碼可以使用終止口令的指令來完成,同樣這個命令也需要 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;
4、口令歷史
如果希望用戶在修改密碼時,不能使用以前使用過的密碼,口令歷史就是這樣將口令修改的信息存放在一個數據字典中
這樣當用戶修改密碼時,oracle 就會對新舊密碼進行比較,當發現新舊密碼一樣時,就會提示用戶需要重新輸入密碼
例子:
1、建立 profile 文件
SQL create profile password_history limit password_life_time 10 password_grace_time 2 password_reuse_time 10;
—- password_reuse_time: 指定口令可重用時間即 10 天后就可以重用(新舊密碼一樣,需要過 10 天才能使用)
2、分配給某個用戶 —》tea
SQL alter user tea profile password_history;
刪除 profile
當不需要某個 profile 文件時,可以刪除該文件
SQL drop profile password_history [cascade];
用此 profile 約束過的用戶都將失效
cascade:級聯關系
關于“oracle 中 sql 如何操作”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。