Oracle角色配置文件.docx
《Oracle角色配置文件.docx》由会员分享,可在线阅读,更多相关《Oracle角色配置文件.docx(22页珍藏版)》请在冰豆网上搜索。
![Oracle角色配置文件.docx](https://file1.bdocx.com/fileroot1/2022-12/29/98ff04b1-c234-4659-889d-ad20b18d2b25/98ff04b1-c234-4659-889d-ad20b18d2b251.gif)
Oracle角色配置文件
Oracle角色、配置文件
--================================
--Oracle角色、配置文件
--================================
一、角色
1.角色
权限的集合,可以分配给一个用户或其他角色,但角色不能授予自己,也不能循环授予
角色的优点
可以先创建角色,向该角色赋予一系列权限,然后再将该角色授予多个用户或角色
增加或删除角色中的某一权限,被授予该角色的所有用户或角色自动地获得新增权限或删除旧的权限
可以为角色设置密码
2.创建修改角色
CREATEROLErole_name
[NOTIDENTIFIED(默认)|IDENTIFIEDBYpassword|EXTERNALLY|GLOBALLY];
注:
同一个数据库中角色名称必须唯一,且不能使用已存在的用户名称
不支持withgrantoption为角色授予对象权限
支持withadminoption为角色授予系统权限或另一个角色
使用EnterpriseManager创建某个用户时,该用户被自动授予了CONNECT角色,
即同时具有了该角色的所有权限
IDENTIFIEDBYEXTERNALLY
意味着了启用一个角色,用户必须是某个操作系统组的一个成员,该操作系统组的名称应当与角色相对应。
当希望通过操作系统对角色进行身份认证,则需要设置OS_ROLE参数为TRUE
且当设定了使用IDENTIFIEDBYEXTERNALLY身份验证,必须在数据库驻留的服务器上按以下格式创建组
ora__[_[d][a]]
d:
指示部分指定的角色为用于用户的默认角色
a:
指示可以使用withadminoption为用户授予部分所指定的角色
关于外部身份验证,请参考:
Oracle密码文件
常用的角色
角色被授予的权限
DBA几乎所有系统权限
SELECT_CATALOG_ROLE数据字典上的对象权限,未被授予任何系统权限
EXECUTE_CATALOG_ROLE数据字典上的程序包、过程、函数的对象权限
DELETE_CATALOG_ROLEDELETEONSYS.AUD$
DELETEONSYS.FGA_LOG$
EXP_FULL_DATABASE从数据库中导出数据时查询任何表或序列、执行任何过程或类型以及修改
数据字典对象的权限
IMP_FULL_DATABASE执行导入时,在数据库内除了sys模式之外的任何模式中创建对象的权限
CONNECTALTERSESSION
CREATECLUSTER
CREATEDATABASELINK
CREATESEQUENCE
CREATESESSION
CREATESYNONYM
CREATETABLE
CREATEVIEW
RESOURCECREATECLUSTER
CREATEINDEXTYPE
CREATEOPERATOR
CREATEPROCEDURE
CREATESEQUENCE
CREATETABLE
CREATETRIGGER
CREATETYPE
UNLIMITEDTABLESPACE(whengranted)
AQ_ADMINISTRATOR_ROLEAdvancedQueuing对象上的对象权限
CREATEEVALUATIONCONTEXT
CREATERULE
CREATERULESET
DEQUEUEANYQUEUE
ENQUEUEANYQUEUE
MANAGEANYQUEUE
AQ_USER_ROLEEXECUTEONSYS.DBMS_AQ
EXECUTEONSYS.DBMS_AQIN
EXECUTEONSYS.DBMS_AQJMS_INTERNAL
EXECUTEONSYS.DBMS_TRANSFORM
SCHEDULER_ADMINCREATEANYJOB
CREATEJOB
EXECUTEANYCLASS
EXECUTEANYPROGRAM
MANAGESCHEDULE
(使用WITHADMINOPTION授予上述所有权限)
PUBLIC不具有特殊的权限,不过为public角色授予权限时,所有用户都会继承该权限
--创建不要口令的角色clerk
SQL>CREATEROLEclerk;
--创建要口令的角色sales
SQL>CREATEROLEsalesIDENTIFIEDBYmoney;
--创建一个需要使用外部标识(如操作系统)的角色manager
SQL>CREATEROLEmanagerIDENTIFIEDEXTERNALLY;
--创建后查看角色:
SQL>SELECTrole,password_requiredFROMdba_roles;
ROLEPASSWORD
--------------------------------------
CLERKNO
SALESYES
MANAGEREXTERNAL
角色修改:
ALTERROLErolename
[NOTIDENTIFIED|IDENTIFIED
BYpassword|EXTERNALLY|GLOBALLY];
一个角色在创建后可以修改,但只能修改它的验证方法。
但只有角色是使用带有withADMINoption选项的GRANT语句授予的或者具
有ALTERANYROLE系统权限的用户时,才可以修改这个角色
--将角色clerk的验证方法改为使用外部(如操作系统)标识
SQL>ALTERROLEclerkIDENTIFIEDEXTERNALLY;
--将角色sales的验证方法改为不使用任何标识方法
SQL>ALTERROLEsalesNOTIDENTIFIED;
--将角色manager的验证方法改为使用口令标识,口令为vampire
SQL>ALTERROLEmanagerIDENTIFIEDBYvampires;
--再查询后即可看到变化
SELECTrole,password_requiredFROMdba_roles
3.为角色授予和取消权限
a.角色授权
为角色授予系统权限语法
GRANTsystem_priv[,system_priv,...]
TOrole|PUBLIC[,role|PUBLIC,...]
[WITHADMINOPTION];
为角色授予对象权限语法
GRANTALL[PRIVILEGES]|object_priv[(column,column,...)]
[,object_priv[(column,column,...(],...]
ON[schema_name.]object_name
TOrole|PUBLIC[,role|PUBLIC,...];
--为角色赋予权限(GRANT):
SQL>showuser;
USERis"SYSTEM"
SQL>CREATEROLEmanager;
Rolecreated.
--赋予系统权限
SQL>GRANTCREATETABLE,CREATEVIEW,CREATESESSIONTOmanagerWITHADMINOPTION;
Grantsucceeded.
--赋予对象权限
SQL>GRANTSELECT,INSERT,UPDATEONscott.empTOmanager;
Grantsucceeded.
--查看角色的系统权限(role_sys_privs)
SQL>SELECT*FROMrole_sys_privsWHERErole='MANAGER';
ROLEPRIVILEGEADM
-----------------------------------------------------
MANAGERCREATESESSIONYES
MANAGERCREATETABLEYES
MANAGERCREATEVIEWYES
--查看角色的对象权限(role_tab_privs)
SQL>SELECT*FROMrole_tab_privsWHERErole='MANAGER';
ROLEOWNERTABLE_NAMECOLUMN_NAMEPRIVILEGEGRA
---------------------------------------------------------------------------------------------------
MANAGERSCOTTEMPUPDATENO
MANAGERSCOTTEMPINSERTNO
MANAGERSCOTTEMP
b.取消角色所拥有的权限
取消角色拥有的系统权限语法
REVOKEsystem_priv|role_name[,system_priv|role_name,...]
FROMrole|PUBLIC[,role|PUBLIC,...];
取消角色用户的对象权限语法
REVOKEALL[PRIVILEGES]|object_priv[,object_priv,...]
ON[schema_name.]object_name
FROMrole|PUBLIC[,role|PUBLIC,...]
[CASCADECONSTRAINTS]
--取消角色的系统权限
SQL>REVOKECREATEVIEWFROMmanager;
Revokedsucceeded.
--取消角色的对象权限
SQL>REVOKEINSERT,UPDATEONscott.empFROMmanager;
Revokedsucceeded.
--查看被取消权限后所剩余的权限的集合
SQL>SELECTrole,'System_privs'owner,privilege
2FROMrole_sys_privs
3WHERErole='MANAGER'
4UNION
5SELECTrole,owner,privilege
6FROMrole_tab_privs
7WHERErole='MANAGER';
ROLEOWNERPRIVILEGE
----------------------------------------------------------------------
MANAGERSCOTTSELECT
MANAGERSystem_privsCREATESESSION
MANAGERSystem_privsCREATETABLE
4.角色赋予与角色取消
a.将角色赋予用户(grant):
语法:
GRANTrole_name[,role_name,...]
TOuser_name|role|PUBLIC[,user_name|role|PUBLIC,...]
[WITHADMINOPTION];
--将角色赋予robinson且使用了WITHADMINOPTION
SQL>GRANTmanagerTOrobinsonWITHADMINOPTION;
Grantsucceeded.
--robinson有权将角色授予john,如下
SQL>CONNrobinson/lion;
Connected.
SQL>GRANTmanagerTOjohn;
Grantsucceeded.
--查看角色授予了哪些用户(dba_role_privs)
SQL>SELECT*FROMdba_role_privsWHEREgranted_role='MANAGER';
GRANTEEGRANTED_ROLEADMDEF
--------------------------------------------------------
SYSTEMMANAGERYESYES
JOHNMANAGERNOYES
ROBINSONMANAGERYESYES
--查看用户拥有哪些角色
SQL>CONNscott/tiger;
Connected.
SQL>SELECT*FROMuser_role_privs;
USERNAMEGRANTED_ROLEADMDEFOS_
---------------------------------------------------------------------
SCOTTCONNECTNOYESNO
SCOTTRESOURCENOYESNO
--查看用户拥有哪些角色(使用session_roles)
SQL>SELECT*FROMsession_roles;
ROLE
------------------------------
CONNECT
RESOURCE
b.取消用户拥有的角色
语法:
REVOKErole_name[,role_name,...]
FROMuser_name|role|PUBLIC[,user_name|role|PUBLIC,...];
--取消用户角色
SQL>REVOKEresourceFROMscott;
Revokesucceeded.
--查看resource角色已被取消
SQL>CONNscott/tiger;
Connected.
SQL>SELECT*FROMuser_role_privs;
USERNAMEGRANTED_ROLEADMDEFOS_
---------------------------------------------------------------------
SCOTTCONNECTNOYESNO
--对于使用WITHADMINOPTION参数,收回robinson角色,并不影响john的级联角色,如下:
SQL>select*fromdba_role_privswheregrantee='JOHN';
GRANTEEGRANTED_ROLEADMDEF
--------------------------------------------------------
JOHNMANAGERNOYES
SQL>revokemanagerfromrobinson;
Revokesucceeded.
SQL>select*fromdba_role_privswheregrantee='JOHN';
GRANTEEGRANTED_ROLEADMDEF
--------------------------------------------------------
JOHNMANAGERNOYES
SQL>select*fromdba_role_privswheregrantee='ROBINSON';
norowsselected
5.设置默认角色
可以将多个角色授予一个用户。
默认角色是这些角色的一个子集,默认角色在用户登录系统时
自动激活(开启)。
在默认情况下,所有赋予用户的角色在用户登录时不需要口令就被激活。
可以使用ALTERUSER语句来限制用户有的默认角色。
语法:
ALTERUSERusernameDEFAULTROLE
role[,role,...]|ALL[EXCEPTrole[,role,...]]|NONE;
ALTERUSER语句中的DEFAULTROLE子句只适用于那些使用GRANT语句直接授予用户的角色。
DEFAULTROLE子句在下列情况下是不能使用的:
通过其它角色授予的角色
没有直接授予该用户的角色
通过外部服务(如操作系统)管理的角色
--创建用户martin并授予resource,connect角色
SQL>CREATEUSERmartinIDENTIFIEDBYabc;
Usercreated.
SQL>GRANTRESOURCE,CONNECTTOmartin;
Grantsucceeded.
SQL>CONNmartin/abc;
Connected.
SQL>CONNsystem/redhat
Connected.
--设置缺省的角色为NONE后,无法登陆
SQL>ALTERUSERmartinDEFAULTROLENONE;
Useraltered.
SQL>CONNmartin/abc;
ERROR:
ORA-01045:
userMARTINlacksCREATESESSIONprivilege;logondenied
Warning:
YouarenolongerconnectedtoORACLE.
SQL>CONNsystem/redhat;
Connected.
--重置角色后可以正常登陆
SQL>ALTERUSERmartinDEFAULTROLEALL;
Useraltered.
SQL>CONNmartin/abc;
Connected.
--默认角色为除resource之外的所有角色
SQL>ALTERUSERmartinDEFAULTROLEALLEXCEPTRESOURCE;
Useraltered.
6.激活和禁止角色(SETROLE)
语法:
SETROLEALL[EXCEPTrole_name[,role_name]]|NONE|
role_name[IDENTIFIEDBYpassword][,role_name[IDENTIFIEDBYpassword,...];
SQL>CONNrobinson/lion
Connected.
--查看用户拥有的所有角色
SQL>SELECT*FROMuser_role_privs;
USERNAMEGRANTED_ROLEADMDEFOS_
---------------------------------------------------------------------
ROBINSONMANAGERNOYESNO
ROBINSONRESOURCENOYESNO
--查看用户拥有的所有权限
SQL>SELECT*FROMsession_privs;
PRIVILEGE
----------------------------------------
CREATESESSION
CREATETABLE
CREATECLUSTER
CREATESEQUENCE
CREATEPROCEDURE
CRE