1. 程式人生 > >用戶and權限

用戶and權限

不能 說明 ext 存在 esp 我們 可執行 emp 狀態

每次談到用戶和權限,總感覺沒什麽去分享和交流的。其實不然,不恰當的去形容好比你是個客戶去買房子,你去看200W的房子和1000W的房子那絕對不一樣,服務級別享受待遇也截然不同

數據庫中用戶和權限好比錢和房子,你用戶級別越高其實對應的權限越高,技術無非都是從這個世界人性化演變過來的。扯的多一些,那麽我數據庫中用戶密碼最基本的信息,戶使用特定用戶賬號隊友自己的特點和操作權限。那麽角色就是權限的集合,角色可以分配給用戶(給你鑰匙),把這個權限特定集合分配用戶。

啥叫用戶?

分為兩類:1、創建庫的時候系統自己創建的用戶(系統用戶) 2、另一種用系統用戶創建的用戶,叫普通用戶

格式:

select username,account_status,default_tablespace,temprorary_tablespace from user_users;

解釋:

查詢當年系統中所有的用戶和狀態所屬的表空間。

格式:

create user user_name identified by password default tablespace users;

解釋:

學習Oracle一定要學會用英語去看,用英語翻譯上一句命令就是,創建用戶user_name確認密碼password默認表空間是users;其實一句話的是,無壓力(黑色是關鍵字)。

dba_user這個表也可以查看詳細的信息,一個庫表,一個用戶!

用戶與模式(Schema)

模式就是說用戶擁有的對象集合。對象有表,索引,觸發器等等。每個用戶都會有獨立的模式信息,新建用戶除外,他們的集合為空的。Schema為空,Schema必須依賴於用戶存在。

格式:

select sys_count('userenv','current_user')current_user,sys_countext('userevn','current_schema')current_schema from dual;

解釋:

通過本條的查詢語句發現我們用System登錄後可以看到集合,到底有啥意義呢,就是說Schema_對象名組合可以限制數據庫中唯一的對象。

系統用戶sys和system

系統用戶sys和system是最常用的兩個用戶系統,那麽sys是ORACLE數據庫中最高權限用戶,角色為sysdba(數據庫管理員), system僅次於sys用戶,角色是SYSOPER(數據庫操作員).比如sys可以創建庫,那麽system不可以結合沒有這個權限(默認沒有)。

格式:

show parameter db_name;

解釋:

代碼show parameter用於顯示說明db_name(數據庫名稱)參數信息。

格式:

alter user system account unlock;

解釋:

解鎖用戶,比如scott用戶默認是不能登陸狀態,解鎖後dba_users查詢狀態則是OPEN打開

格式:

alter user scott identified by password;

解釋:

修改scott的密碼,然後登陸。

權限好比你等級,好比法律就是你在社會制度中的最高等級,Privilege的對象用戶,只要是數據庫操作對象和可執行的多動都會受到限制的。那麽也有兩種權限:1、系統權限 2、對象權限

系統權限:

系統權限是針對數據庫特定操作,如創建數據表,與對象權限不用,對已有的對象進行訪問和操作。

格式:

select distinct privilege from dba_sys_privs;

解釋:

查看系統權限都有哪一些(主要組成部分)

分配權限:

格式:

grant create session to tiger; --賦予創建會話(連接)的權限

grant create table to tiger; --賦予創建表權限

alter user tiger quota 10M on users quota 2M on temp;--因為沒有分配用戶能使用多大的表空間沒權限,用system分配空間大小

select * from dba_sys_privs where lower(grantee) = 'tiger';--查詢tiger用戶目前有的系統權限

revoke create table from tiger; --撤回回收賦予tiger的權限

對象權限:

格式:

select grantee,table_name,privilege from dba_tab_privs where lower(grantee)='tiger';

解釋:

查看grantee有的對象權限。

格式:

grant select on dual to tiger;--把system查詢dual賦權給tiger

grant insert on table to tiger; --賦予創建table(指定表名)權限

grant update(table_name) to tiger; --賦權只能更新這表中的name列;

grant all on table to tiger;--賦權全部對象權限

revoke all on table to tiger;--將tiger的對象權限全部收回


角色:

雖然我們可以利用系統和對象權限去控制,我們會發現任務量會變的非常復雜麻煩,在這個背景下,Oralce提出了角色的概念,角色我們該是介紹過就是系統權限或者對象權限的集合。Oracle允許創建角色,然後將角色信息賦予用戶,從而間接的將權限信息添加給用戶,重要的是角色可復用,某一種程度上大大減少了重復的工作和代碼量。

利用繼承的特性,從簡單的角色衍生出復雜的角色,無疑提高的權限分配的工作和效率

一起來創建一個角色

格式:

create role role_employee;

解釋:

create role創建角色的關鍵字

格式:

grant all on table to role_employee;--賦予全部權限給角色role

grant role_employee to tiger;--把角色的全部權限給tiger用戶,需要註意必須重新登錄數據庫才可以生效。

繼承角色:

角色可以繼承另一個角色的權限信息,減少自身grant的動作指令

格式:

grant system to role_employee;

解釋:

把system的權限賦權給角色role,雖然感覺意義不大,但是一些嚴謹的數據庫對用戶安全會非常重視,每一個角色都會有分類,當代碼量比較復雜時候角色的用處當然會很重要。

格式:

alter user cat default role none;

解釋:

禁止cat用戶默認角色全部禁止,查詢session_roles則為空

格式:

set role role_hr;

解釋:

啟動角色role_hr,如果有多個角色可以用逗號隔開

到最後回頭看一看文章,就是用戶角色權限三者變化和相互依賴的關系,數據庫安全僅僅依賴用戶的控制是不可行的,那麽一個相對安全邏輯緊密的數據庫沒有用戶角色權限等策略是一定不行的,清晰思路一切難題都會迎刃而解!

用戶and權限