Oracle和SQL Server的區別:sql
SQL Server用戶sa登陸後,能夠看到不少數據庫;而Oracle的啓動實際上是啓動一個Oracle的實例,至關於一個數據庫。那麼Users只能對這個Oracle實例中的數據對象擁有權限。而每一個用戶擁有的數據對象可能不相同。數據庫
Oracle的用戶管理網絡
Oracle安裝完成後,會默認生成三個用戶,sys、system、scott,其中scott是普通用戶;sys是超級管理員,權限最高,角色是dba,而且具備create database的權限;system是系統管理員,權限也很高,角色是dbaoper,沒有create database權限。session
Oracle權限介紹:oracle
(1)權限:ide
查詢oracle中全部的系統權限,通常是DBA去操做spa
select * from system_privilege_map order by name;code
查詢全部的對象權限: select distinct privilege from dba_tab_privs;orm
查詢數據庫的表空間: select tablespace_name from dba_tablespaces;對象
回收系統權限和對象權限的區別:系統權限不是級聯回收,而對象權限會級聯回收。好比:A 將系統權限授予B, B又將權限授予C,若是A收回B的權限,那麼C的系統權限不會被回收。而對象權限則不是,若是A收回B的對象權 限,那麼C的對象權限也將被收回。
(2)角色
角色是爲了簡化權限的管理,是相關權限的命令集合。角色通常是由DBA來創建,若是別的用戶創建,須要有create role的系統權限。那麼如何建立角色?
a. 建立角色:
create role roleName not identified; create role roleName identified by password; 後者加口令驗證,若是要修改角色則須要提供password。
b. 給角色受權:
(注意:系統權限的unlimited tablespace 和對象權限的 with grant option 選項不能授予角色)
grant create session to roleName [with admin option]; grant select on dog.emp to roleName;
前者受權系統權限,後者受權其餘用戶的對象權限。通常受權對象權限,最好是對應用戶去受權。
c. 刪除角色:drop role roleName; 須要注意的是:一旦role被刪除,那麼會影響到擁有該角色的用戶。
d. 顯示角色信息:
顯示全部角色: select * from dba_roles;
顯示角色具備的系統權限: select privilege, admin_option from role_sys_privs where role = 'roleName'; 顯示角色具備的對象權限: role_tab_privs
(2)User
create user username identified by password
建立一個新的用戶,通常是具備DBA(數據庫管理員)權限的user才能建立。
在這裏引出方案的概念。方案的定義是:數據庫對象的集合,用來管理該用戶的數據對象。在建立一個新的用戶以後,oracle數據庫會自動爲該用戶建立方案,並以用戶名 命名方案。
passw[ord] [userName] 或者 alter user username identified by newPassword
該命令用於修改用戶的密碼。若是想要修改其餘用戶的密碼,則使用後者,而且操做的用戶須要具備sys/system等DBA的權限或alter user的系統權限。
drop user userName [cascade]
刪除用戶,通常以DBA的身份去刪除某個用戶;若是其餘用戶去刪除用戶須要具備drop user的權限。並且當前用戶本身不能夠刪除本身。若是用戶已經建立了表等,刪除時須要帶cascade參數進行級聯刪除。
顯示用戶具備的角色: select granted_role, default_role from dba_role_privs where grantee = 'userName';
用戶管理案例:建立的新用戶是沒有任何權限的,甚至連connnect數據庫的權限都沒有,須要爲其指定相應的權限。賦權限 grant,收回權限 revoke。
create user dog identified by dog;
--connect 角色可以使用戶鏈接到數據庫,resuorce可使用戶建表等
grant connect, resource to userName;
建立emp等表,同時再建立一個user muscleDog/muscleDog
DROP TABLE DEPT; CREATE TABLE DEPT( DEPTNO NUMBER(2) CONSTRAINT PK_DEPT PRIMARY KEY, DNAME VARCHAR2(14) , LOC VARCHAR2(13)); DROP TABLE EMP; CREATE TABLE EMP( EMPNO NUMBER(4) CONSTRAINT PK_EMP PRIMARY KEY, ENAME VARCHAR2(10), JOB VARCHAR2(9), MGR NUMBER(4), HIREDATE DATE, SAL NUMBER(7,2), COMM NUMBER(7,2), DEPTNO NUMBER(2) CONSTRAINT FK_DEPTNO REFERENCES DEPT); INSERT INTO DEPT VALUES (10,'ACCOUNTING','NEW YORK'); INSERT INTO DEPT VALUES (20,'RESEARCH','DALLAS'); INSERT INTO DEPT VALUES (30,'SALES','CHICAGO'); INSERT INTO DEPT VALUES (40,'OPERATIONS','BOSTON'); INSERT INTO EMP VALUES (7369,'SMITH','CLERK',7902,to_date('17-12-1980','dd-mm-yyyy'),800,NULL,20); INSERT INTO EMP VALUES (7499,'ALLEN','SALESMAN',7698,to_date('20-2-1981','dd-mm-yyyy'),1600,300,30); INSERT INTO EMP VALUES (7521,'WARD','SALESMAN',7698,to_date('22-2-1981','dd-mm-yyyy'),1250,500,30); INSERT INTO EMP VALUES (7566,'JONES','MANAGER',7839,to_date('2-4-1981','dd-mm-yyyy'),2975,NULL,20); INSERT INTO EMP VALUES (7654,'MARTIN','SALESMAN',7698,to_date('28-9-1981','dd-mm-yyyy'),1250,1400,30); INSERT INTO EMP VALUES (7698,'BLAKE','MANAGER',7839,to_date('1-5-1981','dd-mm-yyyy'),2850,NULL,30); INSERT INTO EMP VALUES (7782,'CLARK','MANAGER',7839,to_date('9-6-1981','dd-mm-yyyy'),2450,NULL,10); INSERT INTO EMP VALUES (7788,'SCOTT','ANALYST',7566,to_date('13-JUL-87','dd-mm-yyyy'),3000,NULL,20); INSERT INTO EMP VALUES (7839,'KING','PRESIDENT',NULL,to_date('17-11-1981','dd-mm-yyyy'),5000,NULL,10); INSERT INTO EMP VALUES (7844,'TURNER','SALESMAN',7698,to_date('8-9-1981','dd-mm-yyyy'),1500,0,30); INSERT INTO EMP VALUES (7876,'ADAMS','CLERK',7788,to_date('13-JUL-87','dd-mm-yyyy'),1100,NULL,20); INSERT INTO EMP VALUES (7900,'JAMES','CLERK',7698,to_date('3-12-1981','dd-mm-yyyy'),950,NULL,30); INSERT INTO EMP VALUES (7902,'FORD','ANALYST',7566,to_date('3-12-1981','dd-mm-yyyy'),3000,NULL,20); INSERT INTO EMP VALUES (7934,'MILLER','CLERK',7782,to_date('23-1-1982','dd-mm-yyyy'),1300,NULL,10);
a. 【dog】賦查詢...dog用戶emp表的權限給muscleDog用戶。
grant select[, insert, update, delete/ all] on tableName to userName;
conn muscleDog 後,select * from dog.emp;
因而可知,Oracle容許兩張同名的表,只要不在同一個表空間當中。Oracle數據庫數據對象的組織方式是 以用戶爲單位來組織的。
b. 【dog】收回muscleDog的權限。 注意:收回權限必須由相應的受權人。
revoke select[, insert, update, delete/ all] on tableName from userName;
c. (權限的維護) 但願在給muscleDog用戶權限的時候,容許muscleDog用戶能夠將權限傳遞給其餘的用戶。
--【dog】若是是對象權限,則在受權後面加上 with grant option
grant select[, insert, update, delete/ all] on tableName to userName with grant option;
--【system】建立thinDog用戶
-- 【muscleDog】將dog的emp表賦select...權限給thinDog
grant select on dog.emp to thinDog;
--【sys/system】若是是系統權限,則在受權後面加上 with admin option
grant connect[, resource, dba] to userName with admin option;
d. 收回muscleDog的對dog.emp表的select權限,那麼thinDog的權限還存在嗎?
thinDog的select權限也被收回了。株連。。。
使用profile管理用戶口令
profile是口令限制,資源限制的命令集合,當創建數據庫時,oracle會自動創建名稱爲default的profile。當創建用戶沒有指定profile選項,那oracle就會將default分配給用戶。
a. 帳戶鎖定:指定用戶登陸最多能夠輸入的密碼次數,也能夠指定用戶鎖定的時間(天),通常以dba的身份去操做。
sql> create profile lock_account limit failed_login_attempts 3 password_lock_time 2;
sql> alter user userName profile lock_account.
b. 解鎖帳戶
sql> alter user userName account unlock;
c. 終止口令:爲了讓用戶按期修改密碼,可使用終止口令來完成,一樣須要dba身份。
給用戶建立一個profile 文件,要求該用戶每隔10天修改密碼,寬限期爲2天。
sql> create profile myProfile limit password_life_time 10 password_grace_time 2;
sql> alter user userName profile myProfile;
d. 口令歷史:若是但願用戶在修改密碼時,不能使用之前使用過的密碼,可使用口令歷史,這樣Oracle講口令 修改的信息存放在數據字典中,當用戶修改密碼時,Oracle會比較新舊密碼。
sql> create profile password_history limit password_life_time 10 password_grace_time 2 password_reuse_time 10;
password_reuse_time //指定口令能夠重用時間,即10天后就能夠重用
sql> alter user userName profile myProfile;
e. 刪除profile: sql> drop profile password_history [cascade]
Sql * Plus 經常使用命令:
鏈接命令
conn[ect]
用法: conn userName/password@網絡服務名(數據庫名) [as sysdba/sysoper]
當時用特權用戶(好比 sys)身份鏈接時,必須帶上 as sysdba 或 as sysoper,
不然會報:ERROR ORA-28009:connection as SYS should be as SYSDBA or SYSOPER。
disc[onnect]
該命令用來斷開與當前數據庫的鏈接。
show user 顯示當前用戶名
exist 該命令會斷開與數據庫的鏈接,同時推出Sql * plus
文件操做命令
start 和 @ 運行sql腳本
如: sql> @ D:\test.sql 或者 sql> start D:\test.sql
edit 該命令能夠編輯置頂的sql腳本
如: sql> edit D:\test.sql
spool 該命令能夠講sql * plus屏幕上的內容輸入到指定文件中。
如: sql> spool D:\bb.sql; --創建文件
sql> select * from emp; --輸入文件的內容
sql> spool off; --操做結束
顯示和設置環境變量
能夠用來控制輸出的格式,set show 若是但願永久的保存相關設置,能夠去修改glogin.sql 腳本。
1. linesize 設置顯示行的寬度,默認是80個字符
sql> show linesize;
sql> set linesize 160;
2. pagesize 設置每頁顯示的行數目,默認是14,用法同上。