Oracle 用户,角色,权限等
權(quán)限管理是 Oracle 系統(tǒng)的精華,不同用戶登錄到同一數(shù)據(jù)庫(kù)中,可能看到不同數(shù)量的表,擁有不同的權(quán)限。Oracle 的權(quán)限分為系統(tǒng)權(quán)限和數(shù)據(jù)對(duì)象權(quán)限,共一百多種,如果單獨(dú)對(duì)用戶授權(quán),很囧,有一些用戶需要的權(quán)限是相同的,就把這些用戶歸為同一類——某種角色,通過(guò)設(shè)立一些有預(yù)定權(quán)限的角色簡(jiǎn)化和明確授權(quán)操作,角色出現(xiàn)的動(dòng)機(jī)也就是為了簡(jiǎn)化權(quán)限管理,它是權(quán)限的集合。一般做法是:系統(tǒng)把權(quán)限賦給角色,然后把角色賦給用戶,當(dāng)然也可以直接把某權(quán)限賦給用戶。Oracle 提供細(xì)粒度的權(quán)限,可以對(duì)表的某一列單獨(dú)設(shè)置權(quán)限,可以對(duì)某用戶查詢某表自動(dòng)增添 where 限制條件。
權(quán)限允許用戶訪問(wèn)屬于其它用戶的對(duì)象或執(zhí)行程序,ORACLE系統(tǒng)提供三種權(quán)限:Object 對(duì)象級(jí)、System 系統(tǒng)級(jí)、Role 角色級(jí)。這些權(quán)限可以授予給用戶、特殊用戶public或角色,如果授予一個(gè)權(quán)限給特殊用戶"Public"(用戶public是oracle預(yù)定義的,每個(gè)用戶享有這個(gè)用戶享有的權(quán)限),那么就意味作將該權(quán)限授予了該數(shù)據(jù)庫(kù)的所有用戶。對(duì)管理權(quán)限而言,角色是一個(gè)工具,權(quán)限能夠被授予給一個(gè)角色,角色也能被授予給另一個(gè)角色或用戶。用戶可以通過(guò)角色繼承權(quán)限,除了管理權(quán)限外角色服務(wù)沒(méi)有其它目的。權(quán)限可以被授予,也可以用同樣的方式撤銷。
Oracle 的角色存放在表 dba_roles 中,某角色包含的系統(tǒng)權(quán)限存放在? dba_sys_privs 中
,包含的對(duì)象權(quán)限存放在 dba_tab_privs 中。
下面是“角色”、“用戶”和“權(quán)限”的互查:
1. 用戶
例:
@>conn system/888888 Connected. SYSTEM@userdata>create user user50 identified by user50;User created.SYSTEM@userdata>grant connect,resource to user50;Grant succeeded.查看當(dāng)前登錄用戶擁有的所有角色和系統(tǒng)權(quán)限
USER50@userdata>select * from session_privs;PRIVILEGE ------------------------------------------------------------------------------------------------------------------------ CREATE SESSION UNLIMITED TABLESPACE CREATE TABLE CREATE CLUSTER CREATE SEQUENCE CREATE PROCEDURE CREATE TRIGGER CREATE TYPE CREATE OPERATOR CREATE INDEXTYPE10 rows selected.USER50@userdata>select * from role_sys_privs;ROLE PRIVILEGE ADMIN_OPT ---------------- ------------------------ --------- RESOURCE CREATE SEQUENCE NO RESOURCE CREATE TRIGGER NO RESOURCE CREATE CLUSTER NO RESOURCE CREATE PROCEDURE NO RESOURCE CREATE TYPE NO CONNECT CREATE SESSION NO RESOURCE CREATE OPERATOR NO RESOURCE CREATE TABLE NO RESOURCE CREATE INDEXTYPE NO9 rows selected.查看某一用戶所擁有的角色和系統(tǒng)權(quán)限
SYSTEM@userdata>select * from dba_role_privs where GRANTEE='USER50';GRANTEE GRANTED_ROLE ADMIN_OPT DEFAULT_R ------------------------------ -------------------- --------- --------- USER50 RESOURCE NO YES USER50 CONNECT NO YES SYSTEM@userdata>select * from dba_sys_privs where GRANTEE='USER50';GRANTEE PRIVILEGE ADMIN_OPT ------------------------------ ------------------------------ --------- USER50 UNLIMITED TABLESPACE NO查看某一用戶擁有的對(duì)象權(quán)限
SYSTEM@userdata>grant select on scott.emp to user50;SYSTEM@userdata>select * from dba_tab_privs where GRANTEE='USER50';GRANTEE OWNER TABLE_NAME GRANTOR PRIVILEGE GRANTABLE HIERARCHY -------------------- --------------- --------------- --------------- --------------- --------- --------- USER50 SCOTT EMP SCOTT SELECT NO NO2. 權(quán)限
- 系統(tǒng)權(quán)限:系統(tǒng)規(guī)定用戶使用數(shù)據(jù)庫(kù)的權(quán)限。(系統(tǒng)權(quán)限是對(duì)用戶而言)。
- 對(duì)象權(quán)限:某種權(quán)限用戶對(duì)其它用戶的表或視圖的存取權(quán)限。(是針對(duì)表或視圖而言的)。
2.1. 系統(tǒng)權(quán)限管理
2.1.1 系統(tǒng)權(quán)限分類
- DBA: 擁有全部特權(quán),是系統(tǒng)最高權(quán)限,只有DBA才可以創(chuàng)建數(shù)據(jù)庫(kù)結(jié)構(gòu)。
- RESOURCE:擁有Resource權(quán)限的用戶只可以創(chuàng)建實(shí)體,不可以創(chuàng)建數(shù)據(jù)庫(kù)結(jié)構(gòu)。
- CONNECT:擁有Connect權(quán)限的用戶只可以登錄Oracle,不可以創(chuàng)建實(shí)體,不可以創(chuàng)建數(shù)據(jù)庫(kù)結(jié)構(gòu)。
對(duì)于普通用戶:授予connect, resource權(quán)限。
對(duì)于DBA管理用戶:授予connect,resource, dba權(quán)限。
2.1.2 系統(tǒng)權(quán)限授權(quán)命令
[系統(tǒng)權(quán)限只能由DBA用戶授出:sys, system]
授權(quán)命令:SQL> grant connect, resource, dba to 用戶名1 [,用戶名2]...;
[普通用戶通過(guò)授權(quán)可以具有與system相同的用戶權(quán)限,但永遠(yuǎn)不能達(dá)到與sys用戶相同的權(quán)限,system用戶的權(quán)限也可以被回收。]
?2.1.3.權(quán)限相關(guān)的視圖
與權(quán)限,角色相關(guān)的視圖大概有下面這些:
?????? DBA_SYS_PRIVS: 查詢某個(gè)用戶所擁有的系統(tǒng)權(quán)限
????? USER_SYS_PRIVS:?? 當(dāng)前用戶所擁有的系統(tǒng)權(quán)限
????? SESSION_PRIVS:???? 當(dāng)前用戶所擁有的全部權(quán)限
????? ROLE_SYS_PRIVS:???? 某個(gè)角色所擁有的系統(tǒng)權(quán)限
?????? 注意: 要以SYS用戶登陸查詢這個(gè)視圖,否則返回空.
????? ROLE_ROLE_PRIVS:??? 當(dāng)前角色被賦予的角色
????? SESSION_ROLES:????? 當(dāng)前用戶被激活的角色
????? USER_ROLE_PRIVS:?? 當(dāng)前用戶被授予的角色
????? 另外還有針對(duì)表的訪問(wèn)權(quán)限的視圖:
?????? TABLE_PRIVILEGES
??????? ALL_TAB_PRIVS ??
?????? ROLE_TAB_PRIVS:???? 某個(gè)角色被賦予的相關(guān)表的權(quán)限
3. 角色
3.1 何為角色
角色。角色是一組權(quán)限的集合,將角色賦給一個(gè)用戶,這個(gè)用戶就擁有了這個(gè)角色中的所有權(quán)限。
3.2 系統(tǒng)預(yù)定義角色
預(yù)定義角色是在數(shù)據(jù)庫(kù)安裝后,系統(tǒng)自動(dòng)創(chuàng)建的一些常用的角色。下介簡(jiǎn)單的介紹一下這些預(yù)定角色。角色所包含的權(quán)限可以用以下語(yǔ)句查詢:
sql>select * from role_sys_privs where role='角色名';
1.CONNECT, RESOURCE, DBA
這些預(yù)定義角色主要是為了向后兼容。其主要是用于數(shù)據(jù)庫(kù)管理。oracle建議用戶自己設(shè)計(jì)數(shù)據(jù)庫(kù)管理和安全的權(quán)限規(guī)劃,而不要簡(jiǎn)單的使用這些預(yù)定角色。將來(lái)的版本中這些角色可能不會(huì)作為預(yù)定義角色。
?
2.DELETE_CATALOG_ROLE,?EXECUTE_CATALOG_ROLE,?SELECT_CATALOG_ROLE
這些角色主要用于訪問(wèn)數(shù)據(jù)字典視圖和包。
?
3.EXP_FULL_DATABASE,?IMP_FULL_DATABASE
這兩個(gè)角色用于數(shù)據(jù)導(dǎo)入導(dǎo)出工具的使用。
?
4.AQ_USER_ROLE,?AQ_ADMINISTRATOR_ROLE
AQ:Advanced Query。這兩個(gè)角色用于oracle高級(jí)查詢功能。
?
5.?SNMPAGENT
用于oracle enterprise manager和Intelligent Agent
?
6.RECOVERY_CATALOG_OWNER
用于創(chuàng)建擁有恢復(fù)庫(kù)的用戶。關(guān)于恢復(fù)庫(kù)的信息,參考o(jì)racle文檔《Oracle9i User-Managed Backup and Recovery Guide》
?
7.HS_ADMIN_ROLE
A DBA using Oracle's heterogeneous services feature needs this role to access appropriate tables in the data dictionary.
?
3.3 管理角色
1.建一個(gè)角色
sql>create role role1;
2.授權(quán)給角色
sql>grant create any table,create procedure to role1;
3.授予角色給用戶
sql>grant role1 to user1;
4.查看角色所包含的權(quán)限
sql>select * from role_sys_privs;
5.創(chuàng)建帶有口令的角色(在生效帶有口令的角色時(shí)必須提供口令)
sql>create role role1 identified by password1;
6.修改角色:是否需要口令
sql>alter role role1 not identified;
sql>alter role role1 identified by password1;
7.設(shè)置當(dāng)前用戶要生效的角色
(注:角色的生效是一個(gè)什么概念呢?假設(shè)用戶a有b1,b2,b3三個(gè)角色,那么如果b1未生效,則b1所包含的權(quán)限對(duì)于a來(lái)講是不擁有的,只有角色生效了,角色內(nèi)的權(quán)限才作用于用戶,最大可生效角色數(shù)由參數(shù)MAX_ENABLED_ROLES設(shè)定;在用戶登錄后,oracle將所有直接賦給用戶的權(quán)限和用戶默認(rèn)角色中的權(quán)限賦給用戶。)
sql>set role role1;//使role1生效
sql>set role role,role2;//使role1,role2生效
sql>set role role1 identified by password1;//使用帶有口令的role1生效
sql>set role all;//使用該用戶的所有角色生效
sql>set role none;//設(shè)置所有角色失效
sql>set role all except role1;//除role1外的該用戶的所有其它角色生效。
sql>select * from SESSION_ROLES;//查看當(dāng)前用戶的生效的角色。
8.修改指定用戶,設(shè)置其默認(rèn)角色
sql>alter user user1 default role role1;
sql>alter user user1 default role all except role1;
詳見(jiàn)oracle參考文檔
9.刪除角色
sql>drop role role1;
角色刪除后,原來(lái)?yè)碛迷摻巧挠脩艟筒辉贀碛性摻巧?#xff0c;相應(yīng)的權(quán)限也就沒(méi)有了。
轉(zhuǎn)載于:https://www.cnblogs.com/CandiceW/p/10029499.html
總結(jié)
以上是生活随笔為你收集整理的Oracle 用户,角色,权限等的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 操作系统的运行机制和体系结构
- 下一篇: 花生壳绑定顶级域名