首页 > 代码库 > SQL Fundamentals || DCL(Data Control Language) || 系统权限&对象权限管理(GRANT&REVOKE)
SQL Fundamentals || DCL(Data Control Language) || 系统权限&对象权限管理(GRANT&REVOKE)
SQL Fundamentals || Oracle SQL语言
语句 | 解释 |
Create user | Creates a user(usually performed by a DBA) |
Grant | Gives other users privileges to access the objects |
Create role | Creates a collection of privileges, usually performed by a DBA |
Alter user | Changes a user‘s password |
Revoke | Removes privileges on an object from users |
通过数据字典查询
数据字典视图 | 描述 |
dba_users | 用户 |
dba_ts_quotas | 每个用户空间使用配额 |
dba_profiles | 查询profile文件 |
dba_sys_privs | 查询用户权限 |
dba_roles | 查看角色 |
ROLE_SYS_PRIVS | 授予角色的系统权限 |
ROLE_TAB_PRIVS | 授予角色的表权限 |
USER_ROLE_PRIVS | 授予用户的角色 |
USER_SYS_PRIVS | 授予用户的系统权限 |
USER_TAB_PRIVS_MADE | 用户对象上授予的权限 |
USER_TAB_PRIVS_RECD | 授予用户的对象权限 |
USER_COL_PRIVS_MADE | 用户某列上授予的对象权限 |
USER_COL_PRIVS_RECD | 授予用户某列上的对象权限 |
权限管理
- Oracle系统权限与对象权限的划分;
- 用户的授权操作GRANT与权限回收REVOKE操作;
权限分类
所有的权限应该由DBA进行控制,在SQL语句规范之中针对于权限的控制提供了两个核心的操作命令:
- GRANT(授权)
- REVOKE(回收权限)
系统权限 | 进行数据库资源操作的权限,例如:创建数据表、索引等权限; 系统权限主要指的是资源操作的权限, 系统权限是在数据库中执行某种特定操作的权利,系统权限并不针对某个特定的对象,而是针对整个数据库范围。 系统权限针对的是全局用户。 例如:数据库管理员(DBA)是数据库系统中级别最高的用户,它拥有一切的系统权限以及各种资源的操作能力。 在Oracle中有100多种的系统权限,并且不同的数据库版本相应的权限数也会增加。 系统规定用户使用数据库的权限。(系统权限是对用户而言) |
对象权限 |
维护数据库中对象的能力,即:由一个用户操作另外一个用户的对象。 对象权限指的是数据库之中某一个对象所拥有的权限, 即:可以通过某一个用户的对象权限,让其他用户来操作本用户中的所有授权的对象。 在Oracle之中一共定义了八种对象权限,分别是:SELECT、INSERT、UPDATE、DELETE、EXECUTE、ALTER、INDEX、REFERENCES。 |
系统权限
系统权限分类:
DBA | 拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构 |
RESOURCE | 拥有Resource权限的用户只可以创建对象,不可以创建数据库结构 |
CONNECT | 拥有Connect权限的用户只可以登录oracle,不可以创建对象,不可以创建数据库结构 |
对于普通用户 | 授予connect, resource权限。 |
对于DBA管理用户 | 授予connect,resource, dba权限 |
常用的系统权限有:
CREATE SESSION | 连接到数据库上 |
CREATE SEQUENCE | 创建序列,序列是一系列数字,通常用来自动填充主键列 |
CREATE SYNONYM | 创建同名对象 |
CREATE TABLE | 创建表 |
CREATE ANY TABLE | 在任何模式中创建表 |
DROP TABLE | 删除表 |
DROP ANY TABLE | 删除任何模式中的表 |
CREATE PROCEDURE | 创建存储过程 |
EXECUTE ANY PROCEDURE | 执行任何模式中的存储过程 |
CREATE USER | 创建用户 |
DROP USER | 删除用户 |
CREATE VIEW | 创建视图 |
为用户授权
- 系统权限只能由DBA用户授出:sys,system(最开始只能是这两个用户)
- 普通用户通过授权可以具有与system相同的用户权限,但永远不能达到与sys用户相同的权限,system用户的权限也可以被回收。
- 授权语法:
GRANT 权限 , … TO [用户名 , … | 角色名 , …. | PUBLIC] [WITH ADMIN OPTION] ; |
- 语法解释:
权限: | 主要指的是各个系统权限 |
TO: | 设置授予权限的用户、角色或者是使用PUBLIC将此权限设置为公共权限; |
WITH ADMIN OPTION: | 将用户授予的权限继续授予其他用户,则得到的权限可以传递。 |
- 范例
为c##wendy用户授予CREATE SESSION权限,这样用户就可以登录了. |
GRANT CREATE SESSION TO c##wendy ; |
为c##wendy用户授权; 12C以前的oracle版本在授权后需要重新登录,只有登录时会取权限。 12C是动态取得权限. |
GRANT CREATE TABLE , CREATE SEQUENCE , CREATE VIEW TO c##wendy WITH ADMIN OPTION ; |
利用c##wendy用户登录,而后将创建表、以及创建序列的权限授予c##gaga用户 |
GRANT CREATE TABLE , CREATE SEQUENCE TO c##gaga ; |
撤消权限
- 撤消权限语法:
REVOKE 权限 , ... FROM 用户名 ; |
- 范例
将c##wendy用户的CREATE VIEW、CREATE TABLE权限回收 |
REVOKE CREATE TABLE , CREATE VIEW FROM c##wendy; |
通过c##wendy用户回收c##gaga用户的CREATE SEQUENCE权限 |
REVOKE CREATE SEQUENCE FROM c##gaga ; |
说明:
1)如果使用WITH ADMIN OPTION为某个用户授予系统权限,那么对于被这个用户授予相同权限的所有用户来说,取消该用户的系统权限并不会级联取消这些用户的相同权限。
2)系统权限无级联,即A授予B权限,B授予C权限,如果A收回B的权限,C的权限不受影响;系统权限可以跨用户回收,即A可以直接收回C用户的权限。
对象权限
- 在Oracle之中一共定义了八种对象权限,分别是:SELECT、INSERT、UPDATE、DELETE、EXECUTE、ALTER、INDEX、REFERENCES。
对象权限 | 表(Table) | 序列(Sequence) | 视图(View) | 子程序(Procedure) |
查询(SELECT) | √ | √ | √ |
|
增加(INSERT) | √ |
| √ |
|
更新(UPDATE) | √ |
| √ |
|
删除(DELETE) | √ |
| √ |
|
执行(EXECUTE) |
|
|
| √ |
修改(ALTER) | √ | √ | √ |
|
索引(INDEX) | √ |
| √ |
|
关联(REFERENCES) | √ |
|
|
|
授予对象权限
- GRANT 对象权限 | ALL [(列 , ...)]
ON 对象
TO [用户名 | 角色名 | PUBLIC]
[WITH GRANT OPTION] ;
语法组成:
对象权限 | 指的是表所列出的权限标记,如果设置为ALL表示所有对象权限; |
ON | 要授予权限的对象名称; |
TO | 将此权限授予的用户名称或角色名称,如果设置为PUBLIC表示为公共权限; |
WITH GRANT OPTION: | 允许授权用户继续授权其他用户。 |
- 范例
为c##wendy用户授予c##scott用户dept表的查询以及增加权限 |
GRANT SELECT , INSERT ON c##scott.dept TO c##wendy ; |
将c##scott.dept数据表更新部门编号(dname)的权限授予c##wendy用户 |
GRANT UPDATE(dname) ON c##scott.dept TO c##wendy ; |
允许系统上的所有用户从wendy的t表中查询数据: |
GRANT select ON wendy.t TO PUBLIC; |
将表的操作权限授予全体用户: |
grant all on product to public//public 表示所有的用户 |
从数据字典中查询当前用户授权权限. |
SELECT * FROM user_tab_privs_recd; |
回收对象权限
- 如果要对对象权限进行回收,则继续使用REVOKE语句完成。
REVOKE [权限 , .... | ALL] ON 对象 FROM [用户 , .... | 角色 | PUBLIC] ; |
- 回收c##scott.dept上的相关权限
REVOKE SELECT , INSERT ON c##scott.dept FROM c##wendy ;
REVOKE UPDATE ON c##scott.dept FROM c##wendy ;
如果取消某个用户的对象权限,那么对于这个用户使用WITH GRANT OPTION授予权限的用户来说,同样还会取消这些用户的相同权限,也就是说取消授权时级联的。
SQL Fundamentals || DCL(Data Control Language) || 系统权限&对象权限管理(GRANT&REVOKE)