- 权限分类
1、 系统权限:对于数据库操作的权限,包括但不限于:
CREATE TABLE
CREATE VIEW
CREATE SESSION
CREATE SEQUENCE
CREATE PROCEDURE
……
2、 对象权限:对于用户创建的表、视图的访问、修改能操作权限,包括但不限于:
SELECT
UPDATE
INSERT
DELETE
……
- 权限分配与回收
1、 权限分配:
GRANT 权限 TO 用户/角色
例1:将对hr用户下employee表的访问权限赋给用户SCOTT
GRANT SELECT ON hr.employee TO scott;
例2:将角色CONNECT分配给用户SCOTT
GRANT CONNECT TO scott
2、 权限回收:
REVOKE 权限 FROM 用户/角色
例1:收回用户scott对于hr用户employee表的访问权限
REVOKE hr.employee FROM scott;
例2:收回用户scott的CONNECT角色
REVOKE CONNECT FROM scott;
- 权限继承与回收
1、情景模拟:Oracle总部拥有对于Oracle产品的管理权限,Oracle总部赋予Oracle中国管理中国境内的经营事宜,如果Oracle中国需要二次分配这种权限,可以在总部赋予权限的时候,使用WITH ADMIN OPTION(系统权限继承)/WITH GRANT OPTION(对象权限继承)
例:SYS 赋予用户scott创建表的权限,然后scott可以赋予其他用户创建表的权限
SOL>CONN SYS
GRANT CREATE TABLE TO scott WITHADMIN OPTION;
说明:
CREATE TABLE属于系统权限,使用关键字WITH ADMIN OPTION赋予权限继承;
此时,SCOTT用户可以对于其他任意用户赋予创建表的权限
SQL>CONN SCOTT
GRANT CREATE TABLE TOtest;
如果是对象权限的继承则需要使用WITHGRANT OPTION
例:将对hr用户下employee表的访问权限赋给用户SCOTT,SCOTT用户可以继承
SQL>CONN hr
GRANT SELECT ON hr.employee TO scott WITH GRANT OPTION;
CONN scott
GRANT SELECT ONhr.employee TO test; --scott用户将权限二次分配给test用户;
2、继承权限回收
回收权限时,对于系统权限而言,不会回收WITH ADMIN OPTION分配的子权限;
对象权限则会级联回收,比如用户scott用户对hr用户下employe表的访问权限,scott用户又将访问权限二次分配给了新用户test,则回收scott访问权限的同时,系统会自动回收由scott二次分配的访问权限;
- 常见角色权限与分配原则
1、常见角色
DBA:拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构。
RESOURCE:只可以创建实体,不可以创建数据库结构。
CONNECT:只可以登录Oracle,不可以创建实体,不可以创建数据库结构。
2、角色权限分配原则:
对于普通用户:授予connect, resource权限。
对于DBA管理用户:授予connect,resource, dba权限。
- 常用的权限查询视图
--1、显示角色拥有的系统权限
SELECT * FROMROLE_SYS_PRIVS;
--2、角色对于表列拥有的权限
SELECT * FROMROLE_TAB_PRIVS;
--3、查询用户所属角色
SELECT * FROMUSER_ROLE_PRIVS;
--4、显示已授予给其他用户的对象权限,用户是当前登录用户
SELECT * FROMUSER_TAB_PRIVS_MADE
--5、显示已授予给其他用户的对象权限,用户是被授予者
SELECT * FROMUSER_TAB_PRIVS_RECD
--6、显示列上已授予的权限,用户是当前登录用户
SELECT * FROMUSER_COL_PRIVS_MADE
--7、显示列上已授予的权限,用户是被授予者
SELECT * FROMUSER_COL_PRIVS_RECD
--8、显示当前登录用户所拥有的系统权限
SELECT * FROMUSER_SYS_PRIVS
- 用户管理
1、 创建用户test,密码test
CREATE USER test IDENTIFIED BY test;
2、 修改用户test密码为123456
ALTER USER test IDENTIFIED BY 123456;
3、 解锁用户SCOTT
ALTER USER scott ACCOUNT UNLOCK;
- 创建数据库连接
CREATE [PUBLIC] DATABASE LINK 连接名称
CONNECT 用户名 IDENTIFIED BY 登录密码
USING 数据库实例名