权限和角色
2019-03-19 本文已影响0人
一片冰心一生平安
- 权限
- 系统权限:用户对数据库的相关权限。(或者说,是否可以连接到数据库上,在数据库中可以进行哪些系统操作)——创建/删除/登录
系统权限授权命令的使用,
语法:
GRANT 权限名 TO 用户|角色|PUBLIC
其中,PUBLIC表示将权限赋给数据库中所有的用户
例:赋给用户USER1权限CREATE TABLE的授权命令如下:
SQL>GRANT CREATE TABLE TO USER1;
授权语句还可以增加WITH ADMIN OPTION选项,表示被授权的用户可以将它所得权限赋给其它用户:
SQL>GRANT CREATE TABLE,CREATE VIEW TO USER1,USER2 WITH ADMIN OPTION;
若要了解各用户所拥有的系统权限,可以查询数据字典USER_SYS_PRIVS、ROLE_SYS_PRIVS。
若要回收权限,则使用REVOKE命令,如:
SQL>REVOKE CREATE TABLE FROM USER1;
- 对象权限(又叫,实例权限):用户对其他方案的数据对象(表、视图、存储过程等)的操作权限——select /insert/update/delete/all/create index/alter/references/execute......
用户可以直接访问自己方案的对象。但是如果要访问别的方案的对象,则必须具有对象的权限。比如Smith用户要访问scott.emp表(scott:方案,emp:表),则必须在scott.emp表上具有对象的权限。
实体权限的授命令,
语法如下:
GRANT 实体权限名|ALL TO 用户|角色|PUBLIC
其中,ALL表示实体的所有实体权限。
如,
SQL>GRANT SELECT ON BOOKS_QUTHORS TO USER1;
查询表的实体权限的授权信息:
SQL>SELECT * FROM USER_TAB_PRIVES;
若要回收实体权限,使用REVOKE,其语法如下:
REVOKE 实体权限名|ALL ON 实体名 FROM 用户名|角色名|PUBLIC
- 举个例子来说:select any table是系统权限,它表示可以查看任何表。而select on table1是实体权限,表示对表table1的查询权限。
查看所有系统权限:
select * from sys.system_privilege_map;
——查找数据库中定义的的所有System privileges,即 查看oracle提供的系统权限
查看当前用户的所有系统权限:
SELECT * FROM USER_SYS_PRIVS;
——查找当前登录用户所拥有的所有system privileges
- 角色
一部分权限事先捆绑在一起,即权限的集合
- DBA: 拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构。
- RESOURCE:拥有Resource权限的用户只可以创建实体(对象),不可以创建数据库结构。
- CONNECT:拥有Connect权限的用户只可以登录Oracle,不可以创建实体,不可以创建数据库结构。
对于普通用户:授予connect, resource权限。
对于DBA管理用户:授予connect,resource, dba权限。
查看所有角色:
select * from dba_roles;
查看用户所拥有的角色:
select * from dba_role_privs;
select * from user_role_privs;
查询一个角色包括的权限:
desc dba_sys_privs;
select * from dba_sys_privs where grantee='CONNECT';
connect要大写
或者 select * from role_sys_privs where role='角色名';
- 赋予权限:
常用的数据对象权限有以下五个:
ALL ON 数据对象名,
SELECT ON 数据对象名,
UPDATE ON 数据对象名,
DELETE ON 数据对象名,
INSERT ON 数据对象名,
ALTER ON 数据对象名
GRANT CONNECT, RESOURCE TO 用户名;
GRANT SELECT ON 表名 TO 用户名;
GRANT SELECT, INSERT, DELETE ON表名 TO 用户名1, 用户名2;
- 收回权限
REVOKE CONNECT, RESOURCE FROM 用户名;
REVOKE SELECT ON 表名 FROM 用户名;
REVOKE SELECT, INSERT, DELETE ON表名 FROM 用户名1, 用户名2;
- with admin option 只能在赋予 system privilege 的时使用
- with grant option 只能在赋予 object privilege 的时使用
- 收回带有admin option 的system privileges 时,连带的权限将保留
取消是不级联的 - 收回带有grant option 的object privileges 时,连带的权限也将收回
权限赋予/取消是级联的
- 举例说明
问题 1:如何查看某个用户,具有什么样的角色?
select * from dba_role_privs where grantee='用户名';
问题 2:如何查询一个角色包括的权限?
a.一个角色包含的系统权限
select * from dba_sys_privs where grantee='角色名';
select * from dba_sys_privs where grantee='COONNECT'; connect要大写
另外也可以这样查看:
select * from role_sys_privs where role='角色名';
b.一个角色包含的对象权限
select * from dba_tab_privs where grantee='角色名';
问题 3:oracle 究竟多少种角色?
SQL> select * from dba_roles;
------------------------------------------------------------------------------
某普通用户登陆,
查自己的角色
SQL> select * from user_role_privs;
查自己拥有哪些系统权限
SQL> select * from session_privs;
查自己可以访问对象的权限
SQL>select * from user_tab_privs;
用sys用户,
查某用户的系统权限:
SQL> select * from dba_sys_privs where grantee='MHHP_TEST';
用户的对象权限:
SQL> select * from dba_tab_privs where grantee='MHHP_TEST' and
privilege='EXECUTE';
用户的角色:
SQL> select * from dba_role_privs where grantee='MHHP_TEST';
------------------------------------------------------------------------------
ORACLE中数据字典视图分为3大类,用前缀区别,
分别为:USER,ALL 和 DBA,许多数据字典视图包含相似的信息。
USER_*:有关用户所拥有的对象信息,即用户自己创建的对象信息
ALL_*:有关用户可以访问的对象的信息,
即用户自己创建的对象的信息加上其他用户创建的对象但该用户有权访问的信息
DBA_*:有关整个数据库中对象的信息
这里的*可以为TABLES, INDEXES, OBJECTS, USERS等。
1.查看所有用户:
select * from dba_user;
select * from all_users;
select * from user_users;
2.查看用户系统权限:
select * from dba_sys_privs;
select * from all_sys_privs;
select * from user_sys_privs;
3.查看用户对象权限:
select * from dba_tab_privs;
select * from all_tab_privs;
select * from user_tab_privs;
4.查看所有角色:
select * from dba_roles;
5.查看用户所拥有的角色:
select * from dba_role_privs;
select * from user_role_privs;
6.查看当前用户的缺省表空间
select username,default_tablespace from user_users;
7.查看RESOURCE具有那些权限,用
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE='RESOURCE';