oracle中查看用户权限.docx
《oracle中查看用户权限.docx》由会员分享,可在线阅读,更多相关《oracle中查看用户权限.docx(18页珍藏版)》请在冰豆网上搜索。
oracle中查看用户权限
oracle中查看用户权限
1.查看所有用户:
select*fromdba_users;
select*fromall_users;
select*fromuser_users;
2.查看用户或角色系统权限(直接赋值给用户或角色的系统权限):
select*fromdba_sys_privs;
select*fromuser_sys_privs;
3.查看角色(只能查看登陆用户拥有的角色)所包含的权限
sql>select*fromrole_sys_privs;
4.查看用户对象权限:
select*fromdba_tab_privs;
select*fromall_tab_privs;
select*fromuser_tab_privs;
5.查看所有角色:
select*fromdba_roles;
6.查看用户或角色所拥有的角色:
select*fromdba_role_privs;
select*fromuser_role_privs;
7.查看哪些用户有sysdba或sysoper系统权限(查询时需要相应权限)
select*fromV$PWFILE_USERS
注意:
1、以下语句可以查看Oracle提供的系统权限
selectnamefromsys.system_privilege_map
2、查看一个用户的所有系统权限(包含角色的系统权限)
Sql代码
1.select privilege from dba_sys_privs where grantee='DATAUSER'
2.union
3.select privilege from dba_sys_privs where grantee in (select granted_role from dba_role_privs where grantee='DATAUSER' );
selectprivilegefromdba_sys_privswheregrantee='DATAUSER'
union
selectprivilegefromdba_sys_privswheregranteein(selectgranted_rolefromdba_role_privswheregrantee='DATAUSER');
--================================
--Oracle用户、对象权限、系统权限
--================================
一、用户与模式
用户:
对数据库的访问,需要以适当用户身份通过验证,并具有相关权限来完成一系列动作
SYS用户,缺省始终创建,且未被锁定,拥有数据字典及其关联的所有对象
SYSTEM用户,缺省始终创建,且未被锁定,可以访问数据库内的所有对象
模式(schema):
是某个用户拥有所有对象的集合。
具有创建对象权限并创建了对象的用户称为拥有某个模式
注意:
创建数据库对象(视图,表等)的任一用户都拥有一个以该用户名称开头的模式,且被视为模式用户
二、创建及修改用户
条件:
需要具有创建用户的权限,如sys,system,sysdba,dbarole等
语法:
CREATEUSERuser
IDENTIFIED{BYpassword|EXTERNALLY|GLOBALLYASexternalname}
[DEFAULTTABLESPACEtablespace_name]
[TEMPORARYTABLESPACEtablespace_name]
[QUOTA{n{[K|M]|UNLIMITED}ONtablespace_name
QUOTA{n{[k|M]|UNLIMITED}ONtablespace_name...]
[PASSWORDEXPIRE]
[ACCOUNT{LOCK|UNLOCK}]
[PROFILE{profile_name|DEFAULT}]
eg:
CREATEUSERrobinsonIDENTIFIEDBYtiger;
--省略了DEFAULTTABLESPACE和TEMPORARYTABLESPACE时,则由database_properties中对应的参数确定
SQL>SELECTproperty_name,property_valueFROMdatabase_propertiesWHEREproperty_nameLIKE'DEFAULT%';
PROPERTY_NAMEPROPERTY_VALUE
--------------------------------------------------------------------------------
DEFAULT_TEMP_TABLESPACETEMP
DEFAULT_PERMANENT_TABLESPACEUSERS
DEFAULT_TBS_TYPESMALLFILE
更多关于表空间的请参考:
Oracle表空间与数据文件
1.修改用户
修改用户的语法同创建用户,仅仅讲关键字create替换为alter,alteruser可以修改除用户名之外的任一属性
ALTERUSERrobinsonACCOUNTLOCK;
2.修改密码
DBA可以创建用户和修改密码
用户本人可以使用ALTERUSER语句修改密码
SQL>ALTERrobinsonIDENTIFIEDBYnewpassword;
3.删除用户:
DROPUSERusername[CASCADE]
CASECADE连同用户创建的对象一并删除,如果该用户创建了对象,要加CASCADE删除,否则删除不掉
另外,不能删除当前正在与ORACLE服务器相连的用户。
4.改变用户在表空间上的配额:
ALTERUSERusernameQUOTA0ONsystem;
ALTERUSERscottQUOTAUNLIMITEDONUSERS;
ALTERUSERdogQUOTA30MONsystem;
5.查看用户表空间配额(dba_ts_quotas):
SQL>SELECTUSERNAME,TABLESPACE_NAME,MAX_BYTES/1024/1024"MaxMB"
2FROMdba_ts_quotasWHEREUSERNAME='SCOTT';
USERNAMETABLESPACE_NAMEMaxMB
--------------------------------------------------------
SCOTTSYSTEM30
6.查看特定对象下用户所拥有的对象
使用dba_objects视图
SQL>SELECTowner,object_name,object_typeFROMdba_objectsWHEREowner='SCOTT';
三、ORACLE权限:
系统权限:
允许用户执行特定的数据库动作,如创建表、创建索引、连接实例等
对象权限:
允许用户操纵一些特定的对象,如读取视图,可更新某些列、执行存储过程等
1.系统权限
超过一百多种有效的权限(SELECT*FROMSYSTEM_PRIVILEGE_MAP查)
数据库管理员具有高级权限以完成管理任务,例如:
–创建新用户
–删除用户
–删除表
–备份表
a.常用的系统权限:
CREATESESSION创建会话
CREATESEQUENCE创建序列
CREATESYNONYM创建同名对象
CREATETABLE在用户模式中创建表
CREATEANYTABLE在任何模式中创建表
DROPTABLE在用户模式中删除表
DROPANYTABLE在任何模式中删除表
CREATEPROCEDURE创建存储过程
EXECUTEANYPROCEDURE执行任何模式的存储过程
CREATEUSER创建用户
DROPUSER删除用户
CREATEVIEW创建视图
b.授予用户系统权限
GRANTprivilege[,privilege...]TOuser[,user|role,PUBLIC...]
[WITHADMINOPTION];
PUBLIC所有用户
WITHADMINOPTION使用户同样具有分配权限的权利,可将此权限授予别人
SQL>GRANTCREATESESSION,CREATETABLE,CREATEUSERTOscott;
SQL>GRANTEXECUTEANYPROCEDURETOscottWITHADMINOPTION;
SQL>CONNscott;--scott具有WITHADMINOPTION,故可以将EXECUTEANYPROCEDURE授予robinson
Enterpassword:
Connected.
SQL>GRANTEXECUTEANYPROCEDURETOrobinson;
Grantsucceeded.
SQL>GRANTEXECUTEANYPROCEDURETOPUBLIC;--将EXECUTEANYPROCEDURE授予所有用户
Grantsucceeded.
SQL>CONNsystem/redhat;--使用system为robinson授予CREATETABLE、CREATESESSION权限
Connected.
SQL>GRANTCREATETABLE,CREATESESSIONTOrobinson;
Grantsucceeded.
c.使用系统权限
--使用robinson具有创建会话、创建表
SQL>CREATETABLEtb1ASSELECT*FROMUSER_TABLES;--下面提示没有权限在users表空间创建对象
CREATETABLEtb1ASSELECT*FROMUSER_TABLES
*
ERRORatline1:
ORA-01950:
noprivilegesontablespace'USERS'
SQL>CONNsysassysdba;--使用sys帐户登陆并为robinson在users表空间指定配额后可以创建表tb1
Enterpassword:
Connected.
SQL>ALTERUSERrobinsonQUOTA10MONUSERS;
Useraltered.
SQL>CONNrobinson/lion;
Connected.
SQL>CREATETABLEtb1ASSELECT*FROMUSER_TABLES;
Tablecreated.
d.查看系统权限
dba_sys_privs--针对所有用户被授予的系统权限
user_sys_privs--针对当前登陆用户被授予的系统权限
SQL>SELECTgrantee,privilege,admin_optionFROMdba_sys_privs
2WHEREgranteeIN('SCOTT','ROBINSON')
3ORDERBYgrantee;
GRANTEEPRIVILEGEADM
-------------------------------------------------------------------------
ROBINSONCREATESESSIONNO
ROBINSONCREATETABLENO
ROBINSONEXECUTEANYPROCEDURENO
SCOTTCREATEPUBLICSYNONYMNO
SCOTTCREATESESSIONNO
SCOTTCREATESYNONYMNO
SCOTTCREATETABLENO
SCOTTCREATEUSERNO
SCOTTCREATEVIEWNO
SCOTTEXECUTEANYPROCEDUREYES
SCOTTUNLIMITEDTABLESPACENO
e.回收系统权限
REVOKE{privilege|role}FROM{user_name|role_name|PUBLIC}
--下面的示例中并没有回收掉原来由scott授予给robisnonEXECUTEANYPROCEDURE的权限
SQL>REVOKEEXECUTEANYPROCEDUREFROMscott;
Revokesucceeded.
SQL>selectgrantee,privilege,admin_optionfromdba_sys_privs
2wheregranteein('SCOTT','ROBINSON')andprivilege='EXECUTEANYPROCEDURE'
3orderbygrantee;
GRANTEEPRIVILEGEADM
-------------------------------------------------------------------------
ROBINSONEXECUTEANYPROCEDURENO
注意:
对于使用withadminoption为某个用户授予系统权限,那么对于被这个用户授予相同权限的所有
用户来说,取消该用户的系统权限并不会级联取消这些用户的相同权限
2.对象权限
不同的对象具有不同的对象权限
对象的拥有者拥有所有权限
对象的拥有者可以向外分配权限
ORACLE一共有种对象权限
对象权限表视图序列过程
修改(alter)√√
删除(delete)√√
执行(execute)√
索引(index)√
插入(insert)√√
关联(references)√√
选择(select)√√√
更新(update)√√
a.对象授权
GRANTobject_priv|ALL[(columns)]
ONobject
TO{user|role|PUBLIC}
[WITHGRANTOPTION];
ALL:
所有对象权限
PUBLIC:
授给所有的用户
WITHGRANTOPTION:
允许用户再次给其它用户授权
b.授予系统权限与授予对象权限的语法差异:
授予对象权限时需要指定关键字ON,从而能够确定权限所应用的对象。
对于表和视图可以指定特定的列来授权。
--对象授权示例
SQL>SHOWUSER;
USERis"SCOTT"
SQL>GRANTSELECTONempTOrobinson;
Grantsucceeded.
SQL>GRANTUPDATE(sal,mgr)ONempTOrobinsonWITHGRANTOPTION;
Grantsucceeded.
--新创建一个用户john,使用robinson账户授予更新scott.emp(sal,mgr)的权限
SQL>CREATEUSERjohnIDENTIFIEDBYjohn;
Usercreated.
SQL>GRANTCREATESESSIONTOjohn;
Grantsucceeded.
SQL>CONNROBINSON/LION
Connected.
SQL>GRANTUPDATE(sal,mgr)ONscott.empTOjohn;--授予scott.emp(sal,mgr)的更新权限
Grantsucceeded.
SQL>UPDATEscott.empSETsal=sal+100WHEREename='SCOTT';--成功更新
1rowupdated.
--向数据库中所有用户分配权限
SQL>GRANTSELECTONdeptTOPUBLIC;
Grantsucceeded.
c.查询权限分配情况
数据字典视图描述
ROLE_SYS_PRIVS角色拥有的系统权限
ROLE_TAB_PRIVS角色拥有的对象权限
USER_TAB_PRIVS_MADE查询授出去的对象权限(通常是属主自己查)
USER_TAB_PRIVS_RECD用户拥有的对象权限
USER_COL_PRIVS_MADE用户分配出去的列的对象权限
USER_COL_PRIVS_RECD用户拥有的关于列的对象权限
USER_SYS_PRIVS用户拥有的系统权限
USER_TAB_PRIVS用户拥有的对象权限
USER_ROLE_PRIVS用户拥有的角色
--查询已授予的对象权限(即某个用户对哪些表对哪些用户开放了对象权限)
SQL>SELECT*FROMuser_tab_privs_made;--下面是scott用户开放的对象权限
GRANTEETABLE_NAMEGRANTORPRIVILEGEGRAHIE
-----------------------------------------------------------------------------------------------
PUBLICDEPTSCOTTSELECTNONO
ROBINSONEMPSCOTTSELECTNONO
--查询列上开放的对象权限
SQL>SELECT*FROMuser_col_privs_made;
GRANTEETABLE_NAMECOLUMN_NAMEGRANTORPRIVILEGEGRA
--------------------------------------------------------------------------------------------------
ROBINSONEMPSALSCOTTUPDATEYES
JOHNEMPMGRROBINSONUPDATENO
ROBINSONEMPMGRSCOTTUPDATEYES
JOHNEMPSALROBINSONUPDATENO
--查询已接受的对象特权(即某个用户被授予了哪些表上的哪些对象特权)
SQL>SELECT*FROMuser_tab_privs_recd;
OWNERTABLE_NAMEGRANTORPRIVILEGEGRAHIE
------------------------------------------------------------------------------------------------
SCOTTEMPSCOTTSELECTNONO
--查询用户已接受列的对象权限
SQL>SELECT*FROMuser_col_privs_recd;
OWNERTABLE_NAMECOLUMN_NAMEGRANTORPRIVILEGEGRA
-------------------------------------------------------------------------------------------------
SCOTTEMPMGRSCOTTUPDATEYES
SCOTTEMPSALSCOTTUPDATEYES
d.收回对象权限
使用REVOKE语句收回权限
使用WITHGRANTOPTION子句所分配的权限同样被收回
REVOKE{privilege[,privilege...]|ALL}
ONobject
FROM{user[,user...]|role|PUBLIC}
[CASCADECONSTRAINTS];
CASCADECONSTRAINTS为处理引用完整性时需要
--收回权限示例
SQL>connscott/tiger;
Connected.
SQL>REVOKESELECTONempFROMrobinson;
Revokesucceeded.
SQL>REVOKEUPDATE(sal,mgr)ONempFROMrobinson;--注意此处的提示revoke的是整个表,而非列
REVOKEUPDATE(sal,mgr)ONempFROMrobinson
*
ERRORatline1:
ORA-01750:
UPDATE/REFERENCESmayonlybeREVOKEdfromthewholetable,notbycolumn
SQL>REVOKEUPDATEONempFROMrobinson;