在Oracle数据库中,权限用于控制用户存取,主要是为了保证系统安全和数据安全。根据系统管理方式的不同,可将权限分为系统权限与对象权限两类。
- 系统权限:能够存取数据库的权限
- 对象权限:操作数据库对象的内容
模式
这里模式指对象的集合,包括表、视图、索引等。
系统权限
Oracle数据库预定义的泛指权限,即对某一类对象的权限。DBA拥有最高的系统权限,典型的包括:
- 创建用户
- 删除用户
- 删除表
- 备份表
等等
创建用户
DBA使用 CREATE USER 语句来创建用户。
CREATE USER user
IDENTIFIED BY password;
例如:
SQL> CREATE USER scott
2 IDENTIFIED BY tiger;
用户的权限系统
一旦一个用户被创建了,DBA就可以为这个用户授予特殊的系统权限:
GRANT privilege [, privilege...]
TO user [, user...]
一个应用开发者可能有下列的系统权限:
- 创建会话
- 创建表
- 创建序列
- 创建视图
- 创建过程
角色
在数据库中,为便于对用户及权限进行管理,可以将一组具有相同权限的用户组织在一起,这一组具有相同权限的用户就称为角色(Role)。
role.JPG
CREATE ROLE 【1】
GRANT DBA TO user_test;
改变密码
DBA 创建用户账号,并初始化一个密码。用户可以使用ALTER USER语句来改变密码。
ALTER USER scott
IDENTIFIED BY lion;
对象权限
对某一个对象的权限。各种对象的权限是不同的。对象的拥有者具有该对象的所有权限,并且可以将该对象的部分权限授权给别人。
GRANT object_priv [(columns)]
ON object
TO (user|role|PLULIC)
[WITH GRANT OPTION];
授予对象权限
授予在EMP表上进行查询的权限:
SQL > GRANT select
ON emp
TO sue, rich;
为用户和角色授予Dept表上某些列的修改权限:
SQL > GRANT update(dname, loc)
ON dept
TO scott, manager;
验证授权情况
| 数据字典表 | 描述 |
|---|---|
| ROLE_SYS_PRIVS | 授予角色的系统权限 |
| ROLE_TAB_PRIVS | 授予角色的表权限 |
| USER_ROLE_PRIVS | 授予当前用户的角色 |
| USER_TAB_PRIVS_MADE | 在用户对象上所授予的系统权限情况 |
| USER_TAB_PRIVS_RECD | 授权给用户的对象权限 |
| USER_COL_PRIVS_MADE | 在用户对象的列上所授予的对象权限情况 |
| USER_COL_PRIVS_RECD | 授权给用户的某些列的对象权限 |
回收权限
使用REOVKE来回收授权给其他用户的权限。如果设置了CASCADE CONSTRAINTS ,那么将同时回收该用户通过 WITH GRANT OPTION 语句授权给其他用户的权限。
REVOKE {privilege [, privilege...]|ALL}
ON object
FROM {user[, user...] | role | PUBLIC}
[CASCADE CONSTRAINTS];
【1】详细设置可以参考Oracle 官方文档
赋予/回收权限生效
赋予/回收权限后可以立刻在session中生效。